Produkt zweier Matrizen in PASCAL

Ein Beispiel für die Verwendung von zweidimensionalen Arrays


(*$B-*)
PROGRAM Matrizenmultiplikation;
CONST max = 10;
TYPE MATRIX = ARRAY[1..max,1..max] OF INTEGER;
VAR  n,m,p,i,j,k,s : INTEGER;
     A,B,C	   : MATRIX;

BEGIN
   (* Eingabe *)
   WriteLn('A ist eine (n x m)-Matrix und');
   WriteLn('B eine (m x p)-Matrix.');
   WriteLn('Gib n, m und p ein:'); WriteLn;
   Write('n = '); ReadLn(n);
   Write('m = '); ReadLn(m);
   Write('p = '); ReadLn(p);
   WriteLn;
   WriteLn('Gib die Matrizen zeilenweise ein, die Elemente');
   WriteLn('jeder Zeile durch Leerzeichen getrennt'); WriteLn;
   WriteLn('Fuer j = 1, ... ,',m); WriteLn;
   FOR i := 1 TO n DO
   BEGIN
      Write('A[',i,'j] = ');
      FOR j := 1 TO m DO Read(A[i,j]);
      WriteLn
   END;
   WriteLn;
   WriteLn('Fuer j = 1, ... ,',p); WriteLn;
   FOR i := 1 TO m DO
   BEGIN
      Write('B[',i,'j] = ');
      FOR j := 1 TO p DO Read(B[i,j]);
   WriteLn
   END;
   WriteLn;

   (* Multiplikation *)
   FOR i := 1 TO n DO
      FOR j := 1 TO p DO
      BEGIN
	 s := 0;
	 FOR k := 1 TO m DO  s := s + A[i,k]*B[k,j];
	 C[i,j] := s
      END;

   (* Ausgabe *)
   WriteLn('A*B = '); WriteLn;
   FOR i := 1 TO n DO
   BEGIN
      FOR j := 1 TO p DO Write(C[i,j],'  ');
      WriteLn; WriteLn
   END
END.