program MatrixMultiplication;
uses
SysUtils;
// Define a 2D dynamic array type (required by Free Pascal)
type
TIntMatrix = array of array of Integer;
// Multiply rows of A by columns of B.
procedure Print(arr2d: TIntMatrix);
var
i, j: Integer;
begin
for i := 0 to High(arr2d) do
begin
for j := 0 to High(arr2d[i]) do
Write(Format('%4d', [arr2d[i][j]]));
Writeln;
end;
end;
procedure multiple_matrix(a, b: TIntMatrix; var c: TIntMatrix);
var
i, j, k: Integer;
begin
for i := 0 to High(c) do
begin
for j := 0 to High(c[i]) do
begin
for k := 0 to High(a[i]) do
c[i][j] := c[i][j] + a[i][k] * b[k][j];
end;
end;
end;
var
a, b, c: TIntMatrix;
begin
SetLength(a, 3, 3);
SetLength(b, 3, 3);
SetLength(c, 3, 3);
a[0][0] := 1; a[0][1] := 8; a[0][2] := 5;
a[1][0] := 6; a[1][1] := 7; a[1][2] := 1;
a[2][0] := 8; a[2][1] := 7; a[2][2] := 6;
b[0][0] := 4; b[0][1] := 8; b[0][2] := 1;
b[1][0] := 6; b[1][1] := 5; b[1][2] := 3;
b[2][0] := 4; b[2][1] := 6; b[2][2] := 5;
// c[0, 0] = (a[0, 0] * b[0, 0]) + (a[0, 1] * b[1, 0]) + (a[0, 2] * b[2, 0])
Print(a);
Writeln;
Print(b);
Writeln;
multiple_matrix(a, b, c);
Print(c);
end.
(*
run:
1 8 5
6 7 1
8 7 6
4 8 1
6 5 3
4 6 5
72 78 50
70 89 32
98 135 59
*)