Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - help me!!!
Forum - C/C++ - help me!!!

Avatar
giocala88 (Normal User)
Expert


Messaggi: 248
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 20:42
Mercoledė, 23/04/2008
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!!!!






















PM Quote
Avatar
FHF93 (Ex-Member)
Pro


Messaggi: 132
Iscritto: 13/11/2007

Segnala al moderatore
Postato alle 22:06
Mercoledė, 23/04/2008
cos'č esattamente che non va? senza che guardi e testi tutto il codice ...

PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 248
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 11:18
Giovedė, 24/04/2008
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!

PM Quote