Fakultät-Rechner



  • Hey Leute!
    Bin neu im Forum und auch neu im Programmieren mit C!

    Wollte mit C Fakultäten berechnen, aber irgendwo im Quelltext hab ich nen Fehler.
    Hier ist mein Quelltext:

    #include <stdio.h>
    
    int main(void)
    
    {
            //Deklaration der Variablen
            int fak, k, i;
    
            //Aufforderung
            printf("\nZu berechnende Zahl eingeben: ");
    
            //Einlesen der Zahl
            scanf("%d", &k);
    
            //RECHNUNG
            fak = k;
            for (i=1; k-i==1; i++)
            {
                    fak=fak*(k-i);
            }
    
            //Ausgabe der Zahl
            printf("%d! = %d\n", k, fak);
    
            return 0;
    
    }
    

    Zur Rechnung, wie ich mir das vorgestellt habe:
    fak bekommt den eingegebenen Wert, zum Beispiel k=5.
    Nun die Schleife:
    fak wird der Wert fak*(k-i) zugewiesen, was demnach 5 * (5-1) ist.
    Das heißt, jetzt ist fak=20.
    Danach wird i um eins erhöht.
    Nun wird fak der Wert fak*(k-2) zugewiesen, also 20 * (5-2).
    usw bis man bei fak = 120 * 1 ankommt.

    Wenn ich das Programm ausführe und eine Zahl eingebe, kommt immer raus, dass
    fak = k ist.. hab das Gefühl, dass meine Schleife nicht berechnet wurde..

    Irgendjemand ein Tipp?

    Danke und Grüße



  • Die for-Schleife wird solange ausgeführt, solange die Bedingung wahr ist.
    Bei dir steht da k-i == 1 . Das ist aber unwahr. Darum wird die Schleife erst gar nicht angefangen.

    Aber warum so kompliziert?

    fak = 1;
            for (i=1; i <= k; i++)
            {
                    fak = fak*i;
            }
    

    Dann kannst du dir noch Gedanken über den Wertebereich machen.

    Und in Zeile 7 definierst du die Variablen



  • Ah das heißt, ich müsste, wenn ichs auf meine komplizierte Weise mache, es so machen:

    //RECHNUNG
            fak = k;
            for (i=1; k-i>=1; i++)
            {
                    fak=fak*(k-i);
            }
    

    = statt ==, also Eintrittsbedingung statt Austrittsbedingung..
    naja ist die erste Schleife, die ich im Leben programmiere... 😉

    Zum Wertebereich: Es müssten ganze Zahlen >=0 sein, int sind aber auch negative Zahlen, meinst du das vielleicht?

    Danke für die schnelle Antwort übrigens!



  • ser_u schrieb:

    ...

    = statt ==, also Eintrittsbedingung statt Austrittsbedingung..
    naja ist die erste Schleife, die ich im Leben programmiere... 😉

    Ich würde Durchlaufbedingung sagen.

    ser_u schrieb:

    Zum Wertebereich: Es müssten ganze Zahlen >=0 sein, int sind aber auch negative Zahlen, meinst du das vielleicht?

    Ja.


Anmelden zum Antworten