/* 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