mathematisches und programmiertechnisches Problem- Fakultät einer Zahl



  • Walli schrieb:

    Args, blöder Flüchtigkeitsfehler 🙄 . Habs rauseditiert. Die Rekursive sollte trotzdem stimmen.

    Nein. Schon wieder ein Flüchtigkeitsfehler 😃 😉



  • warum so kompiliert? Man muss doch nur jeweils den nächsten wert draufaddieren:

    int zahl = 5;
    int counter = 1;
    int buffer = 0;
    
    while (counter <= zahl)
    {
    	buffer+=counter;
    	counter++;
    }
    


  • fluxy schrieb:

    warum so kompiliert? Man muss doch nur jeweils den nächsten wert draufaddieren:

    int zahl = 5;
    int counter = 1;
    int buffer = 0;
    
    while (counter <= zahl)
    {
    	buffer+=counter;
    	counter++;
    }
    

    Quark. camper hat bereits die rek. und it. Version gepostet.



  • terraner schrieb:

    ich wollte ihm bloß noch einmal eine andere Möglichkeit zeigen, die weder angesprochen noch explizit gezeigt wurde.

    Und das zurecht. Immerhin hat der Threadersteller keinen Eingabewert, der zur Compilezeit evaluiert werden kann.
    Ausserdem glaube ich nicht, dass jemand, der "iostream.h" benutzt und 'void main' schreibt, schon für Template Meta Programming bereit ist. Trotzdem danke, dass du uns an deinem Wissen teilhaben lassen hast. 🙂 🙄



  • groovemaster schrieb:

    Und das zurecht. Immerhin hat der Threadersteller keinen Eingabewert, der zur Compilezeit evaluiert werden kann.

    upps... *blind*

    Ausserdem glaube ich nicht, dass jemand, der "iostream.h" benutzt und 'void main' schreibt, schon für Template Meta Programming bereit ist. Trotzdem danke, dass du uns an deinem Wissen teilhaben lassen hast. 🙂 🙄

    falls mal jemand mal ein ähnliches problem hat und diesen thread sucht, möchte ich eben, dass er diesen source-code inklusive meinem in stein dazugemeißelten namen sieht... 😃

    mfg



  • also wir haben uns mit der Fakultät auch in der schule beschäftigt, leider klappt das programm nur bis 12! Danach, also ab 13! sind die Werte fehlerhaft; unser Lehrer meinte irgendwie, das für long int nur 4 Byte reserviert sind und das deshalb nich klappt. Wie kann man nun also größere Fakultäten berechnen???



  • Du kannst als Datentyp double nehmen oder naja ... eigener Datentyp ... das wars dann :p



  • je nach Plattform ginge auch noch unsigned long long. Mit dem vc7.1 oder dem gcc bekommt man so einen 64Bit unsigned. Der reicht auch ganz schön weit.

    MfG Jester



  • vielleicht sollte man erwähnen, daß man in diesem Falle eine iterative Lösung bevorzugen sollte. ist klar, oder?!



  • Könnte mir das jemand aufschreiben, wie man solch einen neuen Datentyp erstellt?... natürlich nur, wenn es nicht allzu aufwendig ist



  • Das ist leider ziemlich aufwendig und auch ziemlich lahm.

    MfG Jester



  • p-chan schrieb:

    also wir haben uns mit der Fakultät auch in der schule beschäftigt, leider klappt das programm nur bis 12! Danach, also ab 13! sind die Werte fehlerhaft; unser Lehrer meinte irgendwie, das für long int nur 4 Byte reserviert sind und das deshalb nich klappt. Wie kann man nun also größere Fakultäten berechnen???

    Hmmm... kann ich irgendwie nicht nachvollziehen.

    Denn: 4 Bytes ergeben immerhin 2^32 Möglichkeiten.
    1 Byte = 8 Bits und ein Bit ist die kleinste Informationseinheit.

    Deshalb 32, denn 8*4 = 32 😉

    Nun zu den 2^32 das ergibt = 4294967296, dieser Zahlenbereich wäre unsigned.
    (d.h. ohne Negative Zahlen.)

    Bei signed (Vorzeichenbehaftet, also mit negativen Zahlen)

    ergibt das einen Wertebereich von:

    -2147483648

    bis

    2147483647

    Und dann möchte ich nochmal erklärt haben, wieso die 13 den Wertebereich
    sprengen soll? 😕 Das ralle ich net wirklich.. 🙂

    Theoretisch wäre nach dieser Werteangabe mit negativen Zahlen immerhin die Fakultät bis zu 2147483647 möglich.

    Von wegen geringer Wertebereich...

    Searence

    edit: Fehler beseitigt, ich weiss ich bin pingelig 😉



  • weil 13! = 6227020800 und ist mehr als 2^32.



  • 12! = 479001600 <-- Im Wertebereich von long int
    13! = 6227020800 <-- außerhalb des Wertebereichs von long int

    so wars gemeint... die 13 als Zahl liegt natürlich im Wertebereich, unsigned spielt übrigens keine Rolle, da die Fakultät stets positiv ist



  • Toll Jester, man sieht du kennst dich aus! 👍

    Jetzt die Quizfrage, was gibt das Programm als 13! wenn mans trotzdem eingibt?

    bitte nicht compilieren sondern so überlegen 😉


  • Mod

    wenn es nicht um das exakte ergebnis bis in die letzte stelle geht, kann auch das hier von interesse sein:

    http://www.c-plusplus.net/forum/viewtopic.php?t=97352

    Toll Jester, man sieht du kennst dich aus! 👍

    Jetzt die Quizfrage, was gibt das Programm als 13! wenn mans trotzdem eingibt?

    bitte nicht compilieren sondern so überlegen 😉

    wie schön, dass der standard garantien für unsigned operationen gibt 😉



  • Jester schrieb:

    weil 13! = 6227020800 und ist mehr als 2^32.

    Dann habe ich das falsch verstanden, sorry 🙂

    Dann ergibt es ja auch eine Logik, dachte irgendwie an einen IntegerWert von 13.
    Wo habe ich bloss meinen Kopf gehabt? 😕

    Searence


Anmelden zum Antworten