[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 (come cout e cin)
  • using namespace std: evita di dover scrivere std:: prima di ogni comando
  • const 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 voti per 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

  1. Voto massimo: 9.0 (escluso)
  2. Voto minimo: 6.5 (escluso)
  3. Voti considerati: 7.5, 8.0, 7.8
  4. 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;
}