Content

Matrix initialisieren und ausgeben

In einem ersten Beispiel sollt ihr ein Programm schreiben, das eine \(6\times 8\) Matrix \(A\) initialisiert und dann \(A\), \(A^T\) und \(\text{diag}(A)\) (den Vektor der Diagonalelemente) ausgibt. Bei der Initialisierung sollen die Elemente zeilenweise durchnummiert werden mit \(1,2, \dots\).

Die Matrix \(A\) soll im Full-Storage-Format spaltenweise gespeichert werden.

Eine Aufgabenstellung in Pseudo-Code könnte so aussehen:

program initmatrix

    procedure initGeMatrix(A)
    input:  m x n  general matrix A
    result: matrix A is overwritten as specified
    begin
        for i=1,..,m
            for j=1,..n
                A(i,j) = (i-1)*n + j
            end
        end
    end

    procedure printGeMatrix(A)
    input:  m x n  general matrix A
    result: matrix A printed to stdout
    begin
        for i=1,..,m
            for j=1,..n
                print A(i,j)
            end
            print newline
        end
        print newline
    end

    data:  buffer for 6 x 8 general Matrix A

begin
    initGeMatrix(A)

    print "A = "
    printGeMatrix(A)

    print "A^T = "
    printGeMatrix(A^T)

    print "diag(A) = "
    printGeMatrix(diag(A))
end

Beachtet, dass im Pseudo-Code der Puffer für die \(6 \times 8\) Matrix \(A\) zwar global definiert wird, dass aber die Prozeduren die Matrix als Parameter erhalten und somit nicht fest mit der globalen Matrix verdrahtet sind.

Die Implementierung soll maximal einfach sein und noch keine Macros oder Include-Direktiven verwenden.

Damit erhalten wir folgendes Grundgerüst, bei dem nur noch die kommentierten Stellen mit eigenem Code zu ersetzen sind:

int
printf(const char *, ...);

void
initGeMatrix(int m, int n, double *A, int incRowA, int incColA)
{
    // ...
}

void
printGeMatrix(int m, int n, const double *A, int incRowA, int incColA)
{
    // ...
}


double A[6*8];

int
main()
{
    // initGeMatrix( ... );

    printf("A =\n");
    // printGeMatrix( ... );

    printf("A^T =\n");
    // printGeMatrix( ... );

    printf("diag(A) =\n");
    // printGeMatrix( ... );

    return 0;
}

Bei der Ausgabe eines Matrixelementes sollen vier Nachkommastellen ausgegeben werden. Verwendet zum Beispiel im Fomatstring %10.4lf als Platzhalter für einen double-Wert.