RISOLTO [C++] Condizione Composta Ciclo While

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

davicos

Utente Attivo
Messaggi
226
Reazioni
11
Punteggio
43
Salve a tutti,
vorrei fare questo esercizio usando il ciclo While: "Somma 10 numeri interi e comunica la somma dopo averli letti o quando viene inserito lo 0".
Il codice, da me scritto, è il seguente:

C++:
#include <iostream>

using namespace std;

int main()
{
    int x;
    int n = 5, somma = 0;
    int k = 0;

    while (x != 0 || k != n)
    {
        cout << "Inserire Numero: ";
        cin >> x;

        somma = somma + x;
        k++;
    }

    cout << "Somma: " << somma << endl;
    
return 0;
}

Se la condizione nel While è una sola il programma funziona ma con entrambe no. Dove sbaglio?

Grazie.
 
Sbagli ad esempio nel non inizializzare x. Così facendo x avrà un qualche valore, che sarà diverso da 0, e quindi la condizione risulterà vera (questo nel primo ciclo).
Inoltre è sbagliata la condizione: se x è uguale a 0 ma k è < n, allora il tuo ciclo viene eseguito comunque.
Il tuo ciclo deve essere ripetuto quando x != 0 && k != n.

Oppure, detto diversamente: deve essere interrotto quando x == 0 || k == n.

Puoi anche contrarre la forma utilizzata nella somma, facendo somma += x.
 
Queste domande fanno capire il perché nei primi corsi di calcolatori si fanno maree di esercizi sulle tabelle di verità.
https://it.m.wikipedia.org/wiki/Tabella_della_verità

A parte quello, per mia esperienza non è mai un buon motivo cercare di raggruppare tutte le condizioni in una sola istruzione, perché rende il programma molto difficile da mantenere e modificare. Certo, come in questo caso è molto elegante, esiste una condizione sola quindi è facile da capire. Ma il mondo reale è sempre diverso, tra una settimana ci viene chiesto di cambiare il codice ed ecco che quella condizione non è più valida e occorre impazzirci nuovamente.
 
Il problema l'ho già risolto in un altro modo ma la mia domanda è proprio come faccio usando il ciclo While.
Qualche idea?
--- i due messaggi sono stati uniti ---
Scusa, ho letto adetto l'altra risposta. Usando l'operatore "and" funziona. Circa l'abreviazione sì, la conosco, ma preferisco vedere bene cosa fa ogni singola riga. Mi trovo meglio così.

Comunque grazie!
 
Ultima modifica:
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top