Результат выполнения программы:
Пример 15. Умножить матрицу А (n, m) на матрицу B (m, h).
Сложность заключается в том, что результатом будет матрица и для формирования ее столбцов нужен еще один цикл.
По правилам математики, можно умножать матрицы только в том случае, если количество столбцов первой равно количеству строк во второй. При этом в результирующей матрице будет строк столько же, сколько было в первой матрице, а столбцов столько же, сколько ихбыло во второй. Это можно показать формулой A (n, m) × B (m, h) = C (n, h).
В ходе умножения матриц использовано три цикла. Первый, со счетчиком i, задает порядок умножения строк матрицы А. Второй, со счетчиком i 2, задает перебор столбцов матрицы В. В третьем цикле, со счетчиком j, происходит подсчет суммы произведений элементов i -й строки матрицы А и i 2-го столбца матрицы В. Сумма присваивается очередному элементу матрицы C, и переменная sum обнуляется.
Sub primer_15()
Dim a() As Integer, b() As Single, c() As Single
Dim n As Integer, m As Integer, h As Integer
Dim i As Integer, j As Integer, i2 As Integer
|
|
Dim sum As Single
n = Cells (1, 4)
m = Cells (2, 4)
h = Cells (3, 4)
ReDim a(n, m): ReDim b(m, h): ReDim c(n, h)
'очистка рабочего листа от посторонних надписей
For i = 1 To 10 * n
For j = 1 To 10 * m
Cells (i + 3, j) = ""
Next j
Next i
'заполнение матриц А случайными целыми числами
'вывод матрицs в рабочий лист Excel
Cells (5, 1) = "Матрица А:"
For i = 1 To n
For j = 1 To m
a(i, j) = 50 - Int (Rnd () * 100)
Cells (i + 5, j) = a(i, j)
Next j
Next i
'заполнение матриц B случайными числами
'вывод матрицs в рабочий лист Excel
Cells (5, m + 2) = "Матрица B:"
For i = 1 To m
For j = 1 To h
b(i, j) = 50 - Int (Rnd () * 1000) / 10
Cells (i + 5, j + m + 2) = b(i, j)
Next j
Next i
'умножение матриц А и В
For i = 1 To n 'номера строк матрицы A
For i2 = 1 To h 'номера столбцов матрицы B
sum = 0
For j = 1 To m 'элементы строки A
sum = sum + a(i, j) * b(j, i2)
Next j
c(i, i2) = sum 'формируем матрицу C
Next i2
Next i
Cells (n + 5 + 2, 1) = "Матрица C:"
For i = 1 To n
For j = 1 To h
Cells (i + n + 5 + 2, j) = c(i, j)
Next j
Next i