Ordinare righe matrice in base alla media

di il
5 risposte

Ordinare righe matrice in base alla media


/* scrivere una funzione c++ che riceva in input una matrice bid double e ne ordini le righe in ordine
crescente sulla base del valore della media degli elementi pari. ad esempio, data la matrice 3x3:

    |7.1 3.0 2.4|        |4.75|
M = |5.2 4.4 6.7|     a =|5.95|
    |2.0 9.1 3.8|        |2.9 |

    dove a contiene le medie degli elementi pari delle righe, la funzione deve trasformarla in:
    |2.0 9.1 3.8|        |2.9 |
M = |7.1 3.0 2.4|     a =|4.75|
    |5.2 4.4 6.7|        |5.95|     */
    
#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,int colonne)
{
double * a = new(nothrow) double[righe]; //array media

for(int i=0; i<righe;i+2)
{
    for(int j=0; j<colonne;j++)
    a[i]=(a[i]+M[i][j])/2;
}


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

        for (int j=0; j<colonne;j++)
        {
            double temp2=M[i][j];
            M[i][j]=M[i+1][j];
            M[i+1][j]=temp2;
        }
        ordinato=false;
    }
} while (ordinato==false);
delete[] a;
}

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,colonne);
cout << "la matrice ordinata è: " << endl;
stampaM(M,righe,colonne);

return 0;
}  
da quello che dice la traccia dovrei trovare la media degli elementi che sono negli indici pari.. ma quando vado ad eseguire il programma si ferma alla lettura degli elementi della matrice.. cosa sto sbagliando?

MODIFICA: avevo caricato male il codice e l'ho modificato

5 Risposte

Devi accedere o registrarti per scrivere nel forum
5 risposte