Zurück Vor +Ebene Home Inhalt Index Hilfe

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}
Zurück Vor +Ebene Home Inhalt Index Hilfe

Copyright Verlag Harri Deutsch AG  Stöcker DeskTop Mathematik