C++ Anfänger braucht hilfe bei Schleifen



  • Hallo und guten Abend!Ich bin ein absoluter Neuling.

    folgende Aufgabe habe ich zu bewältigen. Es soll eine Matrix transponiert werden.
    Dafür schreibe ich in meiner Header-Datei eine Funktion

    Matrix<Real> trp(const Matrix<Real>& A){
    
         Int m = A.m(); // Zeilen der Matrix  - k // Subfunktionen
         Int n = A.n(); // Spalten der Matrix  - j  // Subfunktionen
         Matrix<Real> B(m,n);
         B=A;
    
         //Int a=1;
    
         if(m!=n){
             cout << " Matrix not qaudratic";
    
         }else{
    
          for(Int k=0; k<m ;k++)
             {
               for(Int j=0; j<n ;j++)
                 {
                     swap(B(j,k),B(k,j));
    
                 }
    
           }
    
        }
         return B;    
     }
    

    Leider funktioniert die Funktion nicht. Kann mir jemand weiterhelfen?

    Vielen Dank!



  • „Funktioniert nicht“ ist keine Fehlerbeschreibung.

    Warum steht die Funktion im Header? Ohne inline?

    Was soll Int sein? C++ kennt int. Den gezeigten Code hast du wohl nicht übersetzt.



  • Hallo manni66,

    Deine Annahme, den Code nicht übersetzt zu haben ist leider nicht richtig.

    Bei Int handelt es sich um eine klasse. Ich kenne die Deklaration int auch. Aber in diesem Programm wird nochmals mit einer gesonderten klasse gearbeitet.

    Mein Problem liegt in der Ergebnissmatrix
    Es wird die äußere schliefe nicht. Bis zum Schluss ausgeführt.

    Irgendwie liegt ein Fehler im return

    Danke für deine Hilfe



  • JaCkXs schrieb:

    Mein Problem liegt in der Ergebnissmatrix
    Es wird die äußere schliefe nicht. Bis zum Schluss ausgeführt.

    Irgendwie liegt ein Fehler im return

    Was jetzt? Schleife wird nicht durchlaufen oder Fehler im return?

    Insgesamt sagt das nicht wirklich mehr als „funktioniert nicht“.

    Int als Klasse? Das hört sich ziemlich schräg an.



  • Du vertauschst alles zweimal. Die innere Schleife sollte j < k als Bedingung haben.

    Davon abgesehen ist der Algorithmus nicht besonders schlau. Erst eine Kopie machen und dann rumtauschen, warum nicht gleich vertauscht zuweisen? Das würde auch das Problem mit dieser unsinnigen Limitierung auf quadratische Matrizen lösen.



  • Vielen Dank für die Information! Das war die Lösung!
    Danke auch für den Hinweis mit der Kopie ich werde das noch ändern.

    Es klappt jetzt!

    🙂


Anmelden zum Antworten