/* Realizzare un programma basato sul record 'studente', composto dai campi:
- 'nome' di tipo 'string';
- 'cognome' di tipo 'string';
- 'voto' di tipo 'int';
Definire un vettore ("allievo") di tipo 'studente' che e' un array
di '5' studenti e '8' verifiche.
* Azzerare tutti i campi 'voto' dell'array creato.
* Fare un loop (ciclo infinito) che termina se si preme '0', con questo menu:
- '1' inserisci i voti di una verifica;
- '2' calcola la media di una verifica;
- '3' calcola la media di uno studente;
- '0' per uscire;
+ se premiamo '0' il ciclo termina (gia' detto);
+ se premiamo '1' viene chiesta che numero di verifica considerare e poi
chiede il voto per ciascuno studente;
+ se premiamo '2' viene chiesta che numero di verifica considerare e poi
viene calcolata la media. Se non sono stati immessi voti (voto=0) dice
"Nessun voto presente per la verifica scelta";
+ se premiamo '3' viene chiesta che numero di allievo considerare e poi
viene calcolata la media contando solo le verifiche inserite (se non sono
stati immessi voti (voto=0) non tiene conto di quei valori) e comunica
quante verifiche sono state considerate per arrivare a quella media. Se non
ci sono voti, lo comunica con "Nessun voto attribuito all'allievo"
"Nessun voto presente per la verifica scelta";
Se si finisce, aggiungere le opzioni (sempre numeriche) per il calcolo del
massimo e del minimo voto (maggiore di '0') per ciascna verifica/Alunno
Se si vuol far altro, migliorare il software affidandosi a nome e cognome di
ciascun allievo
*/
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
#define STUDENTI 5 // numero di allievi
#define VERIFICHE 8 // numero di prove
int main(){
struct studente{
string nome;
string cognome;
int voto;
};
studente allievo[STUDENTI][VERIFICHE];
int i, j, k, n, minni, macsi, somma, scelta, m;
cout<<"\n Programma avviato";
//Azzera tutti i voti della matrice allievo
for(i=0;i<STUDENTI;i++){
for(j=0;j<=VERIFICHE;j++)
allievo[i][j].voto=0;
}
cout<<"\nVoti azzerati";
do{
cout<<"\nEntrato nel ciclo do-while";
system("CLS"); // clears screen
cout << "Premi:" << endl;
cout << "'1' per inserire i voti di una verifica" << endl;
cout << "'2' per calcolare la media di una verifica" << endl;
cout << "'3' per calcolare la media di uno studente" << endl;
cout << "'4' per calcolare il minimo voto di uno verifica" << endl;
cout << "'5' per calcolare la minimo voto di una studente" << endl;
cout << "'6' per calcolare il massimo voto di uno verifica" << endl;
cout << "'7' per calcolare il massimo voto di una studente" << endl;
cout << "'8' per visualizzare il nome dell'allievo a cui appartiene il minimo/massimo voto" << endl;
cout << "'9' per inserire i nomi degli allievi di una classe" << endl;
cout << "'0' per uscire" << endl;
cin >> scelta;
switch(scelta){
case 1:
cout << "Di che numero di verifica vuoi inserire i voti (1 - " << VERIFICHE << ")?: ";
cin >>i; // verifica di cui voglio assegnare i voti
i = i-1;
for(j=0;j<STUDENTI;j++){
cout << "Inserisci il voto dell'allievo " <<j+1<< " ('0' se assente): ";
cin >> allievo[j][i].voto;
}
break;
case 2:
cout << "Di che verifica vuoi calcolare la media (1 - " << VERIFICHE << ")? ";
cin >> i;
i = i-1;
somma = 0; // variabile di accumulo
k=0; // allievi che han svolto la verifica
for(j=0;j<STUDENTI;j++){
if(allievo[j][i].voto > 0){
k++; // considero l'allievo
somma = somma + allievo[j][i].voto;
}
}
cout << "\nLa media dei voti della verifica "<<(i+1)<<" vale: "<< (float) somma/k << endl;
break;
case 3:
cout << "Di che allievo vuoi calcolare la media (1 - " << STUDENTI << ")?: ";
cin >> i;
i = i-1;
somma = 0; // variabile di accumulo
k=0; // VERIFICHE che l'allievo ha svolto
for(j=0;j<VERIFICHE;j++){
if(allievo[i][j].voto > 0){
k++; // considero l'allievo
somma = somma + allievo[i][j].voto;
}
}
cout << "\n La media dei voti dell'allievo " <<(i+1)<< " nelle verifiche svolte vale: " << (float) somma/k << endl;
break;
case 4:
cout << "Di che verifica vuoi calcolare il minimo (1 - " << VERIFICHE << ")? ";
cin >> i;
i = i-1;
minni = allievo[i][0].voto; // OKKIO!!! Il primo allievo deve aver svolto la verifica
for(j=0;j<STUDENTI;j++){
if((allievo[j][i].voto > 0) && (allievo[j][i].voto < minni)) // se voto presente e minore del minimo
minni = allievo[j][i].voto; // l'attuale e' il nuovo minimo
}
cout << "Il minimo voto nella verifica " <<(i+1)<<" vale: " << minni << endl;
break;
case 5:
cout << "Di che allievo vuoi calcolare il minimo (1 - " << STUDENTI << ")?: ";
cin >> i;
i = i-1;
minni = allievo[i][0].voto; // OKKIO!!! La prima verifica deve aver un voto
for(j=0;j<VERIFICHE;j++){
if((allievo[i][j].voto > 0) && (allievo[i][j].voto < minni)) // se voto presente e minore del minimo
minni = allievo[i][j].voto; // l'attuale e' il nuovo minimo
}
cout << "\n Il minimo voto dell'allievo " << i+1 << " nelle verifiche svolte vale: " << minni << endl;
break;
case 6:
cout << "Di che verifica vuoi calcolare il massimo (1 - " << VERIFICHE << ")? ";
cin >> i;
i = i-1;
macsi = allievo[i][0].voto; // OKKIO!!! Il primo allievo deve aver svolto la verifica
for(j=0;j<STUDENTI;j++){
if(allievo[j][i].voto > macsi) // se voto maggiore del massimo
macsi = allievo[j][i].voto; // l'attuale e' il nuovo minimo
}
cout << "Il massimo voto nella verifica " << i+1 << " vale: " << macsi << endl;
break;
case 7:
cout << "Di che allievo vuoi calcolare il massimo (1 - " << STUDENTI << ")? ";
cin >> i;
i = i-1;
macsi = allievo[0][i].voto; // OKKIO!!! La prima verifica deve aver un voto
for(j=0;j<STUDENTI;j++){
if(allievo[i][j].voto > macsi) // se voto presente e minore del minimo
macsi = allievo[i][j].voto; // l'attuale e' il nuovo minimo
}
cout << "Il massimo voto dell'allievo " << i+1 << " nelle verifiche svolte e' " << macsi << endl;
break;
case 8:
cout<<"\nVuoi calcolare a chi appartiene il minimo o il massimo voto di una verifica? (MIN=0, MAX=1): ";
cin>>m; //<<-- SE COMMENTO QUESTA RIGA IL PROGRAMMA SI AVVIA ALTRIMENTI MI RESTA LO SCHERMO VUOTO
/*cout<<"\n mm = "<<mm;
cout << "Di che verifica (1 - " << VERIFICHE << ")?: ";
cin >> i;
i = i-1;
cout<<"\n Verifica scelta: "<<i;
if(mm == 0){
minni = allievo[0][i].voto; // OKKIO!!! Il primo allievo deve aver svolto la verifica
for(j=0;j<STUDENTI;j++){
if((allievo[j][i].voto > 0) && (allievo[j][i].voto < minni)){ // se voto presente e minore del minimo
minni = allievo[j][i].voto; // l'attuale e' il nuovo minimo
k = j;
cout<<"\nNuovo MINIMO: "<<minni<<" di allievo: "<<allievo[k][i].voto;
}
}
cout << "Il minimo voto nella verifica " << i+1 << " vale: "<< minni << " e appartiene a " << allievo[k][i].nome << endl;
}
if(mm == 1){
macsi = allievo[0][i].voto; // OKKIO!!! Il primo allievo deve aver svolto la verifica
for(j=0;j<STUDENTI;j++){
if(allievo[j][i].voto > macsi){ // se voto maggiore del massimo
macsi = allievo[j][i].voto; // l'attuale e' il nuovo minimo
k = j;
cout<<"\nNuovo MASSIMO: "<<minni<<" di allievo: "<<allievo[k][i].voto;
}
}
cout << "Il massimo voto nella verifica " << i+1 << " vale: " << k << " e appartiene a " << allievo[k][i].nome << endl;
}*/
break;
case 9:
for(int x=0;x<VERIFICHE;x++){
for(int y=0;y<STUDENTI;y++){
cout << "Qual e' il nome dell'allievo " << y+1 << "?: ";
cin >> allievo[y][x].nome;
}
}
cout<<"\n Nomi studenti:";
for(int y=0;y<VERIFICHE;y++){
for(int x=0;x<STUDENTI;x++){
cout<<"\n Studente "<<x+1<<": "<<allievo[x][y].nome;
}
}
cout << "Inseriti i nominativi richiesti" << endl;
break;
default:
break;
}
system("PAUSE");
}while(scelta!=0);
return 0;
}