In questa lezione svolgeremo un’altra esercitazione sulle struct in C, al fine di consolidare quanto studiato finora.
Quindi proponiamo questo esercizio sulle struct in C a scopo didattico:
Definire la struttura alunno che descrivere un alunno in base al nome, cognome, nerrori. Scriviamo quindi un programma in C, che dichiara una tabella alunni di tipo alunno che permette di inserire 20 studenti. Il programma deve consentire di inserire i dati di un quiz somministrato agli alunni e di memorizzare le risposte in una matrice.
Realizzare un menù che consente, dopo l’inserimento degli alunni e delle risposte corrette del quiz di visualizzare le risposte sbagliate per ciascun alunno, visualizzi gli alunni che hanno superato il quiz con il conteggio degli errori commessi ed effettui una ricerca per alunno.
Innanzitutto definiamo la struttura alunno dove specifico i campi, poi creiamo la tabella alunni di tipo alunno, un array quiz dove memorizzo le risposte corrette e una matrice risposte dove memorizzo le risposte per ciascun alunno.
Quindi con la procedura insert() carichiamo tutti i dati nella struttura, nell’array e nella matrice.
Dopo realizziamo la procedura print_error() che visualizza semplicemente tutti gli alunni e il conteggio degli errori.
Poi realizziamo la procedura risposte_date() che visualizza in dettaglio di tutti gli alunni con le risposte date e accanto quelle corrette.
Infine realizziamo la procedura stampaAlunno() che ricerca un alunno per cognome, calcola gli errori che ha commesso e infine calcola in base al numero degli errori se l’esame è stato superato oppure no.
ACEMAGIC PC Portatile Intel 12th Alder Lake N95【Battere N5095,Fino a 3.4Ghz】16GB DDR4 RAM 512GB SSD Notebook,15.6" Full HD Computer portatile 2.4G/5G WiFi,BT5.0,Type_C, USB3.2,HDMI Ufficio Argento
324,80 € (a partire da 18 Marzo 2024 14:37 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)Microsoft Surface Pro 6 12.3" - Core i5, 8GB RAM, 256GB SSD - Argento (Ricondizionato)
447,89 € (a partire da 18 Marzo 2024 15:18 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)Apple PC Portatile MacBook Air 2022 con chip M2: display Liquid Retina 13,6", 8GB di RAM, 256GB di archiviazione SSD storage, tastiera retroilluminata; color Mezzanotte
1.149,00 € (a partire da 18 Marzo 2024 14:37 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)Ecco dunque il listato completo dell’esercitazione sulle struct in C
#include <stdio.h>
#include <string.h>
#define N 20
#define M 30
typedef struct {
char cognome[30];
char nome[20];
int errori;
}alunno;
alunno alunni[N];
int quiz[M];
int risposte[N][M];
void insert()
{
int i,j;
for (i=0; i<N; i++){
printf("Inserisci il cognome dell'alunno: ");
scanf("%s", alunni[i].cognome);
printf("Inserisci il nome dell'alunno: ");
scanf("%s", alunni[i].nome);
}
//caricamento risposte corrette nell'array quiz
printf("\nCarichiamo il quiz con le risposte corrette!\n");
for (i=0; i<M; i++){
printf("Inserisci la risposta esatta alla domanda %d: ", i+1);
scanf("%d", &quiz[i]);
}
//caricamento risposte alunni nella matrice risposte
printf("\nCarichiamo le risposte al quiz date dagli alunni! ");
for (i=0; i<N; i++){
printf("\nInserisci le risposte dell'alunno: %s %s\n", alunni[i].cognome, alunni[i].nome);
for (j=0;j<M; j++) {
printf("Inserisci risposta domanda %d: ", i+1);
scanf("%d", &risposte[i][j]);
}
}
}
int menu()
{
int selezione = 0;
do
{
printf("\n" );
printf("\n1 - Visualizza esiti " );
printf("\n2 - Risposte date");
printf("\n3 - Ricerca per alunno");
printf("\n4 - Esci");
printf("\n" );
printf("\nEffettua una scelta: " );
scanf("%d", &selezione );
}
while (selezione < 1 || selezione > 4);
return selezione;
}
void stampaAlunno()
{
char cognome[40];
int i,j, trovato=0;
for(i=0;i<N;i++)
alunni[i].errori=0; //azzeriamo gli errori
printf("\nQuale alunno cerchi?:");
scanf("%s", cognome);
for (i=0; i<N; i++){
if(strcmp(alunni[i].cognome,cognome)==0) {
printf("\n\n Nome: %s\n Risposte date: ", alunni[i].nome);
for (j=0;j<M; j++) {
printf(" %d ", risposte[i][j]);
if (risposte[i][j]!=quiz[j])
alunni[i].errori=alunni[i].errori+1;
}
printf("\n Errori totali: %d ", alunni[i].errori);
if (alunni[i].errori<N)
printf("\n Esame superato!");
else
printf("\n Esame non superato, studia e riprova!");
trovato=1;
}
}
if (trovato==0)
printf("\nNon e' presente nessun alunno:");
}
void print_error(){
int i, j;
for(i=0;i<N;i++)
alunni[i].errori=0; //azzeriamo gli errori
for (i=0; i<N; i++){
for (j=0;j<M; j++)
if (risposte[i][j]!=quiz[j])
alunni[i].errori=alunni[i].errori+1;
printf("\nAlunno %s, errori %d", alunni[i].cognome, alunni[i].errori);
}
}
void risposte_date(){
int i, j;
for(i=0;i<N;i++)
alunni[i].errori=0; //azzeriamo gli errori
for (i=0; i<N; i++){
printf("\nAlunno %s. \nRisposte date: ", alunni[i].cognome);
for (j=0;j<M; j++)
printf("\nDomanda %d - risposta data: %d - la risposta corretta era: %d", j+1, risposte[i][j], quiz[j]);
}
}
int main()
{
int scelta;
insert();
while((scelta=menu())!=4){
switch(scelta){
case 1:
print_error();
break;
case 2:
risposte_date();
break;
case 3:
stampaAlunno();
break;
case 4:
break;
}
}
return 0;
}
Chiaramente questo è solo una possibile implementazione di questa esercitazione sulle struct in C.
Alcuni link utili
Realizzare un menù di scelta in C
Somma elementi diagonale principale di una matrice
Come sommare gli elementi della cornice esterna
Sommare dei numeri di una matrice
Ricerca elementi in una matrice