How to implement matrix multiplication in Pascal

1 Answer

0 votes
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

*)

 



answered 2 days ago by avibootz
...