PDA

Visualizza la versione completa : [C++] Cifre decimali


Tus
21-05-2017, 11:00
Ciao a tutti, sono nuova nel forum e anche nel mondo della programmazione. Avrei bisogno di un consiglio per cercare di risolvere un problema nel mio programma.
Ho scritto un programma che, letta da input una sequenza di interi terminata da -1, controlli che sianotutte cifre decimali (0-9), calcoli il numero che si ottiene giustapponendo le cifre e verifichi se il numeroottenuto è divisibile per 3. L’output del programma deve rispettare le seguenti condizioni:
se uno dei valori inseriti da input non è una cifra decimale, deve essere stampata esclusivamente lastringa ERRORE, senza endl, né spaziature.
Se i valori inseriti sono tutte cifre decimali, deve essere inviato in stampa il numero che si ottienegiustapponendo le cifre, e sulla riga successiva, la stringa SI (senza endl, né spaziature) se il numeroè divisibile per 3, mentre se non e' divisibile per 3 deve inviare in stampa il numero seguito da NO.
Infine, se la sequenza in input è vuota, deve stampare esclusivamente la stringa VUOTO, senza endl, néspaziature.

Ora, quando io inserisco ad esempio -1, invece di stampare solo VUOTO mi stampa VUOTO0NO, e non riesco proprio a capire il punto in cui sbaglio. Inserisco qui il programma che ho scritto, spero proprio che qualcuno riesca a darmi una mano o anche solo un consiglio per capire dove sbaglio.

#include <iostream>
using namespace std;
int main ()
{
int a, somma=0;
bool decimale=false;
cin>>a;


if (a == -1)
cout<<"VUOTO";


if else (a != -1)
{
while (a != -1)
{
somma=(somma*10)+a;
if (a>=0 && a<=9)
decimale=true;
cin>>a;
}
}
if (decimale==false)
cout<<"ERRORE";


if else (decimale==true && somma%3==0)
cout<<somma<<"SI";


else
cout<<somma<<"NO";


return 0;


}

Eduadie
21-05-2017, 13:02
Rivediti il costrutto if-else, non lo hai capito bene soprattutto come impostarlo.

Tus
21-05-2017, 14:54
Si si l'ho riscritto. Ora non mi da il problema del tappo -1, ma non funziona il cout ERRORE. Se inserisco una sequenza di numeri come 1 3 2 4 15 2 -1 invece di stampare solo ERRORE stampa ERRORE132415NO, cioe' legge tutto. Non capisco come dividere bene le sezioni per far si che funzioni nel modo giusto, mi sto scervellando. Ancora sono alle prime armi e non riesco a individuare l'errore. Riscrivo come ho pensato di cambiarlo, nel caso qualcuno potesse dirmi dove devo controllare meglio e riuscire ad aggiustarlo

int a, somma=0;
bool decimale=true;
cin>>a;

if (a==-1)
cout<<"VUOTO";


else
{
while (a != -1)
{
somma=(somma*10)+a;
if (a<0 || a>9)
decimale=false;
cin>>a;
}

if (decimale==false)
cout<<"ERRORE";


if (decimale==true && somma%3==0)
cout<<somma<<"SI";

else
cout<<somma<<"NO";

scimmiaparlante
21-05-2017, 23:36
Il programma stampa tutto perché dopo il primo controllo su decimale continua l'esecuzione, non entra nell'if successivo poichè errore è false e di conseguenza esegue il ramo else, dove vengono stampati somma e "NO".
Siccome lo scopo è invece quello di far eseguire solo una tra le tre istruzioni, devi usare "else if" sul secondo controllo: in tal modo l'else finale si riferirà a entrambi i controlli precedenti.
(di conseguenza il controllo decimale == true diventa superfluo)

http://www.edutecnica.it/informatica/if/if.htm

oregon
21-05-2017, 23:38
Tutta la discussione su iprogrammatori.it non ti aveva soddisfatto?

Tus
22-05-2017, 14:46
Evidentemente no oregon ;) Grazie mille scimmiaparlante, mi hai aiutata moltissimo a capire il punto in cui sbagliavo e soprattutto cosa, in modo chiaro e semplice, cosi' da potermi correggere.

oregon
22-05-2017, 16:26
Evidentemente no oregon ;) .

Beh, evidentemente non ti sei impegnata abbastanza

Loading