[SOL] Esercizio n. 25 Array (25_array)
Questo programma in C++ simula un sistema di valutazione sportiva (come quello utilizzato nelle gare di pattinaggio artistico o ginnastica), dove vengono esclusi il voto più alto e quello più basso per calcolare la media finale.
Struttura del Programma
Inclusioni e Costanti
#include <iostream>
using namespace std;
const int MAX_GIUDICI = 100;
#include <iostream>: permette di utilizzare le funzioni di input/output (comecoutecin)using namespace std: evita di dover scriverestd::prima di ogni comandoconst int MAX_GIUDICI = 100: definisce il numero massimo di giudici consentiti
Fase 1: Acquisizione del Numero di Giudici
int n;
cout << "Inserire il numero di giudici (minimo 3, massimo " << MAX_GIUDICI << "): ";
cin >> n;
while (n < 3 || n > MAX_GIUDICI) {
cout << "Il numero deve essere compreso tra 3 e " << MAX_GIUDICI << ". Riprova: ";
cin >> n;
}
Il programma:
- Chiede all'utente quanti giudici parteciperanno
- Controlla la validità dell'input: deve essere almeno 3 (per poter escludere massimo e minimo) e al massimo 100
- Se il numero non è valido, continua a chiedere finché non viene inserito un valore corretto
Fase 2: Raccolta dei Voti
double voti[MAX_GIUDICI];
for (int i = 0; i < n; i++) {
cout << "Voto del giudice " << (i + 1) << ": ";
cin >> voti[i];
}
- Crea un array chiamato
votiper memorizzare tutti i punteggi - Utilizza un ciclo for per chiedere il voto di ogni giudice
- I voti vengono memorizzati nell'array
Fase 3: Calcolo di Somma, Massimo e Minimo
double somma = 0.0;
double votoMax = voti[0];
double votoMin = voti[0];
for (int i = 0; i < n; i++) {
somma += voti[i];
if (voti[i] > votoMax) {
votoMax = voti[i];
}
if (voti[i] < votoMin) {
votoMin = voti[i];
}
}
In questa sezione il programma:
- Inizializza le variabili: somma a 0, massimo e minimo al primo voto
- Scorre tutti i voti e per ognuno:
- Lo aggiunge alla somma totale
- Controlla se è maggiore del massimo attuale
- Controlla se è minore del minimo attuale
Fase 4: Calcolo del Punteggio Finale
double punteggioFinale = (somma - votoMax - votoMin) / (n - 2);
Questa è la formula chiave del programma:
- Sottrae dalla somma totale il voto massimo e quello minimo
- Divide per
(n - 2)perché abbiamo escluso 2 voti dal calcolo - Il risultato è la media dei voti rimanenti
Fase 5: Visualizzazione dei Risultati
cout << "\n--- Risultati ---" << endl;
cout << "Voto massimo escluso: " << votoMax << endl;
cout << "Voto minimo escluso: " << votoMin << endl;
cout << "Punteggio finale: " << punteggioFinale << endl;
Mostra all'utente:
- Quale voto è stato escluso come massimo
- Quale voto è stato escluso come minimo
- Il punteggio finale calcolato
Esempio di Funzionamento
Se abbiamo 5 giudici con voti: 7.5, 8.0, 6.5, 9.0, 7.8
- Voto massimo: 9.0 (escluso)
- Voto minimo: 6.5 (escluso)
- Voti considerati: 7.5, 8.0, 7.8
- Punteggio finale: (7.5 + 8.0 + 7.8) ÷ 3 = 7.77
Questo sistema è utilizzato nelle competizioni sportive per ridurre l'influenza di giudici troppo severi o troppo generosi.
#include <iostream>
using namespace std;
const int MAX_GIUDICI = 100;
int main() {
int n;
cout << "Inserire il numero di giudici (minimo 3, massimo " << MAX_GIUDICI << "): ";
cin >> n;
// Controllo di validità dell'input
while (n < 3 || n > MAX_GIUDICI) {
cout << "Il numero deve essere compreso tra 3 e " << MAX_GIUDICI << ". Riprova: ";
cin >> n;
}
double voti[MAX_GIUDICI];
// Acquisizione dei voti
for (int i = 0; i < n; i++) {
cout << "Voto del giudice " << (i + 1) << ": ";
cin >> voti[i];
}
// Calcolo di somma, massimo e minimo
double somma = 0.0;
double votoMax = voti[0];
double votoMin = voti[0];
for (int i = 0; i < n; i++) {
somma += voti[i];
if (voti[i] > votoMax) {
votoMax = voti[i];
}
if (voti[i] < votoMin) {
votoMin = voti[i];
}
}
// Calcolo del punteggio finale escludendo max e min
double punteggioFinale = (somma - votoMax - votoMin) / (n - 2);
// Output dei risultati
cout << "\n--- Risultati ---" << endl;
cout << "Voto massimo escluso: " << votoMax << endl;
cout << "Voto minimo escluso: " << votoMin << endl;
cout << "Punteggio finale: " << punteggioFinale << endl;
return 0;
}