WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Armstrongzahlen (http://www.wcm.at/forum/showthread.php?t=224700)

druno 10.11.2007 10:36

Armstrongzahlen
 
Hi soll dass in c programmieren und hab keine ahnung wie das geht. Wäre um tipps sehr dankbar

Eine Zahl mit n Ziffern in dezimaler Schreibweise heißt Arm-strong – Zahl, wenn sie gleich der Summe der n – ten Potenzen ihrer Ziffern ist. Beispiel: die Zahl 153 hat 3 Ziffern und es gilt:1³+5³+3³ .Schreiben Sie eine Funktion armstrong(n), die 1 zurückliefert, wenn die Ganzzahl n eine Armstrongzahl ist. Sonst wird 0 zurückgegeben. Erweitern Sie diese Funktion zur Berechnung beliebiger Armstrongzahlen größer als Null. Testen Sie diese Funktion im Hauptprogramm durch Ausgabe aller Arm-strongzahlen zwischen 1 und 100000.

itsme 10.11.2007 12:17

das ist simple:

beispiel in python-code, aber sicher verständlich. musst nur nach c übersetzen ;)


import string
import math

for zahl in range(1, 1000):
zahlstring = str(zahl)
zahllaenge = len(zahlstring)

ziffernsumme = 0
for ziffer in range(1, zahllaenge+1):
tmpziffer = int(zahlstring[ziffer-1])
ziffernsumme = ziffernsumme + pow(tmpziffer, zahllaenge)

if ziffernsumme == zahl:
print "Zahl %d ist Armstrong-Zahl" % zahl

druno 10.11.2007 12:27

danke für den tipp aber leider bin ich noch anfänger und sowas wie python code sagt mir leider nix.

zAPPEL 10.11.2007 12:39

Hirn anstrengen und die Hausübung selber machen :D :rolleyes: ;)

lg

druno 10.11.2007 12:42

probier ich ja schon seit 3 stunden aber irgendwie fällt mir nix ein und wenn das gehirn dann auch noch sehr klein ist dann is um so schwieriger

druno 10.11.2007 14:06

für bestimmte zahlen wie zum beispiel von 100 bis 999 oder 1000 bis 9999 könnte ich es ja programmieren mein problem liegt darin es zu verallgemeinern dass das programm die stellen von 1 bis n der zahl erkennt.

smoking gnu 10.11.2007 17:07

schnell mal übersetzt:

Code:

int main ()
{
    char eingabe[20];
    int zahllaenge, ziffernsumme=0;
   
    scanf("%s", eingabe);

    zahllaenge=strlen(eingabe);
    int i;
    for ( i=0; i<zahllaenge; i++){
        ziffernsumme+=(int) pow(eingabe[i]-48, zahllaenge);
    }
   
    printf("%d", ziffernsumme);
}


druno 12.11.2007 08:12

Danke für die kleine übersetzung aber jetzt hätt ich noch zwei fragen wo kommt die 20 her und die 48?

hewlett 12.11.2007 09:48

was ich echt nicht verstehe an dem ganzen:

du bekommst aufgaben die vom schwierigkeitsgrad sehr einfach gehalten sind und kannst damit überhaupt nichts anfangen!? Wenn euch euer Prof. solche Aufgaben gibt dann habt ihr ja die C-Grundlagen schon durch, also müsstest du das ja schon können (du kennst ja laut deiner Aussage nicht mal ein char array).

Wenn ich mich an meine HTL Zeit zurückerinnere dann sind wir da schon anders zur Sache gegangen.

Meines erachtens ist das Problem das viele Leute kein Algorithmisches Denken mehr haben und beim kleinsten Problem schon nicht mehr weiter wissen...

...

itsme 12.11.2007 10:00

mein leitspruch:

ich kann jedem affen beibringen, dass er auf einen knopf drückt, damit er eine banane bekommt - das heisst aber nicht, dass er intelligent ist. ;)


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag