Ragazzi,mi serve un aiutino con una funzione che dovrebbe ordinare una matrice in ordine decrescente rispetto alla somma delle righe.Il codice che ho provato è questo:
void MaxSommaRighe(int Matrice[][Max_colonne],int n_riga,int n_colonna)
{
while(){
for(int i=0;i<n_riga;i++)
{
if(Sommarighe[i]<Sommarighe[i+1])
{
for(int j=0;j<n_colonna;j++)
{ int tmp;
tmp=Matrice[i][j];
Matrice[i][j]=Matrice[i+1][j];
Matrice[i+1][j]=tmp;
}
}
}
}
}
Tralasciate un attimo il while senza condizione.
Inizialmente avevo provato con i due soli cicli for e ovviamente non ha funzionato,visto che in questo modo c'è un confronto solo tra righe adiacenti e non avrei quindi modo di sapere se due righe scambiate in precedenza siano nell'ordine giusto.Per questo avevo pensato ad un ciclo while che racchiudesse i due for,che quindi ripetesse le istruzioni finchè la matrice non fosse realmente in ordine.Tuttavia sorgono due problemi:
1° non sono riuscito a pensare ad una condizione di uscita per il while...avevo pensato che visto che se la matrice è ordinata l'if non è mai verificato,potrei mettere un else che prevede l'aumento di una variabile contatore e porre come condizione di uscita l'uguaglianza di tale variabile con il numero di righe - 1(azzerandola ogni volta che si entrava nel while);tuttavia l'idea(oltre ad essere un tantino artificiosa..xD) non funziona...
2°Volendo verificare se il ragionamento di fondo fosse esatto ho voluto provare ad usare un terzo ciclo for che ripetesse una sola volta le istruzioni,poichè nel mio caso sarebbe bastata una sola iterazione,eppure la matrice non si è ordinata...:S
(per farvi capire,avevo una matrice del tipo:
1 2 3 4
5 6 7 8
9 10 11 12
Dopo i due for diventa ==>
5 6 7 8
9 10 11 12
1 2 3 4
Quindi la prima riga è riuscita ad arrivare al posto giusto,ma non potendo confrontare la seconda con la prima non è possibile ordinarla nel modo corretto con solo due cicli(almeno credo..xD).Però sarebbe dovuto bastare una semplice ripetezione del codice per arrivare al risultato voluto...perchè rimane invariata??:S
Ah quasi dimenticavo..xD,Sommarighe era stata calcolata in precedenza e sono sicuro della sua correttezza.