Oppure

Loading
23/04/08 18:42
giocala88
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[i], 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!!!!





















aaa
23/04/08 20:06
FHF93
cos'è esattamente che non va? senza che guardi e testi tutto il codice ...
aaa
24/04/08 9:18
giocala88
Allora ti spiego:

nn mi ordina i cognomi in ordine alfabetico...
poi dopo aver fatto questo bisognerebbe ke i cognomi uguali li ordinerebbe per matricole...???
mi sn spiegato????...FAMMI SAPERE..grazie x l'interessamento!
aaa