Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [C++] Cifre decimali

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2017
    Messaggi
    8

    [C++] Cifre decimali

    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;


    }

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Rivediti il costrutto if-else, non lo hai capito bene soprattutto come impostarlo.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2017
    Messaggi
    8
    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";

  4. #4
    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

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Tutta la discussione su iprogrammatori.it non ti aveva soddisfatto?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2017
    Messaggi
    8
    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.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Quote Originariamente inviata da Tus Visualizza il messaggio
    Evidentemente no oregon .
    Beh, evidentemente non ti sei impegnata abbastanza
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.