Quersumme so lange berechnen bis Eingabe von zahl 'o'



  • Hallo Leute,

    Ich habe heute eine Aufgabe bekommen. Ich habe sogar schon mal geschrieben, leider ist das Ergebnis nicht exakt. Was stimmt da nicht?

    Programmierung:
    Schreiben Sie ein Programm, das die Quersumme einer über die Tastatur eingegebenen nichtnegativen ganzen Zahl berechnet. Das Programm soll so lange Zahlen über die Tastatur anfordern und die Quersumme berechnen, bis der Nutzer eine 0 eingibt. Jede berechnete Quersumme soll auf den Bildschirm ausgegeben werden.

    Mein Vorschlag:

    #include <iostream>
    using namespace std;

    int main() {

    int z; int sum = 0;
    do{
    cout<<"Geben Sie ene Zahl ein: ";
    cin>>z;
    if (z>0){
    {
    sum += z % 10;
    z /= 10;
    }

    cout<<sum<<endl;
    }
    else
    cout<<"falsche Eingabe";

    }while (z !=0);

    return 0;
    }



  • int main()
    {
        int z;
        while(std::cin >> z)
        {
            int sum = 0;
            do sum += z % 10;
            while(z /= 10);
            std::cout << sum << std::endl;
        }
    }
    

    Ungetestet.


  • Administrator

    1. Deine Fehlerbeschreibung lässt sehr zu wünschen übrig. Das grenzt an "funktioniert nicht" und sowas ist keine Fehlerbeschreibung.
    2. Verwende bitte cpp-Tags.

    Zu deinem Code

    int main() {
    
      int z;
      int sum = 0;
    
      do {
    
        cout << "Geben Sie ene Zahl ein: ";
        cin >> z;                             // Man sollte die Eingabe prüfen.
                                              // Dies kann man mit if(!cin) machen.
                                              // Falls er dann in den if-Block springt,
                                              // wurde keine Zahl eingegeben.
                                              // Aber das darf man bei einer Hausaufgabe
                                              // wahrscheinlich ignorieren.
    
        if(z > 0) {
        // { diese geschweifte Klammer ist unnötig
          sum += z % 10;
          z /= 10;
        // } diese geschweifte Klammer ist unnötig
    
          // Hier liegt wohl einer deiner Hauptprobleme. Du rechnest z durch 10, bis z
          // 0 ist. Das heisst aber, dass deine Schleife immer nur einmal durchlaufen
          // wird, denn unten wird die Bedingung falsch sein.
          // Verwende eine temporäre Variable, statt z, oder nimm eine andere
          // Variable für die Schleifenbedingung und bevor du z veränderst, speicherst
          // du, ob die Schleife fortegesetzt werden soll.
    
          // Zudem setzt du sum nie auf 0 zurück. Dadurch hast du bei jedem weiteren
          // Schleifendurchlauf, noch die vorherige Quersumme in der Variable sum
          // stehen, wodurch natürlich die nachfolgenden Ergebnisse falsch sein
          // werden.
    
          cout << sum << endl; 
        } 
        else 
          cout << "falsche Eingabe"; 
    
      } while (z != 0); 
    
      return 0; 
    }
    

    Grüssli



  • Tausend mal danke für die schnelle Antwort.

    Die erste Antwort war schon klar. bis da war ich gewesen.
    @Dravere Leider stimmt meine Berechnung auch irgenwie nicht.

    Ist die Formel auch falsch ?

    Danke im Voraus


  • Administrator

    Ja, ich habe noch was vergessen hinzuschreiben, es steht aber bei Mr. Π.
    Du musst natürlich die Berechnung modulo 10 und durch 10 so lange machen, bis du durch die ganze Zahl durch bist. Mr. Π hat das eigentlich ganz gut gezeigt mit. Vielleicht kann man es noch ein wenig deutlich hinschreiben:

    do
    {
      sum += z % 10;
    }
    while(z /= 10);
    

    Grüssli



  • Tausend mal danke fuer eure Antwort... Hat mir viel geholfen...


Anmelden zum Antworten