Rechenspiel



  • Sorry. Aber dazu fehlt wohl vielen einfach die Motivation bei so einem Schwachsinnsprogramm.



  • tomy86: lass dich mal von so arroganten Kommentaren wie dem von Swordfish nicht runtermachen. Ist schon okay, man muss das ja auch lernen. Einige vergessen vielleicht, wie planlos man so als Anfänger ist.
    Außerdem kam hier auch schon wesentlich schlimmeres an.

    Zu deiner Frage:
    Wie Swordfish schrieb, solltest du Funktionsparameter nehmen. Damit das nicht etwas ausartet, kannst du zusammengehörige Daten gruppieren, mit Klassen oder auch etwas wie std::tupel.

    Sehen wir uns der einfachheit halber mal die Funktion rechenzeichenNummer an. Hier kann man ganz einfach einen Parameter einführen, nämlich das Rechenzeichen und schon ist die Funktion unabhängig von globalen Variablen.
    Natürlich musst du an entsprechender Stelle den korrekten Wert übergeben.

    int rechenzeichenNummer(char rechenzeichen){                                          // Gibt den Multiplikator des Rechenzeichens wieder.
        switch(rechenzeichen) {
            // die breaks kann man sich sparen, da du ja ueber die returns niemals in die anderen cases rutscht
            case '+':
                return 2;
            case '-':
                return 2;
            case '*':
                return 5;
            case '/':
                return 5;
        }
    }
    

    Man könnte die cases oben Zusammenfassen, da wie bereits erwähnt wurde zwei jeweils dasselbe tun. Allerdings passt hier der Wert nicht mit den Werten zusammen, wie die Rechenzeichen erzeugt werden. Ist das so beabsichtigt?



  • Ah ok, ist hier wohl kein Forum was Anfänger freundlich ist!



  • Ach, das würde ich nicht so sagen. Der Ton ist rau, aber hilfreich, wenn man sich beim Stellen der Frage Mühe gibt und über die Antworten entsprechend nachdenkt.
    Vielleicht war hier das Problem, dass du eine sehr allgemeine Frage gestellt hast.



  • Hyde++, ich danke dir für die ausführliche Antwort 🙂
    Also das die Werte unterschiedlich sind liegt daran, dass es sich in der Funktion rechenzeichenNummer um Multiplikatoren handelt. Sie wird in der Funktion runGame aufgerufen und mit 15 multipliziert einfach weil es ja schwerer ist */ als +- zu rechnen. Das wird benötigt für den Highscore.

    Zu den Parametern habe ich mir auch schon Gedanken gemacht, allerdings kommen die Werte ja aus der Funktion rechne und ich brauche die Werte in der Funktion runGame.
    Da müsste ich doch zick aufrufe an zick Stellen machen, damit die Daten so über kommen?



  • Hyde++ schrieb:

    Sehen wir uns der einfachheit halber mal die Funktion rechenzeichenNummer an. [...]

    Ne, das machen wir bitte nicht. Schon einmal darum nicht, weil alleine der Name bullshit ist - er impliziert eine Nummerierung von Rechenzeichen, die nicht gegeben ist - und eine Zuordnung von Operationen zu Multiplikatoren für irgendeinen Score bestenfalls ein Array oder eine map ist und keine Funktion.


  • Mod

    Swordfish schrieb:

    Hyde++ schrieb:

    Sehen wir uns der einfachheit halber mal die Funktion rechenzeichenNummer an. [...]

    Ne, das machen wir bitte nicht. Schon einmal darum nicht, weil alleine der Name bullshit ist - er impliziert eine Nummerierung von Rechenzeichen, die nicht gegeben ist - und eine Zuordnung von Operationen zu Multiplikatoren für irgendeinen Score bestenfalls ein Array oder eine map ist und keine Funktion.

    Zwar wäre rechenzeichenMultiplikator tatsächlich ein besserer Name, aber ein array oder eine map für 4 verschiedene Möglichkeiten vor zu schlagen, ist ja wohl selber bullshit². Am besten noch eine Hashmap, dann können wir die Hashfunktion wieder rechenzeichenNummer nennen:

    int rechenzeichenNummer(char rechenzeichen)
    {
      switch(rechenzeichen)
      {
        case '+': return 1;
        case '-': return 2;
        case '*': return 3;
        case '/': return 4;
      }
      return 0;
    }
    
    int rechenzeichenMultiplikator(char rechenzeichen)
    {
      static const int multiplikatormap[5] = {0, 2, 2, 5, 5};
      return multiplikatormap[rechenzeichenNummer(rechenzeichen)];
    }
    

    Moderne Programmierung!



  • SeppJ schrieb:

    Am besten noch eine Hashmap,

    Mindestens!!



  • SeppJ schrieb:

    int rechenzeichenNummer(char rechenzeichen)
    {
      switch(rechenzeichen)
      {
        case '+': return 1;
        case '-': return 2;
        case '*': return 3;
        case '/': return 4;
      }
      return 0;
    }
    
    int rechenzeichenMultiplikator(char rechenzeichen)
    {
      static const int multiplikatormap[5] = {0, 2, 2, 5, 5};
      return multiplikatormap[rechenzeichenNummer(rechenzeichen)];
    }
    

    Moderne Programmierung!

    Ich verstehe nicht ganz, warum das oben besser sein soll als das:

    int rechenzeichenMultiplikator(){											// Gibt den Multiplikator des Rechenzeichens wieder.
    	switch(rechenzeichen) {
    		case '+':
    		case '-':
    			return 2;
    		case '*':
    		case '/':
    			return 5;
    	}
    }
    

    Das ist doch viel kürzer und bewirkt genau das gleiche? Und sicher ist es doch auch von der Performance viel schneller, da nicht extra wieder noch eine andere Funktion aufgerufen werden muss?


  • Mod

    Wir brauchen wirklich endlich Ironie-Tags für das Forum.


  • Mod

    SeppJ schrieb:

    Wir brauchen wirklich endlich Ironie-Tags für das Forum.

    Ich fürchte dass diese dann leider missbraucht werden und zahllose Threads unlesbar und zweideutig machen würden.


  • Mod

    Arcoth schrieb:

    SeppJ schrieb:

    Wir brauchen wirklich endlich Ironie-Tags für das Forum.

    Ich fürchte dass diese dann leider missbraucht werden und zahllose Threads unlesbar und zweideutig machen würden.

    Dann eben nur verfügbar für verantwortungsvolle, verdiente Personen mit Vorbildfunktion. Wie Moderatoren. [/ironie]



  • *lach*


  • Mod

    Du hast vor einer kleinen Weile mal das Wort "Penis" in einem fraglichen Kontext verwendet. Das nennst du vorbildhaftlich?

    (Hier ist der Link. Irgendein kleinpubertärer Troll hat den Thread zur damaligen Zeit mit dummen und naivem Schwachsinn zugekleistert... ein Vorläuferaccount von Swordfish? 🤡 )

    ~PS: Ich habe nicht einfach vulgäre Wörter in die Forensuche gesteckt um zu schauen wo du gesündigt hast, ich erinnere mich an viele solche Threads leider nur zu gut, da sie in meinem Hirn wie gebrandmarkt herumgeistern.~ 😞



  • Arcoth schrieb:

    Irgendein kleinpubertärer Troll hat den Thread zur damaligen Zeit mit dummen und naivem Schwachsinn zugekleistert... ein Vorläuferaccount von Swordfish? 🤡 )

    Hey ... bleib sportlich ... 😮


  • Mod

    Mann, das war nur ein Scherzle. Du bist zu keinem Zeitpunkt auch nur annaeherend so unertraeglich wie Hacker es damals gewesen sein muss.


Anmelden zum Antworten