Hilfe!!! Geltungsbereiche und Funktionen



  • Hallo; liebe Leute!!!

    Ich bin ein ziemlicher Anfänger bei C++ und benötige dringend Hilfe. Mein Programm funktioniert zwar, aber liefert das gewünschte Ergebnis nicht. Könnte mir jemand kurz unter die Arme greifen??

    Danke!

    Hier ist die Aufgabenstellung und mein Programm (sie liefert 0 als Ergebnis 😞 )
    Aufgabe 5.1
    Schreiben Sie eine Funktion int Binomial(int n, int k), die den Binomialkoeffizienten nach der Formel

    berechnet. Verwenden Sie zur Berechnung der Fakultät, die aus der Vorlesung bekannte Funktion.
    (erlaubt: .C,.cc,*.cpp)

    #include<iostream>
    using namespace std;
    #include<cmath>

    int biominal(int n, int k){
    int a = (n*(n-1));
    int b = (k*(k-1));
    int rechnung;
    return rechnung = (a/(b*(n-k)));
    }

    int main() {

    int n;
    int k;
    cout << "Bitte geben Sie 2 Zahlen fuer die Berechnung ein: " << endl;
    cin >> n;
    cin >> k;

    int ergebnis;
    ergebnis=biominal(k,n);
    cout << ergebnis << endl;

    return 0;
    }


  • Mod

    Da ist nichts mit Gültigkeitsbereichen oder Funktionen falsch, deine Formel stimmt einfach nicht.



  • Wo wird die Fakultät berechnet?

    return rechnung = (a/(b*(n-k)));
    

    Wozu benötigst du rechnung?
    Ist die Reihenfolge von n und k beliebig?



  • miss_922 schrieb:

    Mein Programm funktioniert zwar, aber liefert das gewünschte Ergebnis nicht.

    Was denn nun?
    - Es funktioniert, dann rechnet es auch richtig.
    - Es rechnet nicht richtig, dann funktioniert es auch nicht richtig.

    Nur weil der Compiler das Programm ohne Fehler und Warnungen übersetzt, ist es noch lange nicht richtig. (sieh Antwort von SeppJ)

    Du hast die Aufgabenstellung nicht richtig gelesen:

    Aufgabe schrieb:

    ... Binomial(int n, int k), ...
    Verwenden Sie zur Berechnung der Fakultät ...

    Wo hast du letztere versteckt?

    Den Aufruf der Funktion musst du auch richtig machen.



  • Ja, ich habe die Reihenfolge als beliebig angenommen, da sie in der Angabe nicht angegeben ist. Die Fakultät habe ich in der Variable a berechnet.

    Ich bin ratlos 😞



  • miss992 schrieb:

    Die Fakultät habe ich in der Variable a berechnet.

    Nein, hast Du nicht.



  • miss992 schrieb:

    Ja, ich habe die Reihenfolge als beliebig angenommen,

    Ist sie selten. Beispiele: Subtraktion, Division

    miss992 schrieb:

    da sie in der Angabe nicht angegeben ist.

    😕

    miss992 schrieb:

    Die Fakultät habe ich in der Variable a berechnet.

    Du hast wohl bei *n! = n (n-1)! das rechte ! übersehen.
    Aber du hast ja schon eine fertige Funktion dafür.

    Unterricht baut aufeinander auf. Es wird als bekannt voraus gesetzt, was in den vorherigen Vorleseungen/Stunden (und auch Jahren), sowie im Parallelunterricht der anderen Fächer durchgenommen wurde.
    Also besser aufpassen.



  • Ok, danke!! Jetzt verstehe ich wo das Problem liegt.



  • miss992 schrieb:

    Ok, danke!! Jetzt verstehe ich wo das Problem liegt.

    Es ist nicht nur ein Problem



  • Achtung: Fakultäten werden sehr schnell sehr groß! Es droht immer ein Überlauf.

    Aber: bei Binomialkoeffizienten kürzt sich sehr viel weg. Es empfiehlt sich also NICHT, ungekürzt einfach mal den Zähler n! auszurechnen, wenn man letztendlich n choose k rechnen will.

    Merke: erst kürzen, dann ausrechnen.


Log in to reply