Scritta così
hai il risultato che ti attendi ...codice:int aux,z; for(z=0;z<r;z++) for(i=0;i<r;i++) { for(j=0;j<c-1;j++) { if(matr[i][j]>matr[i][j+1]) { aux=matr[i][j]; matr[i][j]=matr[i][j+1]; matr[i][j+1]=aux; } } }
Scritta così
hai il risultato che ti attendi ...codice:int aux,z; for(z=0;z<r;z++) for(i=0;i<r;i++) { for(j=0;j<c-1;j++) { if(matr[i][j]>matr[i][j+1]) { aux=matr[i][j]; matr[i][j]=matr[i][j+1]; matr[i][j+1]=aux; } } }
No MP tecnici (non rispondo nemmeno!), usa il forum.
Grazie tante ! Perchè metti j<c-1? e non j<c (come faccio io sbagliando ovviamente)
Perché con l'indice j tu accedi all'elemento j+1 durante il confronto e lo scambio.
Se usassi c invece di c-1 tu accederesti ad un elemento dell'array che non esiste.
No MP tecnici (non rispondo nemmeno!), usa il forum.
Per caso serve per non fare confrontare l'ultimo elemento x esempio della prima riga con il primo elemento della seconda riga??
A ecco grazie mille per la risposta e per l'aiuto che mi hai dato![]()
![]()
Un altra cosa la matrice che ho dichiarato in gestione posso passarla a qualche altra sotto funzione tramite puntatori?
perchè se io dichiaro la funzione
void inserimento(int, int, int *);
...
...
la metto in gestione dopo avere dichiarato la matrice
void gestione()
{
...
...
int matr[r][c];
inserimento(r, c, matr);
...
...
..
}
e faccio così:
void inserimento(int r, int c, int *matr)
{
...
...
...
}
MI da i seguenti errori:
In function `gestione_matr':
[Warning] passing arg 3 of `inserimento' from incompatible pointer type
In function `inserimento':
subscripted value is neither array nor pointer
[Build Error] [main.o] Error 1
Quindi penso che non si può passare o meglio non la so passare tramite puntatori...
Allora ... nel caso di valori costanti per RMAX e CMAX, scrivi
altrimenti alloca dinamicamente la matrice utilizzando un "doppio puntatore"codice:#define RMAX 3 #define CMAX 3 void inserimento(int r, int c, int matr[][CMAX]) { ... } int main() { int matr[RMAX][CMAX]; ... inserimento(r, c, matr); ... }
int **matr;
ma forse adesso non lo sai fare.
Per usare il puntatore, dovresti chiamare la inserimento così
inserimento(r, c, &matr[0][0]);
ma avresti problemi all'interno della funzione nell'accedere al singolo elemento in quanto avresti solamente il puntatore all'inizio della matrice. Dovresti sommare il puntatore e sommare le "coordinate" x e y in modo corretto ... non è affatto comodo.
No MP tecnici (non rispondo nemmeno!), usa il forum.
Memorizza tutte le righe della matrice su un unico array, poi per accedere all' elemento di riga i-esima e colonna j-esima usi l' indice [i*N+j].
Ok grazie a quanto ho capito non è una cosa semplice lascio tutto per com'è.![]()