2
NinjaОшибка в использовании
index = index + 1 вместо
z=z+1 при транспонировании. На самом деле, непонятно, зачем вы производите "линеаризацию" матрицы, достаточно написать:
For i = 1 To 4
For j = 1 To 4
BT(j, i) = B(i, j)
Next j
Next i
Аналогично для
D ->
DT (т.е. массивы
BB и
DD можно выкинуть).
Кстати, удостоверьтесь в правильной индексации элементов массива, уж не с нуля ли она идет по-умолчанию? На всякий случай можно объявлять матрицы как
Dim B(1 To 4, 1 To 4) As Integer.
Далее. Я не знаю, как basic по-умолчанию инициализирует массивы, но в любом случае не помешало бы явно забивать все элементы матриц
BBT и
DDT нулями.
С
Cells вы там тоже что-то нахимичили, но это не страшно.
Насчет функций. Вам наверное надо транспонирование и умножение оформить в виде отдельных функций, да?
Транспонирование может выглядеть как-то так:
Function Transpose(Source() As Integer) As Integer()
Dim LastRow As Integer
Dim FirstRow As Integer
Dim LastColumn As Integer
Dim FirstColumn As Integer
LastRow = UBound(Source, 1)
FirstRow = LBound(Source, 1)
LastColumn = UBound(Source, 2)
FirstColumn = LBound(Source, 2)
Dim Result() As Integer
ReDim Result(FirstRow To LastRow, FirstColumn To LastColumn)
For i = FirstRow To LastRow
For j = FirstColumn To LastColumn
Result(j, i) = Source(i, j)
Next j
Next i
Transpose = Result
End Function
...
Sub RunThis()
Dim B(1 To 4, 1 To 4) As Integer
Dim BT() As Integer
ReDim BT(1 To 4, 1 To 4)
BT = Transpose(B)
End Sub
Здесь для хранения результата и для его возвращение функцией
Transpose используется динамический массив (без указания размерности при объявлении).
По-аналогии, вы можете написать функцию умножения двух матриц.