Zerlegung einer Zahl in ihre Ziffern



  • Hallo Leut, bin dabei C++ zu lernen. Jetzt habe ich ne Aufgabe aus dem Buch. Kann mir jemand diese zu Lösen? Vielen Dank im Voraus.

    Schreiben Sie ein Programm, das eine fünfstellige ganze Zahl
    mit cin >> zahl; einliest, die Zahl in ihre einzelnen Ziffern
    zerlegt und die einzelnen Ziffern in jeweils einer neuen Zeile
    auf dem Bildschirm ausgibt.

    Hinweis: Benutzen Sie Divisions- und Modulo-Operator.
    Erweitern Sie Ihr Programm so, dass eine zweite Zahl
    eingelesen und zerlegt werden kann. Wie verhält sich Ihr
    Programm, wenn sich versehentlich ein Buchstabe in die erste
    Eingabezahl einschleicht? Untersuchen Sie das
    Programmverhalten mit dem Debugger möglichst genau und halten Sie Ihre Beobachtungen in einem C++
    Kommentar fest.



  • Ich finde der Hinweis sagt doch schon sehr viel.
    Wie wärs, wenn du uns mal deine bisherigen Ergebnisse präsentierst und dann deine Probleme genau eingrenzt (es wird ja nicht am Schreiben eines Kommentars scheitern).
    Es bringt dir schließlich nichts, wenn dir jemand das fertige Programm postet.

    Gruß
    Don06



  • cin>>zahl;
    cout<<zahl/10000<<'\n';//erste ziffer
    cout<<zahl/1000%10<<'\n';//zweite ziffer



  • Hallo, vielen dank. Also meine Idee war(Beispiel):
    42339 / (10^4) = 4 42339 % (10^4) = 2339
    2339 / (10^3) = 2 2339 % (10^3) = 339
    339 / (10^2) = 3 42339 % (10^2) = 39
    39 / (10) = 3 42339 % (10) = 9.
    Ich wusste einfach nicht wie man dies in C++ code einbindet.
    # include <iostream>
    using namespace std;

    int main ()

    {
    int Zahl;

    cout << "Bitte eine fuenfstellige ganze Zahl eingeben:";
    cin >> Zahl;

    cout<<Zahl/10000<<'\n'; //erste ziffer
    cout<<Zahl/1000%10<<'\n'; //zweite ziffer
    cout<<Zahl/100%10<<'\n'; //dritte ziffer
    cout<<Zahl/10%10<<'\n'; //vierte ziffer
    cout<<Zahl/1%10<<'\n'; // fünfte ziffer

    }

    Nun habe ich ein problem mit Buchstaben.

    # include <iostream>
    using namespace std;

    int main ()

    {
    int Zahl;

    cout << "Bitte eine fuenfstellige ganze Zahl eingeben:";
    cin >> Zahl;

    if(Zahl <='A' ||Zahl <='a')
    {
    cout << "Bitte eine fuenfstellige ganze Zahl eingeben:";
    cin >> Zahl;
    }

    else
    cout<<Zahl/10000<<'\n'; //erste ziffer
    cout<<Zahl/1000%10<<'\n'; //zweite ziffer
    cout<<Zahl/100%10<<'\n'; //dritte ziffer
    cout<<Zahl/10%10<<'\n'; //vierte ziffer
    cout<<Zahl/1%10<<'\n'; // fünfte ziffer

    if wird irgend wie ignoriert... beim Buchstabeneingabe wird das programm terminiert..



  • Schau dir mal die ASCII-Tabelle an.

    kleiner Denkanstoß:

    while ('A' <= zahl && zahl <= 'Z')
    

    Für kleine Buchstaben musst es jetzt aber selber machen.

    Gruß
    Don06



  • Hi, ich würde es viel einfacher machen !!!

    #include <iostream.h>
    #include <string.h>
    
    using namespace std;
    
    int main(void)
    {
       int eingabe;
       char ascii[100];
    
       cout << "Bitte eine 5stellige Zahl : ";
       cin >> eingabe;
    
       sprintf(ascii, "%g" ,(double) eingabe) ;
    
       cout << "1. Zeichen : " << ascii[0];
       cout << "2. Zeichen : " << ascii[1];
       cout << "3. Zeichen : " << ascii[2];
       cout << "4. Zeichen : " << ascii[3];
       cout << "5. Zeichen : " << ascii[4];
    
       return 0;
    }
    

    Ob ein Buchstabe drin is oder net kannste ja wie lösen wie Don06 😉

    Gruß Chris



  • Hallo, Chris danke für deine Hilfe. Mit arrays kann ich leider noch nicht anfangen. Der aufgabe nach muss ich die Modulo- und divisionsoperatoren benutzen. Danke.
    Gruß, Vitaly.



  • heute wurde hier schon mal fast dieselbe frage gestellt:
    scroll mar runter zum thread
    "nur 4stellige Integerzahlen zwischen 1 und 6 zulassen, wie?"
    oder gug hier
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-178314.html
    schau dir die beispiele mal genau an, lässt sich bestimmt einiges wiederverwerten... wenn du den code verstanden hast, wird es dir nichts ausmachen, ihn für deine problemstellung anzupassen.

    schau dir ausserdem in der doku die funktionen "isdigit" und "iswdigit" an, da kannst du direkt feststellen, ob die eingabe nur aus zahlen besteht oder nicht.

    good luck have fun.



  • mit modulo 10 letzte zahl abtrennen. erst modulo anwenden dann ist es auch egal wieviel stellen die zahl hat.

    1234 % 10 ergibt 4 , das ergebnis (speichern-ausgeben- was du auch damit vorhast) und abziehen von 1234 ergibt 1230, dann durch 10 teilen
    1230 / 10 ergibt 123
    123 % 10 = 3 ... 123 - 3 = 120 ... usw.

    das ganze iterativ (schleife), oder rekursive funktion einsetzen mit abbruchbedingung wenn null.

    zahlen in anderen systemen, also andere basiszahl, meintewegen binär mit basis 2 sind analog zu rechnen. % 2 und / 2



  • die aufgabenstellung lautet aber nur, in ein kommentar zu schreiben, was passiert, wenn ein buchstabe eingegeben wird - und dient auch irgendwie dem vertrautmachen mit dem debugger.

    zu prüfen, ob ein buchstabe eingegeben wurde oder nicht ist nicht gefragt.

    und den kommentar von Foxx90 vergisst du am besten ganz schnell wieder 😉



  • Foxx90 schrieb:

    sprintf(ascii, "%g" ,(double) eingabe) ;
    

    Hat es einen bestimmten Grund, daß du das als double formatierst? sprintf() kann auch int's direkt ausgeben 🙂



  • #include <iostream>
    using namespace std;
    
    void print_digits (long v)
    {
        long z;
        if (z = v/10)
            print_digits (z);
        cout << "ziffer: ";
        putchar ('0' + v-z*10);
        cout << endl;
    }
    
    int main()
    {
       long eingabe;
    
       cout << "Bitte eine 5stellige Zahl : ";
       cin >> eingabe;
    
       print_digits (eingabe); 
    }
    

    🙂



  • ne hat keinen bestimmten grund, so ist aber das programm auch für komma zahlen geeignet... !

    sonst :

    sprintf(char*, "%i" , integer);
    

Anmelden zum Antworten