Ciao a tutti.
Il programma viene eseguito digitando "nome_programma candidati.txt punteggi.txt" al prompt dei comandi.
candidati.txt contiene le seguenti linee:
punteggi.txt contiene le seguenti linee:codice:Marco 1 3 2 2 3 3 1 4 4 1 Nicola 1 3 4 2 4 3 2 3 1 2 Franco 1 4 2 3 1 2 1 2 3 4 Ciccio 3 4 2 3 2 1 1 1 3 4 Enzo 2 2 3 3 4 1 2 3 4 2
Il programma deve calcolare per ogni candidato il punteggio totale conseguito in funzione:codice:Domanda1 3 2 1 0 Domanda2 3 2 1 0 Domanda3 3 2 1 0 Domanda4 3 2 1 0 Domanda5 3 2 1 0 Domanda6 3 2 1 0 Domanda7 3 2 1 0 Domanda8 3 2 1 0 Domanda9 3 2 1 0 Domanda10 3 2 1 0
- delle risposte date ad ognuna delle dieci domande (risposte contenute nel primo file)
- del punteggio associato ad ognuna delle quattro risposte alle dieci domande (punteggio contenuto nel secondo file).
Infine deve venir visualizzato su schermo l'elenco dei candidati e il punteggio ottenuto, ordinato (l'elenco) dal candidato col punteggio maggiore a quello col punteggio minore.
Esempio di visualizzazione:
Di seguito il codice:codice:Marco 16 Nicola 14 Enzo 13 Ciccio 12 Franco 10
Compilando ed eseguendo il codice riportato, il programma non restituisce l'output voluto.codice:#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char nome[20]; int dom[10]; }struct_candidato; typedef struct { char nome[20]; int punti; }struct_risultato; int i, j, k; struct_risultato bubble_sort(struct_risultato risultato_funz[],int ncandidati_funz); main(int argc, char *argv[]) { struct_candidato candidato[100]; struct_risultato risultato[100]; struct_risultato risultato_ordinato[100]; FILE *in; int ndomande, ncandidati; int domanda_risp[10][4]; char nome[20]; int punteggio; int indice_risp; int totale; /*controllo del numero dei parametri*/ if(argc!=3) { printf("Numero di argomenti errato\n"); exit(0); } /*apertura file punteggi.txt e controllo*/ if((in=fopen(argv[2],"r"))==NULL) { printf("Errore apertura file %s\n",argv[2]); exit(2); } /*lettura e chiusura file punteggi.txt*/ ndomande=0; while(!feof(in)) { fscanf(in,"%s%d%d%d%d",nome,&domanda_risp[ndomande][0],&domanda_risp[ndomande][1],\ &domanda_risp[ndomande][2],&domanda_risp[ndomande][3]); ndomande++; } fclose(in); /*apertura file candidati.txt e controllo*/ if((in=fopen(argv[1],"r"))==NULL) { printf("Errore apertura file %s\n",argv[1]); exit(1); } /*lettura e chiusura file candidati.txt*/ ncandidati=0; while(!feof(in)) { fscanf(in,"%s%d%d%d%d%d%d%d%d%d%d",candidato[ncandidati].nome,&candidato[ncandidati].dom[0],\ &candidato[ncandidati].dom[1],&candidato[ncandidati].dom[2],&candidato[ncandidati].dom[3],\ &candidato[ncandidati].dom[4],&candidato[ncandidati].dom[5],&candidato[ncandidati].dom[6],\ &candidato[ncandidati].dom[7],&candidato[ncandidati].dom[8],&candidato[ncandidati].dom[9]); ncandidati++; } fclose(in); /*calcolo punteggio per ogni studente e creazione vettore di output*/ for(i=0;i<ncandidati;i++) { strcpy(risultato[i].nome,candidato[i].nome); totale=0; for(j=0;j<10;j++) { indice_risp=candidato[i].dom[j]; totale=totale+domanda_risp[j][(indice_risp-1)]; risultato[i].punti=totale; } } risultato_ordinato[100]=bubble_sort(risultato, ncandidati); /*visualizzazione vettore ordinato*/ for(i=0;i<ncandidati;i++) { printf("\n%s %d\n",risultato_ordinato[i].nome,risultato_ordinato[i].punti); } } /*ordinamento vettore di output*/ struct_risultato bubble_sort(struct_risultato risultato_funz[], int ncandidati_funz) { char nome_provv[20]; int totale_provv; int ordinato_funz; ordinato_funz=0; while(ordinato_funz=0) { ordinato_funz=1; for(i=0;i<ncandidati_funz;i++) { if(risultato_funz[i].punti>risultato_funz[i+1].punti) { totale_provv=risultato_funz[i].punti; strcpy(nome_provv,risultato_funz[i].nome); risultato_funz[i].punti=risultato_funz[i+1].punti; strcpy(risultato_funz[i].nome,risultato_funz[i+1].nome); risultato_funz[i+1].punti=totale_provv; strcpy(risultato_funz[i+1].nome,nome_provv); ordinato_funz=0; } } } return(risultato_funz[100]); }
Il problema ha a che fare con funzione bubble_sort (assicuro che le procedure di acquisizione dei dati da entrambi i file e di calcolo del punteggio funzionano perfettamente).
In particolare credo che il problema abbia a che fare con il passaggio della struttura come parametro della funzione bubble_sort e/o con la restituzione della struttura ordinata alla funzione main.
Ho provato in diversi modi ma niente da fare.
Qualsiasi suggerimento è gradito.
Grazie 1000!

Rispondi quotando
