PDA

Visualizza la versione completa : [c]Mettere in ordine alfabetico dei nomi presenti in un file


dukefg
31-01-2008, 13:21
Come da titolo vorrei sapere che strada utilizzereste voi per ordinare dei nomi (presenti in un file) in ordine alfabetico caricati in una struct(char cognome, char nome, int numero), è da ieri che ci penso ma le soluzioni che ho trovato si sono rivelate errate...... :cry:

oregon
31-01-2008, 13:23
Li carichi in memoria e li ordini con un algoritmo di ordinamento (puoi usare la funzione qsort ...)

dukefg
31-01-2008, 13:25
non esiste un metodo alternativo, utilizzando solamente dei cicli?

oregon
31-01-2008, 13:26
Praticamente in tutti gli algoritmi di ordinamento ci sono dei cicli ... cosa intendi?

dukefg
31-01-2008, 13:28
si hai ragione ho sbagliato a scrivere io, volevo sapere se era possibile realizzare la stessa cosa senza la funzione che ni hai indicato tu..

oregon
31-01-2008, 13:31
Se non usi quella funzione devi comunque scrivere il codice per l'ordinamento ... puoi usare il bubble sort o un altro metodo ... ma uno lo devi usare.

dukefg
31-01-2008, 13:33
Ok, avevo pensato anch'io ad una soluzione del genere ma ancora nn l'avevo applicata, ora ci provo e magari ti faccio sapere.....Grazie!! :)

oregon
31-01-2008, 13:34
Va bene ... dai un'occhiata a

http://it.wikipedia.org/wiki/Algoritmo_di_ordinamento

dukefg
31-01-2008, 14:21
ho provato ad utilizzare il metodo di "selection sort", che è l'unico che conosco meglio, solamente che io lo utilizzavo per ordinare un vettore contenente numeri e non riesco a riadattarlo per i char, ho provato ad abbozzare la funizione che mi dovrebbe ordinare i nomi(avrò combinato sicuramente un casino):


void ordina(struct elenco *A,int B,FILE *C)
{
int i,j,k,imin;
char V[10],temp[10];
fprintf(C,"Hanno superato l'esame:\n");
for(i=0;i<B;i++)
{
if(A[i].voto>15)
{
for(j=0;j<B-1;j++)
{
imin=j;
for(k=j+1;k<B;k++)
if(A[k].cognome<V[imin])
imin[j]=k;
temp[j]=A[j].cognome;
A[j].cognome=V[imin];
V[imin]=temp[j];
}


fprintf(C,"%s %s %d %d %d\n",A[i].cognome,A[i].nome,A[i].matricola,A[i].voto,A[i].posizione);


}
}
}

dukefg
31-01-2008, 15:16
Mi sapreste dire dove ho sbagliato e come posso risolvere il problema?

Loading