Problema con ordinamento
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;
}
}
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
Un consiglio, quando scrivi del codice, inseriscilo tra i tag appositi, ad esempio:
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!
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!
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!!!!
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!!!!
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!!!!
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!!!
Tieni presente che strcmp è case sensitive... cioé è diverso se ci sono maiuscole e minuscole come prima lettera...
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
"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...
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 !!!!