Armstrong-Zahlen



  • Hallo Leute (:
    Bin neu hier und ich weiß nicht, ob das das richtige Forum ist und ich konnte bisher nichts richtiges im Internet zu meinen Problem finden, deswegen wollte ich mich mal hier melden, ob mir wer helfen kann.

    Ich muss ein Programm schreiben, das alle Armstrong Zahlen von 0-1000 ausgibt.
    Ich hab schon die Prüfung und alles, aber irgendwie stimmt da die Ausgabe nicht.

    Arrays hab ich auch schon versucht, aber das kann ich noch nicht so gut 😞
    Ich hoffe jemand von euch kann mir helfen 🙂

    Mein bisheriger Code:

    #include <iostream>
    #include <math.h>
    
    using namespace std;
    
    int Test_Armstrong(int zahl){
        int rest, summe=0, n, temp;
    
        temp = zahl;
    
         while (temp != 0){
            n++;
            temp=temp/10;
        }
    
        temp = zahl;
    
        while (temp !=0){
            rest = temp%10;
            summe = summe + pow(rest,n);
            temp = temp/10;
        }
    
        if (summe == zahl)
            return 1;
        else
            return 0;
    }
    
    int main()
    {
        int i;
    
        for (i=0; i<=1000; i++){
            if (Test_Armstrong(i) == 1)
                cout << i << endl;
        }
    
        return 0;
    }
    

    Über Verbesserungsvorschläge würde ich mich auch freuen 😉



  • Lausige Problembeschreibung, aber vielleicht hilft n zu initialisieren.



  • Was stimmt denn an der Ausgabe nicht?
    "irgendwie stimmt da die Ausgabe nicht." ist leider eine recht wenig hilfreiche Problembeschreibung 😉



  • wie gesagt, bin neu hier, aber ich werd das nächste mal versuchen, ausführlicher zu werden 😉

    ich habe jetzt n = 0 in der Funktion initialisiert und ich bekomme jetzt alle Zahlen bis auf die 153, aber das ist auch eine Armstrong-Zahl.
    Wie kann das denn sein? Da sollte doch die if-Bedingung auch erfüllt sein?



  • Davor war mein Problem, dass ich als Ausgabe nur eine 0 und eine 1 hatte, obwohl die Schelife von 0 bis 1000 läuft. Weiß nicht, wo da der Fehler war.
    Ich weiß nicht wie ich das anders sagen könnte 😕



  • Wenn du mit dem Debugger vertraut bist, dann debug da mal rein und schau dir Schritt für Schritt an was das Programm bei 153 macht.
    Ansonsten mach halt bei 153 für jeden Schritt eine Ausgabe der wichtigen Werte.

    Edit:
    "dass ich als Ausgabe nur eine 0 und eine 1 hatte" ist eine hilfreiche Fehlerbeschreibung 😉



  • codie schrieb:

    ich habe jetzt n = 0 in der Funktion initialisiert und ich bekomme jetzt alle Zahlen bis auf die 153, aber das ist auch eine Armstrong-Zahl.
    Wie kann das denn sein?

    Weiß ich nicht, bei mir kommt auch 153: http://ideone.com/Mcd5gO

    Davor war mein Problem, dass ich als Ausgabe nur eine 0 und eine 1 hatte, obwohl die Schelife von 0 bis 1000 läuft. Weiß nicht, wo da der Fehler war.

    Wohl in der Nicht-Initialisierung. Mach Compiler-Warnungen an. 💡



  • Danke für den Hinweis 😉
    Könnte das denn am Compiler liegen?

    Btw: ich arbeite mit Code::Blocks



  • codie schrieb:

    Danke für den Hinweis 😉
    Könnte das denn am Compiler liegen?

    Btw: ich arbeite mit Code::Blocks

    Ich denke schon, dass alle brauchbaren compiler Warnungen ausgeben 🙂
    Unter CodeBlocks: settings->compiler-> bei -Wall ein Haken setzen


Anmelden zum Antworten