Пример шестой.
Перемножение двух матриц.
Здесь все несложно, только следует иметь в виду, что переменная s,
используемая для вычисления каждого элемента матрицы произведения,
определена как integer (впрочем и сами матрицы тоже типа integer).
При этом когда происходит перемножение и сложение очень легко вылететь
за допустимый диапазон для integer: -32768..32767 и результат окажется
неверным. Поэтому будьте аккуратны. Здесь матрицы инициализируются
случайными числами до 5. При размерности 5 этого более чем достаточно,
чтобы не вылететь за допустимые границы.
const n=5; { размерность матриц }
type matr=array[1..n,1..n] of integer;
var i,j,k:byte;
s:integer;
a,b,c:matr;
procedure OutMatr(m:matr); { процедура вывода матрицы на экран }
var i,j:byte;
begin
write(' !');
for i:=1 to n do write (i:5);
writeln;
write(' !');
for i:=1 to n do write ('-----');
writeln;
for j:=1 to n do
begin
write (j:5,'!');
for i:=1 to n do write(m[i,j]:5);
writeln;
end;
end;
begin
{ инициализация матриц (случайными числами) }
randomize;
for i:=1 to n do
for j:=1 to n do
begin
a[i,j]:=random(5);
b[i,j]:=random(5);
end;
{ вывод исходных матриц }
writeln('a:');
OutMatr(a);
writeln('b:');
OutMatr(b);
{ вычисление произведения матриц }
for i:=1 to n do
for j:=1 to n do
begin
s:=0;
for k:=1 to n do
s:=s+a[k,i]*b[j,k];
c[i,j]:=s;
end;
{ вывод результата }
writeln('a*b:');
OutMatr(c);
end.
 
 
 
 
 
 
|