[SOL] Esercizio n. 23 Array (23_array)


Spiegazione del programma: Trovare il secondo numero più grande

Questo programma in C++ trova il secondo numero più grande in una serie di numeri inseriti dall'utente.

Come funziona il programma

1. Preparazione e input dei dati

int n;
cout << "Quanti numeri? ";
cin >> n;

double v[100];

for (int i = 0; i < n; i++) {
    cout << "Numero " << i + 1 << ": ";
    cin >> v[i];
}
  • Il programma chiede all'utente quanti numeri vuole inserire
  • Crea un array v di 100 elementi di tipo double per memorizzare i numeri
  • Con un ciclo for, chiede all'utente di inserire tutti i numeri uno per volta

2. Trovare il numero massimo

double max = v[0];
for (int i = 1; i < n; i++) {
    if (v[i] > max)
        max = v[i];
}
  • Inizializza la variabile max con il primo numero dell'array
  • Scorre tutti gli altri numeri e aggiorna max ogni volta che trova un numero più grande
  • Alla fine del ciclo, max contiene il numero più grande

3. Trovare il secondo massimo

bool trovato = false;
double secondo = 0;

for (int i = 0; i < n; i++) {
    if (v[i] != max) {
        if (!trovato || v[i] > secondo) {
            secondo = v[i];
            trovato = true;
        }
    }
}

Questa è la parte più interessante:

  • trovato: variabile booleana che indica se abbiamo già trovato almeno un numero diverso dal massimo
  • secondo: memorizza il secondo numero più grande
  • Il ciclo esamina ogni numero dell'array:
    • Se il numero è diverso dal massimo (v[i] != max)
    • E se è il primo numero diverso dal massimo che troviamo (!trovato) OPPURE è più grande del secondo massimo attuale (v[i] > secondo)
    • Allora aggiorna secondo con questo nuovo valore

4. Visualizzazione del risultato

if (trovato)
    cout << "Secondo massimo = " << secondo << endl;
else
    cout << "Non esiste un secondo valore diverso dal massimo" << endl;
  • Se è stato trovato almeno un numero diverso dal massimo, mostra il secondo massimo
  • Altrimenti informa che tutti i numeri sono uguali al massimo

Esempio di esecuzione

Se inserisco i numeri: 8, 3, 8, 5, 2

  1. Massimo trovato: 8
  2. Ricerca secondo massimo:
    • 3 ≠ 8 → secondo = 3
    • 5 ≠ 8 e 5 > 3 → secondo = 5
    • 2 ≠ 8 ma 2 < 5 → secondo rimane 5
  3. Risultato: "Secondo massimo = 5"

Caso particolare

Se tutti i numeri fossero uguali (es: 7, 7, 7), il programma stamperebbe: "Non esiste un secondo valore diverso dal massimo".


#include <iostream>
using namespace std;

int main() {
    int n;
    cout << "Quanti numeri? ";
    cin >> n;

    double v[100];

    for (int i = 0; i < n; i++) {
        cout << "Numero " << i + 1 << ": ";
        cin >> v[i];
    }

    double max = v[0];
    for (int i = 1; i < n; i++) {
        if (v[i] > max)
            max = v[i];
    }

    bool trovato = false;
    double secondo = 0;

    for (int i = 0; i < n; i++) {
        if (v[i] != max) {
            if (!trovato || v[i] > secondo) {
                secondo = v[i];
                trovato = true;
            }
        }
    }

    if (trovato)
        cout << "Secondo massimo = " << secondo << endl;
    else
        cout << "Non esiste un secondo valore diverso dal massimo" << endl;

    return 0;
}