Concetti Chiave
- Il programma calcola il punteggio di un quiz a risposte multiple con 20 domande, valutando risposte esatte e sbagliate.
- Le risposte esatte e quelle dell'esaminando possono essere maiuscole o minuscole, ma il programma le gestisce in modo uniforme.
- Il punteggio viene calcolato aggiungendo un punto per ogni risposta corretta e sottraendo 0.25 punti per ogni risposta errata.
- La lettura delle risposte dell'esaminando avviene da un file di testo, mentre il punteggio finale viene scritto in un altro file di testo.
- Il programma include meccanismi di apertura e chiusura file, e gestisce eventuali errori durante queste operazioni.
Si desidera realizzare un programma che calcoli il punteggio ottenuto da un esaminando in un quiz a risposte multiple. Il quiz contiene 20 domande, ognuna delle quali può avere la risposta A, B, C, D oppure E.
Al programma viene fornita la stringa delle risposte esatte (ossia le 20 lettere corrispondenti alle 20 risposte esatte).
Il programma deve quindi leggere dal file scheda.txt le risposte date da un esaminando.
Le risposte sono elencate una per riga.
Non è noto se le risposte (sia quelle esatte sia quelle fornite dall’esaminando) sono scritte con caratteri alfabetici maiuscoli o minuscoli.
garantisce che le risposte contengono solo caratteri leciti. Il programma deve fornire come risultato il punteggio conseguito dall’esaminando, calcolato secondo le seguenti regole:
• si aggiunge un punto per ogni risposta esatta
• si sottraggono 0.25 punti per ogni risposta sbagliata
Il punteggio ottenuto va scritto in un file di testo.
#include
#include
#include
#define MAX_RISPOSTE 20
#define PRE 1.0 // Punti per Risposta Esatta
#define PRS -0.25 // Punti per Risposta Sbagliata
int main ()
{
char risposta[2];
char risposteEsatte[MAX_RISPOSTE+1];
FILE *fpScheda, *fpRisultati;
double punteggio = 0.0;
int i;
//printf("Digita la stringa contenente le risposte corrette\n");
//gets(risposteEsatte);
//fflush(stdin);
strcpy(risposteEsatte,"AAABACcCcCDDDDDaBaBB"); //per test
strupr(risposteEsatte); //conversione in maiuscolo delle risposte esatte
/* apertura e controllo del file di input */
fpScheda = fopen ("scheda.txt", "rt");
if (fpScheda == NULL)
{
printf("Errore: impossibile aprire il file in lettura\n");
getchar();
exit(1);
}
/* lettura dei dati */
i = 0;
while (fscanf(fpScheda,"%s",risposta) != EOF)
{
/* la risposta data e' in risposta[0] */
if (toupper(risposta[0]) == risposteEsatte)
punteggio += PRE;
else
punteggio += PRS;
i++;
}
/* chiusura del file */
fclose(fpScheda);
/* stampa del risultato */
//printf ("Punti conseguiti: %f\n", punteggio); //per test
/* apertura e controllo del file di output */
fpRisultati = fopen ("risultati.txt", "wt");
if (fpRisultati == NULL)
{
printf("Errore: impossibile aprire il file in scrittura\n");
getchar();
exit(2);
}
fprintf (fpRisultati,"%f\n", punteggio);
fclose(fpRisultati);
getchar();
return 0;
}
Domande da interrogazione
- Qual è lo scopo principale del programma descritto nel testo?
- Come gestisce il programma le differenze tra maiuscole e minuscole nelle risposte?
- Quali sono le regole di punteggio utilizzate dal programma per calcolare il risultato finale?
Il programma è progettato per calcolare il punteggio di un esaminando in un quiz a risposte multiple, confrontando le risposte date con quelle esatte e applicando un sistema di punteggio specifico.
Il programma converte tutte le risposte esatte in maiuscolo per garantire che il confronto con le risposte dell'esaminando sia insensibile alla distinzione tra maiuscole e minuscole.
Il programma aggiunge un punto per ogni risposta esatta e sottrae 0.25 punti per ogni risposta sbagliata, calcolando così il punteggio totale dell'esaminando.