Консультация № 163198
24.03.2009, 23:16
0.00 руб.
0 3 0
Добрый вечер! Уважаемые эксперты, помогите пожалуйста найти ошибку!
У меня есть две матрицы они записаны у меня на рабочем листе, и мне надо их перемножить и вывести результат
В моей программе есть некая ошибка которую пытаюсь найти но не получается


Приложение:
Dim B(1 To 4, 1 To 4) As Variant
Dim L(1 To 4, 1 To 1) As Variant
B(i, j) = Range("M4:P7").Cells(i, j).Value
L(i, j) = Range("K4:K7").Cells(i, j).Value
D = UmnozenieM(B, L)
For i = 1 To UBound(D, 1)
For j = 1 To UBound(D, 2)
Range("C11:C14").Cells(i, j).Value = D(i, j)
Next j
Next i

Public Function UmnozenieM(B As Variant, L As Variant) As Variant
Dim BL() As Variant
Dim i, j, k As Integer
Dim N, M, P, R As Integer
Dim Elem As Variant
Dim Correct As Boolean

Correct = True
'Îïðåäåëåíèå ðàçìåðíîñòåé ìàòðèö
If TypeName(B) = "Range" Then
N = B.Rows.Count: M = B.Columns.Count
ElseIf TypeName(B) = "Variant()" Then
N = UBound(B, 1): M = UBound(B, 2)
Else: Correct = False
End If
If TypeName(L) = "Range" Then
R = L.Rows.Count: P = L.Columns.Count
ElseIf TypeName(L) = "Variant()" Then
R = UBound(L, 1): P = UBound(L, 2)
Else: Correct = False
End If

'Ïðîâåðêà êîððåêòíîñòè çàäàíèÿ ðàçìåðíîñòè
If Correct And (M = R) Then
'Ðàçìåðíîñòü çàäàíà êîððåêòíî
ReDim BL(1 To N, 1 To P)

'Ïîñòðîåíèå ïðîèçâåäåíèÿ ìàòðèö BL =B*L
For i = 1 To N
For j = 1 To P
Elem = 0
For k = 1 To M
Elem = Elem + B(i, k) * L(k, j)
Next k
BL(i, j) = Elem
Next j
Next i
UmnozenieM = BL
End If
End Function

Обсуждение

Неизвестный
25.03.2009, 01:58
общий
Меня осенило!!! нашла свою ошибку =)
Неизвестный
25.03.2009, 20:22
общий
Здравствуйте Lenusia.
не по поводу вопроса, рекомендация:
в Вашей конструкции есть строки:
Код:
   Dim i, j, k As Integer
Dim N, M, P, R As Integer
декларируются Integer переменные R и k.
В VB (VBA) все переменные без явного указания типа имеют тип Variant
Конструкция:
Код:

Dim N As Integer, M As Integer, P As Integer, R As Integer
или
Dim N%, M%, P%, R%
защитит Вас от возможных проблем.
Евгений.
Неизвестный
26.03.2009, 00:18
общий
Добрый день, Тесленко Евгений Алексеевич
спасибо большое за рекомендацию, пригодится
Форма ответа