Erstellen eines c++ Programms dass variationen ohne wiederholungen berechnet



  • evy schrieb:

    die formel für mit Wiederholung ist simpel
    n/k

    Eigentlich ists n^k.

    So mein Gedanke :
    Ich lass von n! die fakultät berechnen ,
    dann soll das programm sich diesen wert merken.

    Dan soll mann den wert für N und für K einlesen.
    diese Subtrahierne und den wert merken
    von diesem wert die fakultät ausrechen , auch diesen wert merken
    und dan fakultät 1 durch fakultät 2 teilen

    bin ich auf dem richtigen weg?

    Die Reihenfolge stimmt noch nicht. Du berechnest bereits n!, bevor du n überhaupt einliest.



  • was hälst du davon?

    #include <cstdlib>
    #include <iostream>

    using namespace std;

    int main()

    {
    int zahln, zahlk, wert1, wert2;
    cout << " Geben Sie eine Zahl für n ein" <<;
    cin >> eingabe1;
    cout << " Geben Sie eine Zahl für k ein " <<;
    cin >< eingabe2;
    nt fakultaet = 1, eingabe;

    for (int i = eingabe1; i > 0; i--)

    fakultaet = fakultaet1 * i;

    wert1 😞 eingabe1 * eingabe2);

    for (int i = wert1; i > 0; i--)

    fakultaet = fakultaet2 * i;

    wert2 = (fakultatet1% fakultaet2)

    cout << "Das Ergebnis ist " << wert2 << endl;
    return 0;

    }



  • Du könntest deine Programme wenigstens mal ausprobieren, bevor du sie postest 🙄

    Und schau dir mal die Operatoren an. Dividieren tut man mit /, % ist Modulo.



  • Ja
    ich weis das dieses Programm nicht läuft , es ist ein Prototyp ich will wissen ob ich auf dem richtigen weg bin bzw. Wo ich ansetzen muss, oder ob der Grundgedanke schon falsch ist.



  • 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 😉



  • This post is deleted!


  • @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


Log in to reply