Caricare N numeri e dire se esiste un elemento uguale alla somma di tutti gli altri. Esempio: 3 10 2 5 → 10 (3 + 2 + 5) Suggerimento: un elemento v[i] va bene se somma totale − v[i] == v[i]

[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'utente
  • n: 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, allora somma - v[i] = v[i]
  • Il ciclo while continua finché:

    • Non ha controllato tutti gli elementi (i < n)
    • E non ha ancora trovato l'elemento cercato (!trovato)

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-while e while per 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;
}