Una esercitazione dice cosė:
Sia dato un semplice database che rappresenta un elenco di studenti che hanno sostenuto un esame.
Il database č organizzato sotto forma di file di testo su 3 colonne contenenti informazioni relative a (Cognome, Matricola, Voto) come ad esempio:
Cognome Matricola Voto
Bianchi 212 21
Rossi 128 30
Verdi 54 22
Scrivere un programma ANSI C che acquisisce il database da file, ne effettua un ordinamento in base alla chiave primaria (Cognome) o alle chiavi secondarie (Matricola, Voto) sulla base della scelta dell'utente e produce in uscita il database ordinato. L'ordinamento sulle chiavi secondarie deve conservare l'ordine relativo prodotto dalla chiave primaria.
io ho provato a farlo ma nn va...
sapreste dirmi dv sta l'errore???
Ecco la mi aimplementazione:
/* Sia dato un semplice database che rappresenta un elenco di studenti che hanno sostenuto un esame.
Il database č organizzato sotto forma di file di testo su 3 colonne contenenti informazioni relative
a (Cognome, Matricola, Voto) come ad esempio:
Cognome Matricola Voto
Bianchi 212 21
Rossi 128 30
Verdi 54 22
Scrivere un programma ANSI C che acquisisce il database da file, ne effettua un ordinamento in base alla
chiave primaria (Cognome) o alle chiavi secondarie (Matricola, Voto) sulla base della scelta dell'utente
e produce in uscita il database ordinato. L'ordinamento sulle chiavi secondarie deve conservare l'ordine
relativo prodotto dalla chiave primaria. */
/*****************************/
/* inclusione delle librerie */
/*****************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/****************************/
/* 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], *p; /* input: struttura dati */
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, n);
for(p = d; p < d+3; ++p)
printf("\nArray ordinato: %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;
}
}
GRZIE A KI SAPRA' DARMI UNA MANO...Ciao a ttt!!!!
|