[C++] Cifre decimali

di Anonimizzato21559 il
20 risposte
Ciao a tutti, e' il primo post che scrivo insieme al il mio primo problema. Devo scrivere un programma che, letta da input una sequenza di interi terminata da -1, controlli che siano tutte cifre decimali (0-9), calcoli il numero che si ottiene giustapponendo le cifre, e verifichi se il numero
ottenuto è divisibile per 3. Il programma dovrebbe, ad esempio, stampare solo la stringa VUOTO quando il primo numero inserito e' -1, invece esegue anche i punti successivi stampando anche altro. Potreste dirmi in quale punto sbaglio? Non riesco proprio ad uscirne. Grazie mille!

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

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

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

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

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

   else
    cout<<somma<<"NO";

    return 0;
  }
  

20 Risposte

  • Dicci cosa ti stampa dopo VUOTO
  • Dopo che visualizzi VUOTO esiste altro codice che viene eseguito, mi pare normale che succeda quello che dici.
  • In pratica stampa VUOTO0NO, esegue tutti i casi. Invece dovrebbe eseguire i casi in modo tale che se uno dei valori inseriti da input non è una cifra decimale, deve essere stampata esclusivamente la stringa ERRORE, senza endl, né spaziature. Se la sequenza in input è vuota, deve stampare esclusivamente la stringa VUOTO.
    Se i valori inseriti sono tutte cifre decimali, deve essere inviato in stampa il numero che si ottiene giustapponendo 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 stampare il numero che si ottiene seguito da NO.
  • In pratica ... hai detto nuovamente cosa deve fare il programma ma non hai letto bene la mia risposta
  • Si l'ho letta, ma mi servirebbe una spiegazione se possibile, dato che sono alle prime armi. Mi hai detto che fa cosi' perche' esiste un altro codice che viene eseguito, ma allora come posso fare per far si che -1 faccia da tappo e quando lo inserisco come primo numero esca SOLO la scritta vuoto?
  • Hai scritto tu quel codice? Hai inserito tu la if che controlla il valore -1 ?

    Tutto il resto del codice dopo questa if deve stare in una else così da non essere eseguita se hai inserito il -1
  • Si ho scritto tutto io. Anche se metto else non funziona come dovrebbe e continua a stampare vuoto0no, per questo ho deciso di provare a chiedere aiuto qui. Non riesco a capire se e' completamente sbagliato oppure e' un preciso punto che va modificato.
  • Magari mostra come hai usato quella else ... Ti ho detto che TUTTO il resto del codice va nella else ma se non mostri cosa hai scritto...
  • Ho provato a riscriverlo cosi'
    
    #include <iostream>
    using namespace std;
    int main ()
    {
      int a, somma=0;
      bool decimale=false;
      cin>>a;
    
      if (a == -1)
      cout<<"VUOTO";
    
      else 
      {
        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;
    }
    
  • E così ti scrive solo VUOTO e basta come volevi nel caso di -1, giusto?
  • No ecco perche' sto uscendo pazza ahahahahah
  • Mi scuso anche se sto facendo perdere tempo, ma proprio non riesco a capire cosa devo correggere.
  • Con l'ultimo codice cosa succede? Sicura di avere ricompilato?
  • Si si, sicuro. Se inserisco come primo numero -1 continua ad uscire VUOTO0NO. Comunque anche il decimale adesso non funziona bene perche' se inserisco una serie di numeri come 4 5 3 15 3 -1, dovrebbe stampare il NO perche' c'e' il 15. Invece stampa 453153 SI
Devi accedere o registrarti per scrivere nel forum
20 risposte