PDA

Visualizza la versione completa : ordinare matrici linguaggio c


c_nicola
02-01-2009, 15:17
Salve sto provando a scrivere un programma ke mi permetta di ordinare in ordine crescente una matrice. Vi faccio un esempio:
ho la matrice 5 2 3
4 8 9
1 10 6



e devo ottenere 1 2 3
4 5 6
8 9 10

Uso il linguaggio c con qualche istruzione del c++(cin cout)
Questo è ciò che ho scritto fino ad ora per la funzione ordina


void ordina(int m[100][100], int c,int r)
{int v[100000],i,j,temp;
for(i=0;i<r;i++)
{for(j=0;j<c;j++)
v[j]=m[i][j];

cout<<v[i]<<"\t";

}


}

In pratica sto cercando di copiare tutti gli elementi della matrice in un vettore per poi ordinarlo con il metodo bubble sort...aspetto un vostro aiuto grazie

Xaratroom
02-01-2009, 15:44
Quello che chiedi non ha senso ...
In ogni caso la matrice può essere vista come un vettore.
Quindi:


int matrice[DIM_MAX][DIM_MAX];
int i, j, temp;
int *ptr;

for (i = 0; i < DIM_MAX; i++)
for (j = 0; j < DIM_MAX; j++)
{
printf ("Inserire l'elemento %d - %d: ", i, j);
scanf ("%d%*c", &(matrice[i][j]));
}

ptr = & (matrice[0][0]);

for (i = 0; i < DIM_MAX*3; i++)
for (j = i+1; j < DIM_MAX*3; j++)
if (ptr[i] > ptr[j])
{
temp = ptr[i];
ptr[i] = ptr[j];
ptr[j] = temp;
}

for (i = 0; i < DIM_MAX; i++)
{
for (j = 0; j < DIM_MAX; j++)
printf ("%d ", matrice[i][j]);
printf ("\n");
}

Provare per credere

c_nicola
02-01-2009, 15:50
e se invece vorrei ordinare secondo il valore delle colonne?
esempio:
2 1 3
8 9 10
4 5 6
diventa:
1 2 3
9 8 10
5 4 6
come faccio? Premetto che ho gia scritto la procedura leggi_mat che legge gli elementi della matrice da tastiera...e preferisco usare cin e cout...grazie!!!

oregon
02-01-2009, 22:09
Originariamente inviato da c_nicola
e se invece volessi ordinare secondo il valore delle colonne?


Se ho capito dall'esempio che hai mostrato, devi ordinare ogni riga.

Quindi, prendi tutti gli elementi di ogni riga e li ordini come se fossero tanti vettori distinti ...

Prova ...

sotoli
03-01-2009, 00:46
Originariamente inviato da Xaratroom
Quello che chiedi non ha senso ...
In ogni caso la matrice può essere vista come un vettore.
Quindi:


int matrice[DIM_MAX][DIM_MAX];
int i, j, temp;
int *ptr;

for (i = 0; i < DIM_MAX; i++)
for (j = 0; j < DIM_MAX; j++)
{
printf ("Inserire l'elemento %d - %d: ", i, j);
scanf ("%d%*c", &(matrice[i][j]));
}

ptr = & (matrice[0][0]);

for (i = 0; i < DIM_MAX*3; i++)
for (j = i+1; j < DIM_MAX*3; j++)
if (ptr[i] > ptr[j])
{
temp = ptr[i];
ptr[i] = ptr[j];
ptr[j] = temp;
}

for (i = 0; i < DIM_MAX; i++)
{
for (j = 0; j < DIM_MAX; j++)
printf ("%d ", matrice[i][j]);
printf ("\n");
}

Provare per credere

Attenzione...se DIM_MAX è diverso da 3, questa parte di codice non va più bene:


for (i = 0; i < DIM_MAX*3; i++)
for (j = i+1; j < DIM_MAX*3; j++)


Forse volevi dire:


for (i = 0; i < DIM_MAX*DIM_MAX; i++)
for (j = i+1; j < DIM_MAX*DIM_MAX; j++)

Xaratroom
03-01-2009, 00:51
Originariamente inviato da sotoli
Forse volevi dire:


for (i = 0; i < DIM_MAX*DIM_MAX; i++)
for (j = i+1; j < DIM_MAX*DIM_MAX; j++)

si

Loading