[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
vdi 100 elementi di tipodoubleper 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
maxcon il primo numero dell'array - Scorre tutti gli altri numeri e aggiorna
maxogni volta che trova un numero più grande - Alla fine del ciclo,
maxcontiene 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 massimosecondo: 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
secondocon questo nuovo valore
- Se il numero è diverso dal massimo (
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
- Massimo trovato: 8
- Ricerca secondo massimo:
- 3 ≠ 8 →
secondo = 3 - 5 ≠ 8 e 5 > 3 →
secondo = 5 - 2 ≠ 8 ma 2 < 5 →
secondorimane 5
- 3 ≠ 8 →
- 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;
}