Hilfe!!!



  • Das Studium hat gerade für mich angefangen und als Nebenfach habe ich Info. Wir arbeiten mit C++ und haben jetzt die Aufgabe mit Dynamischen Speicher eine Matrix zu erzeugen. Ich verstehe das mit dem Dynamischen speicher aber noch nicht so wirklich.

    double *matrix;
    matrix = new double
    [zeilen];
    matrix[0] = new double[zeilen * spalten];
    for (i = 1; i < zeilen; i++) matrix[i] = matrix[i-1] + spalten;

    Das haben wir als Erklärung zum erstellen bekommen. Es wäre gut wenn mir das mal jemand Zeile für Zeile erklären könnte.

    Danke schon mal im Voraus



  • Die Frage ist, wieso ihr das so machen sollt, wenn ihr angeblich C++ lernt 😮



  • hardware schrieb:

    Die Frage ist, wieso ihr das so machen sollt, wenn ihr angeblich C++ lernt 😮

    Ich hab keine Ahnung was du damit meinest. Ist das so falsch oder was. Ich verstehe eben nichts davon



  • hallo edge

    tut mir leid dir das sagen zu müssne aber das ist nicht c++ sondern c mit new (und mit cout wahrscheinlich), mehr aber nicht. in c++ kennt man datencontainer und so sollte man das hier auch lösen:

    std::vector<std::vector<double> > matrix(spalten, std::vector<double>(zeilen));
    


  • edge schrieb:

    Das haben wir als Erklärung zum erstellen bekommen. Es wäre gut wenn mir das mal jemand Zeile für Zeile erklären könnte.

    Es wäre besser, du würdest konkrete Fragen stellen.

    BTW, das ist natürlich C++, lass dir nichts einreden.



  • Ich lege mal fest zeiger ist 4, spalten ist 2 - damit ist es einfacher

    edge schrieb:

    double **matrix; 
    matrix = new double*[zeilen]; // matrix ist ein Zeiger auf ein Array von 4 double*
    matrix[0] = new double[zeilen * spalten]; // matrix[0] ist ein Zeiger auf 4 * 2 doubles
    for (i = 1; i < zeilen; i++)
      matrix[i] = matrix[i-1] + spalten; // jedes weitere element ist ein Zeiger der 2 Felder weiter zeigt, als der vorherige Zeiger
    
    zeilen  = 4
    spalten = 2
    
    matrix
    +-------+-------+-------+-------+
    |double*|double*|double*|double*|
    +-------+-------+-------+-------+
       |       |       |       |
    +--+  +----+       |       |
    |   +-+ +----------+       |
    |   |   |   +--------------+
    v   v   v   v
    +-+-+-+-+-+-+-+-+
    |0|1|2|3|4|5|6|7|  (4 * 2 doubles)
    +-+-+-+-+-+-+-+-+
    

    Uebrigens fehlt noch die Freigabe in dem Beispiel

    delete[] matrix[0];
    delete[] matrix;
    


  • Bashar schrieb:

    ...
    BTW, das ist natürlich C++, lass dir nichts einreden.

    👍


  • Mod

    theta schrieb:

    Bashar schrieb:

    ...
    BTW, das ist natürlich C++, lass dir nichts einreden.

    👍

    Dies ist auch ein Auto.



  • SeppJ schrieb:

    theta schrieb:

    Bashar schrieb:

    ...
    BTW, das ist natürlich C++, lass dir nichts einreden.

    👍

    Dies ist auch ein Auto.

    hahaha 😃



  • SeppJ schrieb:

    Dies ist auch ein Auto.

    Beinhaltet die Definition 'Auto' nicht auch 'potenziell mit eigenem Antrieb fahrend'? 😃

    Aber back to topic:

    asdas schrieb:

    tut mir leid dir das sagen zu müssne aber das ist nicht c++ sondern c mit new (und mit cout wahrscheinlich), mehr aber nicht. in c++ kennt man datencontainer und so sollte man das hier auch lösen:

    std::vector<std::vector<double> > matrix(spalten, std::vector<double>(zeilen));
    

    mMn ist es für C++Anfänger schon wichtig die Grundlagen des dynamischen Speichermanagements und der C/C++ Zeigerarithmetik zu verstehen.

    Natürlich kann man Auto fahren ohne zu wissen wie ein Otto-Motor funktioniert, aber man sollte schon wissen dass er Benzien verbraucht. Sonst wundert man sich irgendwann dass das blöde Ding nicht mehr fährt 😃

    - osdt


Anmelden zum Antworten