Fehler suche Armstrong

Status
Für weitere Antworten geschlossen.

Erzin24

Newbie
Registriert
Apr. 2016
Beiträge
2
Hey Leute ich muss ein Programm programieren welche alle Armstrongzahlen ausgibt.
Ich habe es auch schon gemacht nur ist da ein Fehler drinne, könnte mir jemand bei dem Fehler behilflich sein ?

Code:
int potenz(int a, int b){
int ergebnis = 1; 
for(int i=1;i<=b;i++){
    ergebnis=ergebnis*a;
}
return ergebnis;
}



void armstrong(){
for(int a=100;a<1000;a++){

int armstrong =0;
        for(int e = 1;1<10;e++){

            for(int z=0; z<10;z++){

                for(int d=0;d<10;d++){

            int armstrong = potenz(1,3)+potenz(z,3)+potenz(d,3);

            if(a==armstrong){

                printf("Die Zahl ist eine Armstrongzahl \n %d =potenz(e,3) + potenz(z,3) + potenz(d,3)",a);
            }
}
}
}
}
 
hab zwar gerade keine lust zu googlen was eine armstrong zahl ist, aber in zeile 21, potenz(1,3) muss das nicht potenz(e,3) sein, laut ausgabe
 
Ja danke, habe es eben auch bemerkt :) geht aber immernoch nicht -.-
 
Das klappt aus den folgenden Gründen nicht:

1. Die Anmerkung von Mikasa
2. Dir fehlt eine schließende Klammer unten
3. In der zweiten Schleife steht 1 < 10 aber es müsste heißen e<10

und selbst nach den Korrekturen: Das berechnet die Armstrong Zahl nicht.

Lies nochmal hier wie man darauf kommt https://de.wikipedia.org/wiki/Narzisstische_Zahl

Als Beispiel 153 = 1^3 + 5^3 + 3^3

Um bei deinem Code zu bleiben. Iteriere zunächst von mit a von 100 bis 999.
Dann musst du die Zahl, z.B. 153 in seine Teile zerlegen 1 5 3.
Dann die Teile einzeln potenzieren 1^3 , 5^3 und 3^3.
Zu guter letzt über die Teile summieren und mit deinem momentanen a vergleichen.

Was du nämlich machst ist Brute-Force alles einsetzen und gucken ob das gleich a ist. So berechnet man die Armstrongzahl aber nicht. Der Witz bei Armstrong ist doch, dass die Summanden genau so aussehen wie die Ausgangszahl und die Potenz die Stellenanzahl der Ausgangszahl ist.
 
Zuletzt bearbeitet von einem Moderator:
Erzin24 schrieb:
Hey Leute ich muss ein Programm programieren welche alle Armstrongzahlen ausgibt.
Ich habe es auch schon gemacht nur ist da ein Fehler drinne, könnte mir jemand bei dem Fehler behilflich sein ?

Dein Algorithmus ist, wie Kaltzifar schon korrekt erkannte, totaler Humbug. Zusätzlich gibt es jede Menge Programmierfehler. Allerdings kann man mit recht wenigen Umstellungen im Algorithmus Dein Programm zum Laufen kriegen:
Code:
#include <stdio.h>
#include <stdlib.h>

 size_t potenz(size_t a, size_t k)
{
 size_t ergebnis = a;
 for (size_t i=1; i<k; i++) ergebnis *= a;
 return ergebnis;
}

 void armstrong()
{
 char buf[32];
 size_t n;

 for (size_t t=0; t<10; t++) {
    for (size_t h=0; h<10; h++) {
       for (size_t z=0; z<10; z++) {
          for (size_t e=0; e<10; e++) {
             sprintf(buf, "%d%d%d%d", t, h, z, e);
             n = atol(buf);
             for (size_t k=1; k<5 && n>10; k++) {
                size_t a = potenz(e, k) + potenz(z, k) + potenz(h, k) + potenz(t, k);
                if (n == a) {
                   printf("Die Zahl %d ist eine Armstrongzahl => "
                          "potenz(%d,%d) + potenz(%d,%d) + "
                          "potenz(%d,%d) + potenz(%d,%d)\n",
                          n, t, k, h, k, z, k, e, k);
                }
             }
          }
       }
    }
 }
}
(Schön ist das nicht, aber es funktioniert.)

Vielleicht solltest Du erstmal mit einer einfachen Aufgabe anfangen?

/edit: die 1,000'er noch eingebaut.
 
Zuletzt bearbeitet:
blöderidiot schrieb:
Allerdings kann man mit recht wenigen Umstellungen im Algorithmus Dein Programm zum Laufen kriegen:
Du bist echt der Held des Tages. Man glaubt es nicht :/
 
Hausaufgaben jeglicher Art basieren darauf, in Eigenleistung zu erstellt zu werden.
Zudem ist Computerbase keine Hausaufgabenhilfe. Das ist auch in einem Sticky festgehalten.

Doch dieses Forum - wie auch alle anderen Bereiche des Forum Computerbase - ist keine Plattform für Hausaufgaben, Tests, Arbeiten, Prüfungen usw.

Weiteren Input muss der TE sich von woanders holen. Hier ist deshalb jetzt zu.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben