Erstellen eines c++ Programms dass variationen ohne wiederholungen berechnet



  • Woher soll man das wissen? Der Grundgedanke ist aus diesem Trümmerhaufen nicht erkennbar. Ich weiß ehrlich gesagt auch nicht, was man hier großartig für Grundgedanken braucht. Du hast eine Formel, und der naive Ansatz ist, sie einfach so, wie sie dasteht, zu implementieren.

    n! / (n-k)!

    Subtraktion und Division ist in die Sprache eingebaut, es fehlt nur die Fakultät. Die kriegst du offensichtlich mithilfe von Schleifen hin. Eingabe/Ausgabe ist klar. Fehlt noch was?

    Wenn du das hinkriegst, solltest du dich allerdings fragen, ob man das nicht noch besser lösen kann. Dazu hast du hier auch schon einen Tipp bekommen.



  • Sorry aber deine Antwort hilft mir gerade nicht groß weiter ,
    eine genaue bezeichung und erklärung meiner fehler wären toll.

    Wo ist mein fehler , was ist mein fehler und zwar genau das würde mir weiter helfen.

    Und deshalb bin ich hier um genaue hilfe und tipps zu bekommen und zwar so ausgedrückt das ich sie versteh und umsetzen kann.



  • evy schrieb:

    Sorry aber deine Antwort hilft mir gerade nicht groß weiter

    Das tut mir leid.

    eine genaue bezeichung und erklärung meiner fehler wären toll.

    Mach aus deinem Prototypen ein richtiges, ernstgemeintes Programm und melde dich dann nochmal.


  • Mod

    evy schrieb:

    Sorry aber deine Antwort hilft mir gerade nicht groß weiter ,
    eine genaue bezeichung und erklärung meiner fehler wären toll.

    #include <cstdlib>  // Schlecht. Benutzt du nicht
    #include <iostream>
    
    using namespace std;
    
    int main()
                // Schlecht. Ungewöhnliche Leerzeilen
    {
    int zahln, zahlk, wert1, wert2;    // Sehr schlecht. Nichtssagende Namen. zahln und zahlk werden nirgendwo benutzt. wert1 und wert2 viel zu früh deklariert.
    cout << " Geben Sie eine Zahl für n ein" <<;   // Falsch. Auf << kann kein ; folgen
    cin >> eingabe1;  // Falsch. eingabe1 ist nicht deklariert.
    cout << " Geben Sie eine Zahl für k ein " <<;  // Falsch. Auf << kann kein ; folgen
    cin >< eingabe2;   // Falsch. Auf > kann kein < folgen. eingabe2 nicht deklariert
    
    nt fakultaet = 1, eingabe;  // Falsch. Datentyp nt exisitert nicht. Schlecht. Variable eingabe wird nirgends benutzt
    
    for (int i = eingabe1; i > 0; i--)
    
    fakultaet = fakultaet1 * i;   // Schlecht. *= benutzen um zu zeigen, was man will.
    
    wert1 =( eingabe1 * eingabe2);  // Falsch. Du brauchst für die Formel nirgends eingabe1 multipliziert mit eingabe2
    
    for (int i = wert1; i > 0; i--)
    
    fakultaet = fakultaet2 * i;  // Falsch. fakultaet2 nicht deklariert. Rechnung falsch.
    
    wert2 = (fakultatet1% fakultaet2)  // Falsch. Rechnung falsch
                                       // Falsch. Fehlendes Semikolon
    cout << "Das Ergebnis ist " << wert2 << endl;  // Schlecht. endl, wo '\n' gedacht ist.
    return 0;  // Schlecht. Nicht verstanden, welche Sonderregeln für main gelten.
               // Schlecht. Ungewöhnliche Leerzeilen
    }
    

    Verstehst du nun, warum Bashar dein Programm einen Trümmerhaufen genannt hat und dir nicht konkrete Fehler nennen konnte?



  • vielen vielen dank mit dieser hilfe kann ich arbeiten ,
    ich werde mich sofort dran setzen und deine anmerkungen umsetezen
    danke schön.


  • Mod

    evy schrieb:

    vielen vielen dank mit dieser hilfe kann ich arbeiten ,
    ich werde mich sofort dran setzen und deine anmerkungen umsetezen
    danke schön.

    Es ist frustrierend, wenn der TÜV ein Haus zur Notsprengung deklariert und der Hausbesitzer dies als Aufforderung versteht, die kaputten Glühbirnen zu wechseln.



  • Hier eine Variante für die Experten, die ganz ohne Rekursion und Multiplikation auskommt ...

    #include <iostream>
    #include <functional> // plus<>
    #include <numeric> // adjacent_difference
    #include <vector>
    
    template< typename T >
    T n_ueber_k( T n, T k )
    {
        using namespace std;
        vector< T > line;
        for( ; line.push_back( T(1) ), n > 0; --n )
            adjacent_difference( line.begin(), line.end(), line.begin(), plus< T >() );
        return line.at( k );
    }
    
    int main()
    {
        using namespace std;
        for( int n, k; cin >> n >> k; )
            cout << n << " ueber " << k << " = " << n_ueber_k( n, k ) << endl;
        return 0;
    }
    

    Gruß
    Werner



  • Gesucht ist nicht (nk)=n!(nk)!k!\binom{n}{k} = \frac{n!}{(n-k)!k!}, sondern n!(nk)!\frac{n!}{(n-k)!}. (In der Hoffnung, dass dein Code auch tatsächlich ersteres berechnet 😉 )



  • Bashar schrieb:

    Gesucht ist nicht (nk)=n!(nk)!k!\binom{n}{k} = \frac{n!}{(n-k)!k!}, sondern n!(nk)!\frac{n!}{(n-k)!}. (In der Hoffnung, dass dein Code auch tatsächlich ersteres berechnet 😉 )

    Bashar der Experte hat's gemerkt 👍 - mein Code berechnet (nk)=n!(nk)!k!\binom{n}{k} = \frac{n!}{(n-k)!k!}. Das wäre die Anzahl der Variationen ohne Wiederholung und ohne Beachtung der Reihenfolge.

    Gruß
    Werner



  • Werner: Nette Art, das Pascalsche Dreieck aufzubauen. Aber etwas rechenintensiv, wenn man nur an einem Eintrag interessiert ist 😉



  • Dieser Beitrag wurde gelöscht!


  • @maniqui Bitte in Zukunft mit neue Frage nix Du antworten auf Thread das ist alt sieben Jahre?? Besser neues Thema starten Du tust.



  • @Swordfish Das tut gut ! Danke für die Antwort! Ich wollte einfach das Forum nicht mit der gleiche Frage spammen. Hier trotzdem das neue Thema:
    https://www.c-plusplus.net/forum/topic/348772/c-code-umsetzung-für-mathe-formel-n-n-k-aufgabe-berechnung-variationen-ohne-wiederholungen


Anmelden zum Antworten