Ordinare le righe della matrice

di il
2 risposte

Ordinare le righe della matrice

Ciao ragazzi, sono sempre io e ho sempre problemi con queste funzioni ahaha perdonatemi
scrivere una funzione che riceva in input una matrice bidimensionale di numeri double e ne ordini le righe
in ordine crescente sulla base del valore del primo elemento di riga.


#include <iostream>
using namespace std;

void leggiM(double** M, const int righe, const int colonne)
{
    for (int i=0; i<righe;i++)
    for (int j=0; j<colonne;j++)
    {
        cout << "M[" << i << "][" << j << "] = ";
        cin >> M[i][j];
    }
}

void stampaM(double** M, const int righe, const int colonne)
{
    for (int i=0; i<righe;i++)
    {
        for (int j=0; j<colonne;j++)
        cout << M[i][j] << " ";
        cout << endl;
    }
}

void ordina(double** M, int righe)
{
    bool ordinato;
    do{
        ordinato=true;
        for (int i=0; i<righe-1;i++)
        if (M[i][0]>M[i+1][0])
        {
            double temp = M[i][0];
            M[i][0] = M[i+1][0];
            M[i+1][0] = temp;

            ordinato = false;
        }
       }while(ordinato==false);
return;
}

int main()
{
int righe;
int colonne;
double ** M = 0;
cout << "inserisci il numero di righe e di colonne: ";
cin >> righe >> colonne;

M = new(nothrow) double*[righe];
for (int i = 0; i<righe;i++)
M[i]= new(nothrow) double[colonne];

leggiM(M,righe,colonne);

cout << "la matrice è: " << endl;
stampaM(M,righe,colonne);

ordina(M,righe);
cout << "la matrice ordinata è: " << endl;
stampaM(M,righe,colonne);

return 0;
}
il mio problema è che quando vado a stampare mi ordina solo il primo elemento di riga e non tutta la riga..
inserisci il numero di righe e di colonne: 3
3
M[0][0] = 7.1
M[0][1] = 3.1
M[0][2] = 2.4
M[1][0] = 5.2
M[1][1] = 4.4
M[1][2] = 6.7
M[2][0] = 2.1
M[2][1] = 9.1
M[2][2] = 3.8
la matrice è: 
7.1 3.1 2.4 
5.2 4.4 6.7 
2.1 9.1 3.8 
la matrice ordinata è: 
2.1 3.1 2.4 
5.2 4.4 6.7 
7.1 9.1 3.8 

2 Risposte

  • Re: Ordinare le righe della matrice

    Devi usare un for per le colonne
    
    void ordina(double** M, int righe, int colonne)
    {
        bool ordinato;
        do{
            ordinato=true;
            for (int i=0; i<righe-1;i++)
            if (M[i][0]>M[i+1][0])
            {
                for (int j=0; j<colonne; j++){
                    double temp = M[i][j];
                    M[i][j] = M[i+1][j];
                    M[i+1][j] = temp;
                }
    
                ordinato = false;
            }
           }while(ordinato==false);
    }
    
  • Re: Ordinare le righe della matrice

    Ci avevo provato ma mettevo il ciclo nel posto sbagliato.. grazie mille!
Devi accedere o registrarti per scrivere nel forum
2 risposte