/* Nome: Mario Cognome: Montanari Classe: 3AIN Data: 29/01/2025 Scrivere un programma in C che: 1. Definisce una struct Studente con i seguenti campi: - char inizialeNome; - char inizialeCognome; - int matricola; - float media. 2. Definisce una struct Risultato con i seguenti campi: - int matricola; - char esito (può contenere ‘P’ o ‘B’, in base alla media dello studente); 3. Definire la seguente funzione: - void elaboraStudenti(Studente studenti[], int n, Risultato risultati[]). 4. La funzione riceve un array di struct Studente e un array di struct Risultato. 5. Determina se lo studente è promosso (media >= 6.0) o bocciato (media < 6.0). 6. Aggiorna l'array di struct Risultato con la matricola e l'esito. Nel main, dichiarare e inizializzare un array di struct Studente con almeno 3 elementi, chiamare la funzione e stampare il contenuto del secondo array. VARIANTE: modificare la funzione o crearne un’altra in modo che, oltre ad elaborare come visto sopra, restituisce il numero dei promossi */ #include #include #include #include #define LMIN 65 #define LMAX 90 #define NMIN 0 #define NMAX 99999999 #define MMIN 2 #define MMAX 9 #define PDMIN 10 #define PDMAX 100 #define NSTUDENTI 10 using namespace std; typedef struct { char inizialeNome; char inizialeCognome; int matricola; float media; } Studente; typedef struct { char esito; } Risultato; void riempiElaborazione(Studente studenti[], int nstudenti, Risultato risultato[]); void elaboraStudenti(const Studente studenti[], int nstudenti, Risultato risultati[]); void contaPromossi(Risultato risultati[], int nstudenti); int main(void) { Studente studenti[NSTUDENTI]; Risultato risultati[NSTUDENTI]; int nstudenti = NSTUDENTI; srand(time(NULL)); riempiElaborazione(studenti, nstudenti, risultati); elaboraStudenti(studenti, nstudenti, risultati); contaPromossi(risultati, nstudenti); return 0; } void riempiElaborazione(Studente studenti[], int nstudenti, Risultato risultati[]) { float parteDecimale = 0; for (int i = 0; i < nstudenti; i++) { studenti[i].inizialeNome = rand() % (LMAX - LMIN + 1) + LMIN; studenti[i].inizialeCognome = rand() % (LMAX - LMIN + 1) + LMIN; studenti[i].matricola = rand() % (NMAX - NMIN + 1) + NMIN; studenti[i].media = rand() % (MMAX - MMIN + 1) + MMIN; parteDecimale = rand() % (PDMAX - PDMIN + 1) + PDMIN; for (int j = 0; j < nstudenti; j++) { if (parteDecimale == 10 || parteDecimale == 20 || parteDecimale == 30 ||parteDecimale == 40 ||parteDecimale == 50 ||parteDecimale == 60 ||parteDecimale == 70 || parteDecimale == 80 || parteDecimale == 90 || parteDecimale == 100) { parteDecimale = rand() % (PDMAX - PDMIN + 1) + PDMIN; } } studenti[i].media = studenti[i].media + (parteDecimale / 100); if (studenti[i].media >= 6.0) { risultati[i].esito = 'P'; } else if (studenti[i].media < 6.0) { risultati[i].esito = 'B'; } } } void elaboraStudenti(const Studente studenti[], int nstudenti, Risultato risultati[]) { cout << " -------------------------------------------------------------" << endl; cout << " | Nome:" << setw(13) << " | Cognome:" << setw(13) << " | Matricola:" << setw(13) << " | Media:" << setw(13) << " | Stato:" << setw(2) << "|" << endl; cout << " -------------------------------------------------------------" << endl; for (int i = 0; i < nstudenti; i++) { cout << " | " << studenti[i].inizialeNome << "." << setw(8) << " | " << studenti[i].inizialeCognome << "." << " | " << setfill('0') << setw(8) << studenti[i].matricola << setfill(' ') << setw(9) << " | " << studenti[i].media << setw(9) << " | " << risultati[i].esito << "." << setw(6) << "|" << endl; } cout << " -------------------------------------------------------------" << endl; } void contaPromossi(Risultato risultati[], int nstudenti) { int promossi = 0; for (int i = 0; i < nstudenti; i++) { if (risultati[i].esito == 'P') { promossi++; } } cout << endl << " Numero di studenti promossi: " << promossi << endl; }