libri-javascript-python

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.

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

Strutture complesse in C

Esercizio sulle struct in C

Typedef struct C

Media per riga e per colonna

Somma elementi diagonale principale di una matrice

Come sommare gli elementi della cornice esterna

Come sommare due matrici

Sommare dei numeri di una matrice

Matrice trasposta

Prodotto tra matrici

Ricerca elementi in una matrice

Inserire dati in una matrice

Tavola pitagorica in C

Array multidimensionali

Programma sui triangoli in C

Media dei numeri in un array

Array con numeri random

Quick sort in C

Selection sort in C

Merge sort in C

Insertion Sort in C