/* Crea un array di struct "studente" (cognome, array contenente i voti degli esami). Presenta all'utente un menu' con varie possibilita': - media (in trentesimi); - media (in 110); - voto piu' alto; - voto piu' basso; - fine programma. Realizza ciascuna operazione con una funzione. Possibili estensioni dell'esercizio: altre operazioni possibili sono - quante volte e' stato preso un certo voto; - fare un grafico dell'andamento dei voti (per esempio con una matrice di caratteri). Ampliare la struttura inserendo i dati che si vuole: nome della materia, data dell'esame, eventuale lode, ecc. */ #include #include struct studente { char cognome[20]; int voti[10]; }; // Immette i dati nell'array di struct `elenco'. void carica_elenco(studente elenco[], int num_studenti) { for (int i = 0; i < num_studenti; ++i) { cout << "Immetti il cognome: "; cin >> elenco[i].cognome; cout << "Immetti i voti dei 10 esami e premi invio dopo ognuno: "; cout << endl; for (int j = 0; j < 10; ++j) do { cin >> elenco[i].voti[j]; if (elenco[i].voti[j] < 18 || elenco[i].voti[j] > 30) cout << "Il voto deve essere compreso tra 18 e 30!" << endl; } while (elenco[i].voti[j] < 18 || elenco[i].voti[j] > 30); cout << endl; } } // Ritorna `true' se lo studente di cognome `cognome' e' presente // nell'array di struct `elenco' ed in tal caso la variabile `index' // ritornera' (e' passata per riferimento!) l'indice della posizione // dello studente all'interno dell'array. // Ritorna `false' se lo studente di cognome `cognome' non e' presente // nell'array di struct `elenco'. bool verifica_presenza_studente(studente elenco[], int num_studenti, char cognome[], int& index) { bool trovato = false; for (int i = 0; i < num_studenti; ++i) if (strcmp(elenco[i].cognome, cognome) == 0) { index = i; trovato = true; break; } return trovato; } // Restituisce la media (in trentesimi) dei voti nell'array `voti'. float media_30(int voti[]) { float somma = 0; for (int i = 0; i < 10; ++i) somma += voti[i]; return somma / 10; } // Restituisce la media (in 110) dei voti nell'array `voti'. float media_110(int voti[]) { float somma = 0; for (int i = 0; i < 10; ++i) somma += voti[i]; return (somma * 11) / 30; } // Restituisce il massimo tra i voti nell'array `voti'. int max(int voti[]) { int voto_max = 0; for (int i = 0; i < 10; ++i) if (voti[i] > voto_max) voto_max = voti[i]; return voto_max; } // Restituisce il minimo tra i voti nell'array `voti'. int min(int voti[]) { int voto_min = 31; for (int i = 0; i < 10; ++i) if (voti[i] < voto_min) voto_min = voti[i]; return voto_min; } int main() { int num_studenti; cout << "Quanti studenti vuoi immettere (max 10)? "; do cin >> num_studenti; while (num_studenti < 1 || num_studenti > 10); studente elenco[num_studenti]; // Inserisce i dati per ogni studente nell'array `elenco'. carica_elenco(elenco, num_studenti); int scelta; do { cout << endl << "\t *** MENU ***" << endl << endl; cout << "1. dammi la media degli esami (in trentesimi)" << endl; cout << "2. dammi la media degli esami (in 110)" << endl; cout << "3. dammi il voto piu' alto" << endl; cout << "4. dammi il voto piu' basso" << endl; cout << "5. esci" << endl; cout << "Digita il numero corrispondente all'operazione \n" << "che vuoi fare: "; do cin >> scelta; while (scelta < 1 || scelta > 5); if (scelta == 5) break; char cognome[20]; cout << "Inserisci il cognome dello studente: "; cin >> cognome; // Verifica la presenza dello studente di cognome `cognome' // nell'array `elenco': in caso affermativo ne memorizza // la posizione nell'array nella variabile `index' (nota: // `index' e' passata per riferimento!). int index; if (verifica_presenza_studente(elenco, num_studenti, cognome, index)) { if (scelta == 1) cout << "La media dei voti (in trentesimi) di " << cognome << " e' " << media_30(elenco[index].voti) << endl; else if (scelta == 2) cout << "La media dei voti (in trentesimi) di " << cognome << " e' " << media_110(elenco[index].voti) << endl; else if (scelta == 3) cout << "Il voto piu' alto di " << cognome << " e' " << max(elenco[index].voti) << endl; else if (scelta == 4) cout << "Il voto piu' basso di " << cognome << " e' " << min(elenco[index].voti) << endl; } else cout << "Lo studente " << cognome << " non e' presente in elenco" << endl; } while (scelta != 5); cout << "Arrivederci" << endl; return 0; }