Problema con ordinamento

Sk_Anonymous
Ciao raga...volevo ordinare il mio database in ordine alfabetico, avendo aquisito da file dei cognomi delle matricole e dei voti...cm posso fare???
mi date un okkiata xfavore al mio algoritmo????...grazie mille-.......ciao

#include
#include
#include

/****************************/
/* definizione di struttura */
/****************************/

struct database {

char cognomi[20];

int matricole;

int voti;

};


/****************************************/
/* dichiarazione di funzione insertsort */
/****************************************/

void insertsort(int *,
int);


/***********************************/
/* definizione della funzione main */
/***********************************/

int main()
{
FILE *file_database; /* lavoro: puntatore al file di input */

struct database d[2];
struct database *p; /* input: struttura dati con
dichiarazione di un'array di struttura (d[2]) e
dichiarazione di un puntatore a struttura (*p) */


int matricola_1, /* output: matricole */
matricola_2,
matricola_3;

char cognome_1[20], /* output: cognomi */
cognome_2[20],
cognome_3[20];

int voto_1, /* output: voti */
voto_2,
voto_3;

int n = 3; /* input: numero degli elementi array inizializzati */




/* aprire i file */
file_database = fopen("database.txt", "r");


/* acquisire i 10 cognomi con rispettive matricole e voti */
fscanf(file_database, "\%s %d %d", cognome_1, &matricola_1, &voto_1);
fscanf(file_database, "\%s %d %d", cognome_2, &matricola_2, &voto_2);
fscanf(file_database, "\%s %d %d", cognome_3, &matricola_3, &voto_3);


/* assegnare ai campi delle strutture dichiarate i valori di fscanf */
strcpy(d[0].cognomi, cognome_1);
d[0].matricole = matricola_1;
d[0].voti = voto_1;

strcpy(d[1].cognomi, cognome_2);
d[1].matricole = matricola_2;
d[1].voti = voto_2;

strcpy(d[2].cognomi, cognome_3);
d[2].matricole = matricola_3;
d[2].voti = voto_3;

/*ciclo for per visualizzare gli elementi della struct */
for(p = d; p < d+3; ++p)
printf("\n%s %d %d\n", p->cognomi, p->matricole, p->voti);

/* invocazione di funzione: ordinamento per nome */
insertsort(d[0].cognomi, n);


printf("\nCognomi ordinati:\n");
for(p = d; p < d+2; ++p)
printf("\n%s %d %d\n", p->cognomi, p->matricole, p->voti);



return(0);

}

/* definizione di funzione: insertsort */
void insertsort(int a[],
int n)
{
int valore_acquisito,
i,
j;

for (i = 1;
(i < n);
i++)
{
for (valore_acquisito = a, j = i - 1;
((j >= 0) && (a[j] > valore_acquisito));
j--)
a[j + 1] = a[j];

if (j+ 1 != i)
a[j + 1] = valore_acquisito;
}
}

Risposte
enigmagame
Un consiglio, quando scrivi del codice, inseriscilo tra i tag appositi, ad esempio:
int main()
{
}

Cosi sarà molto più leggibile, altrimenti è un casino...
Passando al tuo problema, ora hai caricato in memoria la tua struttura dati, ed è qui che vuoi effettuare l'ordinamento?
Ciao!

Sk_Anonymous
si enigmagame..per cognomi dovrei effettuarlo qst ordinamento...ke mi consigli??????...fammi sapere...ciao..cm sempre gentilissimi....
inoltre c sarebbe ke se due o più cognomi hanno la stessa iniziale, dovrò ordinare i cognomi in questioni per matricole....cm mi consigliate d fare????ciao!!!!

Sk_Anonymous
Sergio cm sempre gentilissimo e ti ringrazio tanto ma o nn ho afferrto bene quello ke mi vuoi dire oppure semplicmente nn va cm mi hai consigliato...se puoi cerca di dare un'okkiatina...CIAO grzie ancora!!!!

Sk_Anonymous
Sergio scusami se kiedo troppo ma vorrei capire+a fondo se tu mi modificassi il mio codice...se proprio nn ti scoccia...grazie ancora e forse nn smetterò mai di farlo...sto imparando molto...CIAO!!!

vict85
Tieni presente che strcmp è case sensitive... cioé è diverso se ci sono maiuscole e minuscole come prima lettera...

Sk_Anonymous
Le prime lettere sono tutte maiuscole mentre le altre sn tutte minuscole..ma tu vict85 potresti dimmi qualcosa in ANSI C...sto sbattendo ma nn va niente...modifikando se necessario il mio codce...grazie mille...CIAO

vict85
"Sergio":
[quote="giocala88"]Sergio scusami se kiedo troppo ma vorrei capire+a fondo se tu mi modificassi il mio codice...se proprio nn ti scoccia...grazie ancora e forse nn smetterò mai di farlo...sto imparando molto...CIAO!!!


Perdonami, ma non ne ho proprio il tempo.
Comunque è semplice:
a) invece di "a=b", scrivi "strcpy(a, b)";
b) invece di "if (a < b)" scrivi "if (strcmp(a,b) < 0)" (o altra funzione come strncmp(), strcasecmp(), o strncasecmp()).[/quote]

strcasecmp(), o strncasecmp() non sono ANSI/ISO ma per il resto concordo...

Sk_Anonymous
scusami vict85 nn è il fatto ke nn ne ho voglia o ke voglio ttt pronto ma proprio nn va...o forse nn ci riesco...xcaso tu hai già provato???...fammi sapere!ok?..grazie mille...grazie !!!!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.