[SOL] Esercizio nr. 24 Array (24_Array)
Spiegazione del Programma: Ricerca di un Elemento Speciale
Questo programma in C++ cerca un elemento particolare all'interno di un array: un numero che sia uguale alla somma di tutti gli altri elementi.
Struttura del Programma
1. Dichiarazione delle Variabili
const int MAX = 100;
int v[MAX];
int n;
MAX: costante che definisce la dimensione massima dell'array (100 elementi)v[MAX]: array di interi che conterrà i numeri inseriti dall'utenten: variabile che memorizza quanti numeri l'utente vuole inserire
2. Caricamento dei Dati
do {
cout << "Quanti numeri vuoi inserire (1-" << MAX << ")? ";
cin >> n;
} while (n < 1 || n > MAX);
Questo ciclo do-while garantisce che l'utente inserisca un numero valido:
- Deve essere almeno 1
- Non può superare 100 (il valore di MAX)
- Se l'utente inserisce un valore non valido, il programma continua a chiedere
for (int i = 0; i < n; i++) {
cout << "Numero " << i + 1 << ": ";
cin >> v[i];
}
Questo ciclo for permette all'utente di inserire tutti i numeri nell'array.
3. Calcolo della Somma Totale
int somma = 0;
for (int i = 0; i < n; i++) {
somma += v[i];
}
Il programma calcola la somma di tutti gli elementi dell'array. Questa somma sarà utilizzata nel passaggio successivo.
4. Ricerca dell'Elemento Speciale
bool trovato = false;
int i = 0;
while (i < n && !trovato) {
if (somma - v[i] == v[i]) {
trovato = true;
} else {
i++;
}
}
Questa è la parte più importante del programma. Per ogni elemento v[i]:
-
Logica: Se
v[i]è uguale alla somma degli altri elementi, allora:somma totale - v[i] = somma degli altri elementi- Se
v[i] = somma degli altri elementi, allorasomma - v[i] = v[i]
-
Il ciclo
whilecontinua finché:- Non ha controllato tutti gli elementi (
i < n) - E non ha ancora trovato l'elemento cercato (
!trovato)
- Non ha controllato tutti gli elementi (
5. Visualizzazione del Risultato
if (trovato) {
cout << "Esiste: " << v[i] << " e' uguale alla somma degli altri elementi" << endl;
} else {
cout << "Nessun elemento e' uguale alla somma degli altri" << endl;
}
Il programma comunica all'utente se ha trovato o meno l'elemento speciale.
Esempio Pratico
Supponiamo di inserire i numeri: 2, 3, 5
- Somma totale = 2 + 3 + 5 = 10
- Controllo per 2: 10 - 2 = 8, ma 8 ≠ 2
- Controllo per 3: 10 - 3 = 7, ma 7 ≠ 3
- Controllo per 5: 10 - 5 = 5, e 5 = 5 ✓
Il programma troverà che 5 è uguale alla somma degli altri elementi (2 + 3 = 5).
Concetti Informatici Utilizzati
- Array: struttura dati per memorizzare più valori
- Cicli di controllo:
do-whileewhileper la validazione e ricerca - Variabili booleane: per controllare il flusso del programma
- Algoritmo di ricerca: ricerca sequenziale con condizione di arresto
#include <iostream>
using namespace std;
int main() {
const int MAX = 100;
int v[MAX];
int n;
// Caricamento
do {
cout << "Quanti numeri vuoi inserire (1-" << MAX << ")? ";
cin >> n;
} while (n < 1 || n > MAX);
for (int i = 0; i < n; i++) {
cout << "Numero " << i + 1 << ": ";
cin >> v[i];
}
// Somma totale di tutti gli elementi
int somma = 0;
for (int i = 0; i < n; i++) {
somma += v[i];
}
// Ricerca: v[i] e' uguale alla somma degli altri se somma - v[i] == v[i]
bool trovato = false;
int i = 0;
while (i < n && !trovato) {
if (somma - v[i] == v[i]) {
trovato = true;
} else {
i++;
}
}
// Risultato
if (trovato) {
cout << "Esiste: " << v[i] << " e' uguale alla somma degli altri elementi" << endl;
} else {
cout << "Nessun elemento e' uguale alla somma degli altri" << endl;
}
return 0;
}