Problem mit Mathe Formel



  • Hallo

    Also ich will ein Programm machen das folgendes tut:

    Der User gibt ein wie viele Siege er hat und dann gibt das Programm ihm seine

    Punkte aus:

    Ab 14 Siegen bekommt man 232 Punkte

    Ab 15 Siegen bekommt 272 Punkte Punkte

    und so weiter dann immer +40

    Ab 16 Siegen bekommt man dann 312 Punkte

    Weiss einer da zufällig eine Formel für oder so ich bin schon die ganze zeit am probieren aber es klappt nicht 😞



  • Habe ich ein Deja vu?

    int CalculatePoints (int iWin)
    {
        if (iWin < 14)
            return 0;
    
        return ((iWin - 14) * 40) + 232;
    }
    

    kA ob das so geht, nicht getestet

    EDIT: bei sowas gibt es keine Pauschalformel. Du musst für jedes Problem eine passende Formel entwickeln.



  • Jo es geht thx 🙂



  • Herangehensweise an das eigentlich simple Problem:

    Gegeben sind die Punkte ab einer bestimmten Zahl Siege (hier 14). Ab dem 14. Sieg, welcher 232 Punkte gibt, erhält man für jeden weiteren Sieg 40 Punkte.

    Siege          | Punkte
    ---------------+----------------
    0 - 13         | nicht definiert
    14             | 232(+  0 = 232)
    15             | 232 + 40 = 272
    16             | 272 + 40 = 312
    17             | 312 + 40 = 352
    ...            | ...
    

    Die Punkte nehmen (ab Sieg 14) linear zu. Es handelt sich folglich um eine (einfache) lineare Gleichung der Form y = ax + b.

    y ^= Punktzahl
    a ^= Punktezunahme (40)
    x ^= Zahl der Siege ab dem 14. Sieg (Zahl der Siege minus 14)
    b ^= Anzahl Punkte ab dem 14. Sieg (232)

    a und b sind bekannt und können daher eingesetzt werden:

    y = 40 * (Siege - 14) + 232

    Wobei 'Siege' größer oder gleich 14 sein muss, da die Lösung für den Bereich 0 bis 13 nicht definiert ist.

    Es ergibt sich demnach folgende Funktion (mit Hilfsvariablen zu Verdeutlichung):

    int punkte(int siege)
        {
            int y; // Rückgabewert
            int x = siege - 14;
            int a = 40;
            int b = 232;
    
            y = a*x + b;
    
            return y;
    }
    

    Für die Bereichsprüfung von 'siege' empfiehlt es sich, eine Ausnahme zu werfen und nicht den Wert 0 zurück zu geben. Anders natürlich, wenn es bis einschließlich 13 Siegen null Punkte gibt.

    Grüße...

    Heiko


Anmelden zum Antworten