139 lines
4.2 KiB
C++
139 lines
4.2 KiB
C++
/*
|
||
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 <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;
|
||
} |