Matrixmultiplikation
Programm zur Multiplikation einer (m x n) Matrix mit einer (n x l) Matrix.
program MatrixMult(input, output);
{Multiplikation zweier Matrizen}
uses
stdfile;
const
MaxArray = 32;
var
m, n, l: integer;
i, j, k: integer;
sum: double;
a, b, c: array[1..MaxArray, 1..MaxArray] of double;
procedure init;
var
fName: string;
f: text;
t: double;
i: integer;
begin {init}
writeln('Multiplikation zweier Matrizen');
writeln;
writeln('In welcher Datei stehen die Matrizen? (In mmult.dat liegt ein Beispiel.)');
readln(fName);
if StdOpen(f, fName) then begin
if not StdRead(f, t) then begin
writeln('Kann erste Dimension nicht lesen.');
halt
end; {if}
if t > MaxArray then begin
writeln('1. Dimension zu gross.');
halt
end; {if}
m := round(t);
if not StdRead(f, t) then begin
writeln('Kann zweite Dimension nicht lesen.');
halt
end; {if}
if t > MaxArray then begin
writeln('2. Dimension zu gross.');
halt
end; {if}
n := round(t);
if not StdRead(f, t) then begin
writeln('Kann dritte Dimension nicht lesen.');
halt
end; {if}
if t > MaxArray then begin
writeln('3. Dimension zu gross.');
halt
end; {if}
l := round(t);
for i := 1 to m do begin
if not StdReadn(f, n, @a[i, 1]) then begin
writeln('Fehler beim Lesen der ', i, '-ten Zeile von a.');
halt
end {if}
end; {for}
for i := 1 to n do begin
if not StdReadn(f, l, @b[i, 1]) then begin
writeln('Fehler beim Lesen der ', i, '-ten Zeile von b.');
halt
end {if}
end; {for}
close(f)
end else begin {if}
writeln('Kann Datei "', fName, '" nicht oeffnen.');
halt
end {if}
end; {init}
procedure result;
var
i, j: integer;
begin {result}
writeln('Multiplikation liefert folgende Matrix');
writeln;
for i := 1 to m do begin
for j := 1 to l do begin
write(c[i, j]:7:3, ' ')
end; {for}
writeln
end {for}
end; {result}
begin {MatrixMult}
init;
for i := 1 to m do begin
for j := 1 to l do begin
sum := 0;
for k := 1 to n do begin
sum := sum + a[i, k] * b[k, j]
end; {for}
c[i, j] := sum
end {for}
end; {for}
result
end. {MatrixMult}