Erledigt Danke n stellige Zahl einlesen mit schleife Quersumme bilden



  • Hallo
    Schreiben Sie ein Programm, das eine dreistellige Zahl einliest
    und mit Hilfe der Ziffernsumme überprüft, ob die eingegebene Zahl durch 3 teilbar ist.

    das ist die genaue Angabe,
    lg
    markus



  • markuswenczel schrieb:

    Idee?

    Hab ich. Du auch? du hast schon alles genannt, was du benötigst. Versuchs mal.



  • int Quersumme(int val)
    {
      int rval = val % 10;
      while (val /= 10)
        rval += val % 10;
      return rval;
    }
    


  • int C(int i){return i?i%10+C(i/10):i;}
    

    😉



  • Michael E. schrieb:

    markuswenczel schrieb:

    Idee?

    Hab ich. Du auch? du hast schon alles genannt, was du benötigst. Versuchs mal.

    habs versucht aber irgendwie komm ich nicht darauf
    wie kann ich mittels Schleife überprüfen ob die Zahl
    n stellig ist in meinem Beispiel 3 Stellen hat

    die Quersumme ist mit Modulo und + Operator ok

    aber die Überprüfung auf die Stellenanzahl check ich nicht
    🙂


  • Mod

    Dobi schrieb:

    int C(int i){return i?i%10+C(i/10):i;}
    

    😉

    Jetzt musst du nur noch den Funktionskopf im alten C-Stil schreiben und alle Sonderzeichen durch Trigraphsequenzen ersetzen, dann ist es perfekt.


  • Mod

    markuswenczel schrieb:

    habs versucht aber irgendwie komm ich nicht darauf
    wie kann ich mittels Schleife überprüfen ob die Zahl
    n stellig ist in meinem Beispiel 3 Stellen hat

    [...]

    aber die Überprüfung auf die Stellenanzahl check ich nicht

    Ich glaube mit einer Schleife bist du auf dem falschen Weg. Wodurch zeichnen sich denn dreistellige Zahlen aus? Sie liegen zwischen 100 und 999! Formulier das mal allgemein für alle möglichen Stellenzahlen (das kann dann wieder eine Schleife sein) oder schreib es direkt hin für alle Möglichkeiten (so viele Stellen kann ein int nämlich in der Regel nicht aufnehmen, ein paar Zeilen Copy&Paste reichen für alle Möglichkeiten).

    edit: Oder wenn es mit Schleife sein soll: Dreistellige Zahlen kann man genau zwei mal durch 10 teilen und es kommt etwas zwischen 1 und 9 heraus.



  • markuswenczel schrieb:

    habs versucht aber irgendwie komm ich nicht darauf
    wie kann ich mittels Schleife überprüfen ob die Zahl

    Evtl etwas tricky, aber du könntest zb dein int in einen string umwandeln, entweder über einen vektor oder einfacher, über stringstreams und dann die größe des strings ermitteln, mal die schleife außen vor gelassen 😉


  • Mod

    Sorex schrieb:

    Evtl etwas tricky, aber du könntest zb dein int in einen string umwandeln, entweder über einen vektor oder einfacher, über stringstreams und dann die größe des strings ermitteln, mal die schleife außen vor gelassen 😉

    http://de.wikipedia.org/wiki/Rube-Goldberg-Maschine



  • SeppJ schrieb:

    Dobi schrieb:

    int C(int i){return i?i%10+C(i/10):i;}
    

    😉

    Jetzt musst du nur noch den Funktionskopf im alten C-Stil schreiben und alle Sonderzeichen durch Trigraphsequenzen ersetzen, dann ist es perfekt.

    Ich find Digraphen schöner. Smileys im Code sind immer gut, auch wenn sie beim Golfen nicht helfen. 😉
    Den alten C-Stil akzeptiert mein g++ leider nicht. 😕



  • SeppJ schrieb:

    Sorex schrieb:

    Evtl etwas tricky, aber du könntest zb dein int in einen string umwandeln, entweder über einen vektor oder einfacher, über stringstreams und dann die größe des strings ermitteln, mal die schleife außen vor gelassen 😉

    http://de.wikipedia.org/wiki/Rube-Goldberg-Maschine

    Ok, da ich gerade gesehen habe, dass es sich immer um eine 3-stellige Zahl handelt, muss ich dir an dem Punkt recht geben 😃


  • Mod

    Dobi schrieb:

    Den alten C-Stil akzeptiert mein g++ leider nicht. 😕

    Ist in C++ auch verboten, aber deine Funktion könnte ja genausogut auch C sein. Könntest du mit extern C einbinden.



  • Was ist der "alte C Stil"?


  • Mod

    314159265358979 schrieb:

    Was ist der "alte C Stil"?

    Google: old c style function declaration

    Kommt übrigens besonders gut mit Default-int (der gilt nicht nur für den Rückgabetypen, sondern auch für die Parameter), um unlesbare Programme zu schreiben.



  • C(i)??<return i?i%10+C(i/10):i;??>
    

    Geht das noch "besser"?

    Edit: Sorry, ist OT und lässt sich auch gar nicht mit einem C++ Compiler kompilieren - dennoch würds mich irgendwie interessieren 😃


  • Mod

    Statt i würde ich _ als Variablenname verwenden. Und die Funktion könnte man __ nennen. Und vielleicht an "geeigneten" Stellen umbrechen:

    __(
    _)??<
    return
    _?_%10+
    __(_/10
    ):_;
    ??>
    


  • lol 😃 👍



  • #include <iostream>
    using namespace std;
    
    int main(void){
    cout<<"Dreistellige Zahl eingeben:"<<endl;
    int h=100,k=0;
    cin>>h;
    
    for(int l=10;l<10000;l*=10)
    k+=(h%l-k)/(l/10);
    
    k%3==0?
    cout<<"Die Zahl ist durch drei teilbar."<<endl:
    cout<<"Die Zahl ist kein Vielfaches von drei..."<<endl;
    
    return 0;
    }
    

    Passt perfekt auf'n Titel.



  • SeppJ schrieb:

    __(
    _)??<
    return
    _?_%10+
    __(_/10
    ):_;
    ??>
    
    #define oO return
    


  • Haha, sehr schön, SeppJ. Hast du mal beim ioccc mitgemacht?

    Edit: Mist, im Topic steht ja was von "mit Schleife". Man könnte aus dem code bestimmt auch ascii art machen, die wie ne Schleife an einem Geschenk aussieht.


Log in to reply