Dynamische Matrix in C



  • Hallo zusammen,

    ich komme einfach nicht dahinter, wie ich folgendes Problem loesen kann:
    Ich benoetige eine dynamisches 2-dimensionales Feld dessen Groesse im Programm per Benutzereingabe definiert wird. Spaeter ergibt sich die Groesse der Matrix aus der Genauigkeitsanforderung zweier Iterationsschritte, so dass ich im voraus nicht sagen kann, welche Dimension notwendig ist, um das Problem (kritische Last eines Stabes) ausreichend genau zu loesen.

    Ich muesste sicherlich noch eine Menge erklaeren...

    um eure Geduld nicht ueberzustrapazieren, schaut euch doch bitte mal den nachstehenden Quellcode an. Es muss doch moeglich sein, nach Eingabe der Zeilen und Spalten das Array in der Funktion "lies_matrix" dynamisch zu generieren.

    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>

    struct MATRIX {
    int anzZe; //Anzahl der Zeilen
    int anzSp; //Anzahl der Spalten
    double vorFak; //ausmult. Vorfaktor
    double **mat; //Muss man hier Zeiger auf Zeiger definieren ?????
    char info[81] ; //Kurzinfo zur Matrix
    };

    /******************************************************************
    * Funktionsname : lies_matrix(...)
    * Funktion : Liest die notwendigen Daten einer Matrix ein.
    *****************************************************************/
    void lies_matrix(struct MATRIX *A) {
    int iZ; //Anzahl der Zeilen
    int iS; //Anzahl der Spalten
    int i;
    int j;

    printf("\nAnzahl der Zeilen :", iZ);
    scanf("%d",&iZ);

    printf("\nAnzahl der Spalten:", iS);
    scanf("%d",&iS);

    A->mat = (double**) malloc (iZ * sizeof(double*)); //FEHLER !
    //Wie zum Teufel muss
    //dieser Ausruck
    //aussehen????
    if (A->mat == NULL) {
    /* Fehler! */
    printf("\nFehler!!!);
    }

    for (i = 0 ; i < iZ ; i++){
    A->mat[i] = (double*) malloc (iS * sizeof(double));
    if (A->mat[i] == NULL) { /* Fehler! */ }
    }

    for (i = 0; i < iZ; i++) {
    for (j = 0; j < iS; j++) {
    printf("\nA[%d][%d]->",i,j);
    scanf("%lf",A->mat[i][j]); //ich moechte unbedingt per
    //Array[Zeilenindex][Spaltenindex]
    //auf das Feld zugreifen!
    }
    }
    getch();
    }

    /****************************************************************
    * Funktionsname : main(...)
    * Funktion : Testen der neuen MATRIX-Funktionen
    *****************************************************************/
    int main(void) {
    struct MATRIX A;

    //Matrix einlesen
    lies_matrix(&A);

    return 0;
    getch();
    }

    PS.: Z.Zt. "umgehe" ich das Problem der 2D-Matrix, indem ich ein eindimensionales Array erstelle "double *mat = (double 😉 mat malloc(iZ * iS * sizeof (double);".

    Fuer mein kleines Programm - ich will uebrigens die kritische Knicklast eines Stabes berechnen - benoetige ich weitere Zugriffe auf die Matrix, so dass der Zugriff auf das eindimensionale Array mit mat[j + i * iS] zu umstaendlich ist.

    Vielen Dank, Christian



  • in einem anderen Beitrag wird das C-Tutorial www.pronix.de erwaehnt.

    Hier habe ich eine Loesung gefunden.


Anmelden zum Antworten