PDA

Visualizza la versione completa : [C] Ordinamento struttura in base ad un campo


djremix
31-12-2012, 16:54
Salve a tutti.

Avendo un array di strutture in cui l'utente immette la matricola di uno studente, una materia ed il voto allo scritto e all'orale, devo, poi, ordinare tale struttura per matricola e stampare il tutto.

Come si fa a far l'ordinamento ? Avevo provato ad adattare l'algoritmo per l'ordinamento di un semplice vettore ma il problema è anche che la variabile "materia" è un array di caratteri .. quindi presumo bisognerebbe, con un ciclo for, scambiare carattere per carattere. E' corretto ? Ma non riesco ad avere precisamente in testa la posizione di quest'ultimo for.

Grazie mille per l'aiuto e ne approfitto per augurare un buon anno a tutti :)
A presto!

oregon
31-12-2012, 17:00
Come è fatta la struttura ?

djremix
01-01-2013, 16:46
Salve, grazie per aver risposto.
La struttura ha una vettore di caratteri e 1 int e 2 float. Per intenderci:



struct {
char materia[15];
int matricola;
float orale;
float scritto;
} alunno[30];


Saluti,

Scara95
01-01-2013, 19:54
Semplicemente quando fai il confronto confronti i numeri di matricola:



if(e1.matricola < e2.matricola)
//e1 è minore
else
//e2 è minore

djremix
01-01-2013, 22:55
Beh, fin qua era semplice .. è quello che c'è nell'if il difficile ..
Saluti.

Scara95
01-01-2013, 23:07
Scusa, sai come ordinare un array di interi?
Se lo sai fare ti basta cambiare la condizione nell'if, in sostanza aggiungere un .matricola alle 2 variabili che confronti in questo caso...
Non vedo dove stia il problema!

oregon
02-01-2013, 01:17
Originariamente inviato da djremix
Beh, fin qua era semplice .. è quello che c'è nell'if il difficile ..
Saluti.

Per l'elemento materia non ti devi preoccupare. Nel caso della struttura che hai mostrato puoi scambiare i due elementi così come per delle variabili semplici.

djremix
02-01-2013, 01:42
Ho buttato giù questo:



void ordinastruct(int ind, struct al struttura[]){

int i,j,k,t,min,a;
float a1, a2;
char app[15];

for(i=0; i<ind-1; i++){

min=struttura[i].matricola;

for(j=0; j<ind; j++){
if(struttura[i].matricola<struttura[j].matricola){
min=struttura[j].matricola;
a1=struttura[i].orale;
a2=struttura[i].scritto;

for(k=0; k<15; k++){
app[k]=struttura[i].materia[k];
}

struttura[i].orale=struttura[j].orale;
struttura[i].scritto=struttura[j].scritto;
for(k=0; k<15; k++){
struttura[i].materia[k]=struttura[j].materia[k];
}

struttura[j].orale=a1;
struttura[j].scritto=a2;
for(k=0; k<15; k++){
struttura[j].materia[k]=app[k];
}

a=struttura[i].matricola;
struttura[i].matricola=min;
struttura[j].matricola=a;
}
}
}
}
ma qualcosa non va ..

oregon
02-01-2013, 01:50
"Cosa" non va?

Ma perché tutto quel codice ?

Ti avevo detto di trattare i due elementi del vettore di strutture [i] e [j] come se fossero elementi di un vettore numerico ...

djremix
02-01-2013, 02:10
semplicemente non ordina . anzi .. mi risulta tutto vuoto. Aspetti un attimo,non ho capito cosa intende. cioè, io potrei fare a=struttura[j] e struttura[j]=struttura[i] ??
Grazie mille per l'aiuto :)

Loading