транспонирование

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
pikass
Сообщения: 14
Зарегистрирован: 23 янв 2006, 02:21

Дана квадратная матрица. В текстовое поле вводим ее размерность n. Нужно транспонировать ее так, чтобы строка с номером n, стала столбцом с номером n, а столбец с номером n стал строкой с номером n.
У меня есть пример как транспонировать всю матрицу, а как можно для определенной строки и столбца, если можете подправьте мой исходник.

Private Sub CommandButton1_Click()
Dim m() As Byte
Dim m1() As Byte
n = Selection.Rows.Count
n1 = Selection.Columns.Count
ReDim m(1 To n, 1 To n1)
For i = 1 To n
For j = 1 To n1
m(i, j) = Selection.Cells(i, j).Value
Next
Next
For i = 1 To n
For j = 1 To n1
Selection.Cells(i, j) = m(j, i)
Next
Next
End Sub
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Нужно транспонировать ее так, чтобы строка с номером n, стала столбцом с номером n, а столбец с номером n стал строкой с номером n.
Это и есть единственно возможный способ транспонирования :)
Просто условие задачи сформулировано специально для тех, кто не знает "транспонирования".
(... Возможно также, что тот кто придумывал задачу, сам только что узнал смысл этого слова и в формулировке задачи решил непременно это подчеркнуть)
У меня есть пример как транспонировать всю матрицу
Если Вы вникните в работу вашего примера, то поймете, что он делает как раз то, что надо.

Если хотите его можно переписать так, чтобы был 1 цикл и чтобы не использовался массив M. Или так, чтобы между SUB и END была только 1 строка кода.
pikass
Сообщения: 14
Зарегистрирован: 23 янв 2006, 02:21

А как это сделать, поделись если можно, я переделал , а транспонируется только для строка на столбец, а столбец не транспонируется в строку.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

транспонируется только для строка на столбец, а столбец не транспонируется в строку
8-( ) Так не бывает! Одно автоматически означает другое.
Например
1 2 3
4 5 6
7 8 9
результат:
1 4 7
2 5 8
3 6 9
А как это сделать

Код: Выделить всё

n=selection.rows.count 
if selection.columns.count <> n then exit sub 'нечего делать - матрица не квадратная
for i=1 to n
  for j=i+1 to n
    r=selection.cells(i,j).value
    selection.cells(i,j).value=selection.vells(j,i).value
    selection.vells(j,i).value=r
  next
next
Ответить