|
По первому тесту выполнил дважды задания. Результат получается правильный (проверял калькулятором). Пишет, что "Задание не проверено" и предлагает повторить. |
Обработка матриц в Паскале
и
.Напомним некоторые сведения из курса математики. Умножать можно только матрицы, у которых количество столбцов в первой матрице совпадает с количеством строк во второй матрице. Матрица-произведение имеет столько строк, сколько было в первой матрице и столько столбцов, сколько было во второй. Таким образом, при умножении матрицы A(N,M) на матрицу B(M,L) получается матрица C(N,L). Каждый элемент матрицы C[i,j] является скалярным произведением i-й строки матрицы A и j-го столбца матрицы B. В общем виде формула для нахождения элемента
матрицы имеет вид:
![]() |
( 6.1) |
где
и
.
Рассмотрим более подробно формирование матрицы C(3,2) как произведения матриц A(3,3) и B(3,2).

Следует помнить, что
.
Блок-схема, реализующая умножение каждого элемента матрицы C по формуле (6.1), приведена на рис. 6.29.
Ниже приведён текст программы умножения двух матриц с комментариями.
type
matrica=array [ 1.. 15, 1.. 15 ] of real;
var
a, b, c : matrica;
i, j,M,N, L, k : byte;
begin
//Ввод размеров матриц.
writeln ( ’введите n,m и l ’ );
readln (N, M, L );
//Ввод матрицы A.
writeln ( ’Матрица A ’ );
for i :=1 to N do
for j :=1 to M do
read ( a [ i, j ] );
//Ввод матрицы B.
writeln ( ’Матрица B ’ );
for i :=1 to M do
for j :=1 to L do
read ( b [ i, j ] );
//Формирование матрицы C.
for i :=1 to N do
for j :=1 to L do
begin
{В C[i,j] будет храниться результат скалярного}
{умножения i-й строки на j-й столбец.}
c [ i, j ] : = 0;
for k:=1 to M do
c [ i, j ] : = c [ i, j ]+a [ i, k ] * b [ k, j ];
end;
//Вывод матрицы C=AB.
writeln ( ’матрица C=A*B ’ );
for i :=1 to N do
begin
for j :=1 to L do
write ( c [ i, j ] : 7 : 3, ’ ’ );
writeln;
end;
end.
Результат работы представлен на рис. 6.30.


