Всем привет.

Сейчас я хочу рассказать вам как можно перемножить две матрицы.
[Введение]
Здесь все несложно, только следует иметь в виду, что переменная s, используемая для вычисления каждого элемента матрицы произведения, определена как integer (впрочем и сами матрицы тоже типа integer). При этом когда происходит перемножение и сложение очень легко вылететь за допустимый диапазон для integer: -32768..32767 и результат окажется неверным. Поэтому будьте аккуратны. Здесь матрицы инициализируются случайными числами до 5. При размерности 5 этого более чем достаточно, чтобы не вылететь за допустимые границы.

Начнем написание программы.

Начинать надо с размерности матрицы. В нашем случаем
Код:
const n=5;
Конечно же нам нужна процедура, которая будет выводить матрицы на экран.
Код:
procedure OutMatr(m:matr);

После описания процедуры вывода понятно, что надо произвести инициализацию матриц. Я буду рассмтаривать инициализацию случайными числами.
Код:
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.
Все описано кратко, понятно. И вот для удобства исходный код.
Код:
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.