Обсуждение программы.
Элемент матрицы-результата, расположенный на I-й строке и J-м столбце, вычисляется так:
Берем I-ю строку 1-й матрицы и J-й столбец 2-й матрицы (считая слева-направо и сверху-вниз). И вычисляем их скалярное произведение. То есть произведение 1-го элемента строки на 1-й элемент столбца плюс произведение 2-го элемента строки на 2-й элемент столбца и т. д. То есть результат есть сумма произведений элементов строки и элементов столбца с одинаковыми номерами.
Количество элементов строки и столбца должно быть одинаково, иначе умножение этих матриц невозможно. То есть число строк 2-й матрицы должно равняться числу столбцов 1-й (K).
Обозначим число строк 1-й матрицы: N, число столбцов 2-й: M. Матрица-результат будет иметь N строк и M столбцов. Чтобы вычислить все элементы матрицы-результата, нужно пробежать все значения I (от 1 до N) и J (от 1 до M).
При вычислении суммы произведений нужна вспомогательная переменная. Назовем её Summa.
Текст программы
Program Umnoj2;
Const Max=50;
Var AA,BB,CC: array [1..Max,1..Max] of Double;
{то есть место для матриц выделяем с запасом}
ii,jj,kk,nn,mm,ll : integer; Summa: double;
begin
writeln ('Программа умножает матрицу A на матрицу B');
write('Введите число строк 1-й матрицы - A (<=50)--> ');readln(NN);
write('Введите число столбцов 1-й матрицы - A (<=50)--> ');readln(KK);
write('Введите число столбцов 2-й матрицы - B (<=50)--> ');readln(MM);
writeln('Введите 1-ю матрицу (A):');
for ii:=1 to nn do
for jj:=1 to kk do
begin
write('Введите A[',ii,',',jj,'] --> ');
readln(AA[ii,jj]);
end;
writeln('Введите 2-ю матрицу (B):');
for ii:=1 to kk do
for jj:=1 to mm do
begin write('Введите B[',ii,',',jj,'] --> '); readln(BB[ii,jj]);
end;
{Вычисляем элементы матрицы-результата}
for ii:=1 to nn do
for jj:=1 to mm do
begin
Summa:= 0;
for ll:= 1 to kk do
Summa:= Summa + AA[ii,ll]*BB[ll,jj];
CC[ii,jj] := Summa;
end;
{Выводим матрицу-результат: }
writeln('----Результат: -----');
for ii:=1 to nn do
begin
for jj:=1 to mm do
write(CC[ii,jj]:8:2);
writeln;
end;
readln;
end.
----Результат: ----
7 3 2 2 3 2 29 50
2 4 6 1 * 2 6 = 20 57
1 1 4 5 1 4 9 49
0 5
----------
После изучения подпрограмм и указателей можно будет сделать эту программу более универсальной и увеличить максимальный размер матриц.
Другие языки программирования и технологии
Нужно умножить матрицу A на матрицу B. A=(4 8) (3 9) (2 5) B=(11 22 16),(9 15 8) Нужно написать кодmпомогите! Паскаль
Похожие вопросы
- Как перевести эти числа буду благодарен:1)0,2122(3)-?(10) 2)3,1415(10)-?(8) 3) 0,2122(8)-?(2) 4)0,1100011(2)-?(10) (((
- Есть последовательность из восьми чисел: 7 4 2 8 3 1 6 5 Над этой последовательностью разрешено выполнять только о
- Программирование!!! Совсем не идет эта задача, нужно написать на паскале!!
- Помогите испрвить код Переписать первые элементы каждой строки матрицы a(n*m), больше некоторого числа C, в массив b .
- Напишите программу для С++, которая заменяет в символьной строке все буквы a на буквы b, буквы A на буквы B ...
- Нужно написать программы в Паскале! Массивы! Срочно! Помогите!
- Кто может кратко написать как перевести из 2-х счисления в 8-х, 16-х, 10-х. А также наоборот из 10-х,16-х,8-х в 2-х
- Нужно написать программу на паскале
- Написать в С++.В заданной матрице A[1:N,1:M] поменять местами следующие два элемента:
- Есть ли у матриц A и B одинаковые строки? помогите пожалуйста! очень надо! в VBA