School-Coding-Cpp/sfusi/elaborazioni_dati_studente_...

139 lines
4.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
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 unaltra in modo che,
oltre ad elaborare come visto sopra, restituisce il numero dei promossi
*/
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
#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;
}