Lottoproblem



  • Guten Abend,
    wir sollten zuerst ein Pogramm entwerfen, dass die Fakultät einer Zahl wiedergibt und dann eines, dass den Binomialkoeffizienten ausrechnet. Im letzten Schritt sollten wir beides zusammenfassen zum modifizierten Lottoproblem. Die ersten zwei Pogramme laufen, allerdings bekomme ich bei der Kombination beider Pogramme die Windows Meldung, dass die .exe nicht mehr funktioniert.

    Unsere Definition:(nk)k!\begin{pmatrix} n \\ k \end{pmatrix} k!

    Mein Code:

    #include <stdio.h>
    #include <stdlib.h>
    
    int binomial(int n, int k)
    {
        if ( k ==0 )
            return  1;
        if (k==1)
            return n;
        if (n>k)
            return ((n-k+1)* binomial(n, k-1)/k);
    
    }
    
    int fakultaet(int n)
    {
        if ( n == 1 )
            return  1;
        else
            return  n * fakultaet(n-1);             //ruft sich selbst immer wieder auf bis n= 1 ist.
    }
    
    int main ()
    {
        int oben;
        int unten;
        double ergebnis = 1;
    
        printf("Lottoproblem \n");
        printf("Geben sie eine ganze Zahl n ein: \n");
        scanf("%d", oben);
        printf("Geben sie eine ganze Zahl k ein: \n");
        scanf("%d", unten);
    
        ergebnis = (fakultaet(unten) * binomial(oben,unten));
    
        printf("Das Ergebnis lautet: %lf", ergebnis);
    }
    

    Sieht jemand das Problem, ich bin anscheinend blind.
    Danke schon mal im Voraus 🙂



  • Moin!
    Auf jeden Fall die Warnungen Deines Compilers aktivieren!



  • Das Pogramm kompelliert allerdings stürzt es immer ab ^^



  • Aywin schrieb:

    Das Pogramm kompelliert allerdings stürzt es immer ab ^^

    Willst Du jetzt argumentieren, oder Deinen Bug finden?

    Aywin schrieb:

    Sieht jemand das Problem, ich bin anscheinend blind.

    Ja: Dein Compiler!



  • Ok es gibt mir folgende Warnungen aus:

    C:\Users\Nena\Documents\Informatik Studium\ADiP\Übungen\Übung 4\Aufgabe 2c.c||In function 'main':|
    C:\Users\Nena\Documents\Informatik Studium\ADiP\Übungen\Übung 4\Aufgabe 2c.c|31|warning: format '%d' expects argument of type 'int *', but argument 2 has type 'int' [-Wformat]|
    C:\Users\Nena\Documents\Informatik Studium\ADiP\Übungen\Übung 4\Aufgabe 2c.c|33|warning: format '%d' expects argument of type 'int *', but argument 2 has type 'int' [-Wformat]|
    C:\Users\Nena\Documents\Informatik Studium\ADiP\Übungen\Übung 4\Aufgabe 2c.c|39|warning: control reaches end of non-void function [-Wreturn-type]|
    C:\Users\Nena\Documents\Informatik Studium\ADiP\Übungen\Übung 4\Aufgabe 2c.c||In function 'binomial':|
    C:\Users\Nena\Documents\Informatik Studium\ADiP\Übungen\Übung 4\Aufgabe 2c.c|13|warning: control reaches end of non-void function [-Wreturn-type]|
    C:\Users\Nena\Documents\Informatik Studium\ADiP\Übungen\Übung 4\Aufgabe 2c.c||In function 'main':|
    C:\Users\Nena\Documents\Informatik Studium\ADiP\Übungen\Übung 4\Aufgabe 2c.c|31|warning: 'oben' is used uninitialized in this function [-Wuninitialized]|
    C:\Users\Nena\Documents\Informatik Studium\ADiP\Übungen\Übung 4\Aufgabe 2c.c|33|warning: 'unten' is used uninitialized in this function [-Wuninitialized]|
    ||=== Build finished: 0 error(s), 6 warning(s) (0 minute(s), 0 second(s)) ===|



  • ohja man sollte natürlich ein "&" vor die zu speichernde Variabel setzen.



  • Aywin schrieb:

    ohja man sollte natürlich ein "&" vor die zu speichernde Variabel setzen.

    Ja. Das ist ja ein pointer auf die Speicherstelle, wo scanf() den eingelesenen Wert speichert.
    Üblerweise ist ein Zeiger aber auch nur eine Zahl. Deswegen kompiliert Deine Ursprungsversion.
    Allerdings wird dann in Speicherbereiche geschrieben, die Dein Programm nix angehen. Daraufhin wird Dein Programm beendet.

    Jetzt sollte es eigentlich tun.

    Evtl. baust Du noch einen else Zweig in binomial() ein.


Log in to reply