Questa e' la traccia dell'esercizio:
Un docente universitario intende tenere traccia dei voti d’esame ottenuti dagli studenti nel suo insegnamento. In particolare, egli tiene lo stesso insegnamento nei corsi di laurea in Informatica delle sedi di Torino e Milano. Per tenere traccia delle informazioni è necessario memorizzare la matricola dello studente, il suo cognome e nome, il corso di laurea a cui appartiene, il voto conseguito e l’anno in cui è stato sostenuto l’esame.
Progetta una soluzione per tenere traccia delle informazioni accademiche considerando che:
• il docente deve poter caricare le informazioni degli esami sostenuti;
• per ogni corso di laurea, indipendentemente dall’anno, deve essere possibile visualizzare la media dei voti;
• per ogni anno, indipendentemente dal corso di laurea, deve essere possibile visualizzare il numero di studenti che hanno conseguito 30;
• il docente deve poter visualizzare l’anno in cui è stato conseguito il più alto numero di 30.
Non riesco a capire come fare per visualizzare per ogni anno il numero di studenti che hanno preso 30 e poi l'anno in cui ci sono stati piu' 30! Mi sapreste dare una mano gentilmente?
Per il il punto 1 (caricare le informazioni degli esami) e per il punto 2 (la media dei voti) l'ho ragionata in questo modo:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
#define LEN 1000
/* STRUTTURA DATI PER IL SINGOLO STUDENTE */
typedef struct {
int MATR;
char COGN [MAX];
char NOME [MAX];
int VOTO;
int ANNO;
}STUDENTE;
/* STRUTTURA DATI PER L'ELENCO DEGLI STUDENTI */
typedef struct {
STUDENTE STUD [LEN];
int NUM_STUD;
}ELENCO;
/* PROTOTIPI DI FUNZIONE */
ELENCO INSERIMENTO_DATI ();
void OPERAZIONI_E_STAMPA (ELENCO EL, int SOMMA, int MEDIA);
/* GESTIONE ESAMI - PROGRAMMA PRINCIPAELE */
int main ()
{
ELENCO elenco;
int SCELTA, somma, media;
printf ("\n[1] - CORSO DI INFORMATICA: SEDE TORINO.");
printf ("\n[2] - CORSO DI INFORMATICA: SEDE MILANO.");
printf ("\nScegli il corso (digitare 1 o 2): ");
scanf ("%d", &SCELTA);
while (SCELTA <1 && SCELTA>2) {
printf ("\nScelta non valida! Riprova..");
printf ("\nScegli il corso: ");
scanf ("%d", &SCELTA);
}
switch (SCELTA)
{ case 1: system ("cls");
printf ("*** CORSO DI INFORMATICA - SEDE DI TORINO***\n\n");
elenco = INSERIMENTO_DATI ();
printf("\n\n");
OPERAZIONI_E_STAMPA (elenco, somma, media);
system ("pause");
break;
case 2: system ("cls");
printf ("*** CORSO DI INFORMATICA - SEDE DI MILANO***\n\n");
elenco = INSERIMENTO_DATI ();
printf("\n\n");
OPERAZIONI_E_STAMPA (elenco, somma, media);
system ("pause");
break;
default: printf ("\n");
}
system ("pause");
return 0;
}
/* DICHIARAZIONE DI FUNZIONI */
/* INSERIMENTO DATI TABELLA */
ELENCO INSERIMENTO_DATI () {
ELENCO EL;
int I;
printf ("\nInserisci il numero di studenti: ");
scanf ("%d", &EL.NUM_STUD);
while (EL.NUM_STUD<=0) {
printf ("\nHai inserito un numero non valido!");
printf ("\nInserisci il numero di studenti: ");
scanf ("%d", &EL.NUM_STUD);
}
printf ("\n\n");
printf ("*******************************************************************************\n");
printf ("*** INSERIRE INFORMAZIONI STUDENTE ***\n");
printf ("*******************************************************************************\n");
for (I=0; I<EL.NUM_STUD;I++) {
printf ("\n\nInserire informazioni studente n.%d", I+1);
printf ("\n\nInserire numero di matricola: ");
scanf ("%d", &EL.STUD[I].MATR);
while (EL.STUD[I].MATR <= 0) {
printf ("\nHai inserito un numero non valido!");
printf ("\nInserire numero di matricola: ");
scanf ("%d", &EL.STUD[I].MATR);
}
printf ("\nInserire il cognome: ");
scanf ("%s", EL.STUD[I].COGN);
printf ("\nInserire il nome: ");
scanf ("%s", EL.STUD[I].NOME);
printf ("\nInserire il voto dell'esame: ");
scanf ("%d", &EL.STUD[I].VOTO);
while (EL.STUD[I].VOTO <0) {
printf ("\nHai inserito un voto non valido!");
printf ("\nInserire il voto: ");
scanf ("%d", &EL.STUD[I].VOTO);
}
printf ("\nInserire l'anno dell'esame: ");
scanf ("%d", &EL.STUD[I].ANNO);
while (EL.STUD[I].ANNO <0) {
printf ("\nHai inserito un anno non valido!");
printf ("\nInserire l'anno dell'esame: ");
scanf ("%d", &EL.STUD[I].ANNO);
}
}
return EL;
}
/* STAMPA TABELLA E VARIE OPERAZIONI */
void OPERAZIONI_E_STAMPA (ELENCO EL, int SOMMA, int MEDIA) {
int I;
I=0;
SOMMA=0;
do {
SOMMA = SOMMA + EL.STUD[I].VOTO;
I++;
}
while (I<EL.NUM_STUD);
MEDIA = SOMMA / I;
/* TABELLA AGGIORNATA */
for (I=0; I<EL.NUM_STUD;I++) {
printf ("\nNumero di matricola: %d", EL.STUD[I].MATR);
printf ("\nCognome: %s", EL.STUD[I].COGN);
printf ("\nNome: %s", EL.STUD[I].NOME);
printf ("\nVoto: %d", EL.STUD[I].VOTO);
printf ("\nAnno: %d", EL.STUD[I].ANNO);
printf ("\n\n");
}
printf ("\nLa media dei voti e': %d\n\n", MEDIA);
}