C++ Matrix: Größtes Element mit Element in Hauptdiagonale tauschen



  • Hi,
    Hab ein kleines Problem mit einer Funktion in meinem Programm.
    Die Funktion ist folgende:

    void MatrixElTauschen(int c[0][D]){
    int h, jMax;
    for(int i=0; i<D; i++){
        jMax = 1;
        for (int j=0; j<D; j++){
    
            if (c[i][j]>c[i][0]){
                h=c[i][j];
                c[i][j]=c[i][0];
                c[i][0]=h;
                }
            cout<<c[i][j]<<setw(4);
        }
    cout<<"\n";
    }
    }
    

    Wenn ich den Spaß mit dem Tauschen weglasse, gibt er die Matrix normal aus. Beim übergeben sollte also nichts falsch laufen.
    Nehm ich das Tauschen aber rein, wird mir totaler Mist ausgegeben. Bei 3 Zeilen wird gar nichts getauscht und bei 2 Zeilen wird irgendwie das größte Element mit dem vorherigen überschrieben.



  • Update: Falscher Code! Hier der eigentliche:

    void MatrixElTauschen(int c[0][D]){
    int h, jMax;
    for(int i=0; i<D; i++){
        jMax = 1;
        for (int j=0; j<D; j++){
    
            if (c[i][j]>c[i][jMax]){
                jMax=j    
                h=c[i][jMax];
                c[i][jMax]=c[i][i];
                c[i][i]=h;
                }
            cout<<c[i][j]<<setw(4);
        }
    cout<<"\n";
    }
    }
    

  • Mod

    Solltest du nicht zuerst das größte Element suchen? Derzeit tauscht du bereits bei der Suche wild hin und her. Daher findest du weder das größte Element und bringst zudem deine Matrix durcheinander.

    Wieso geht jMax bei 1 los? Was ist, wenn D=1?



  • So hats funktioniert. Danke

    void MatrixElTauschen(int c[0][D]){
    int h, jMax;
    for(int i=0; i<D; i++){
            jMax=0;
        for (int j=0; j<D; j++){
            if (c[i][j]>c[i][jMax]){
                jMax=j;}
    
        }   h=c[i][i];
            c[i][i]=c[i][jMax];
            c[i][jMax]=h;
    }
    
    for(int i=0; i <D ;i++){
        for (int j=0; j<D;j++){
    
            cout<<c[i][j]<<setw(4);
    }
    cout<<"\n";
    }
    }
    

Anmelden zum Antworten