Zufall



  • Ich möchte ein Progamm schreiben, wo man drei mal auf die Frage:

    cout << "Geben Sie jetzt 'stop' ein: " ;
    

    stop eingeben soll.

    So soll es ungefähr aussehen:

    1. Geben Sie jetzt 'stop' ein: stop

    /* Wenn man 'stop' eingeben hat, soll der Comp. ZUFÄLLIG eine Zahl zwischen 0 und 20 anzeigen. Das ganze soll drei mal laufen. */

    Ihre Zahl : 10

    1. Geben Sie jetzt 'stop' ein: stop

    Ihre Zahl : 9

    1. Geben Sie jetzt 'stop' ein: stop

    Ihre Zahl: 11

    So wenn die letzte Zahl auch angezeigt wurde, soll der Computer alles vergleichen. Wenn man drei mal die GLEICHE Zahl erreicht hat ODER wenn alle drei Zahlen zusammengerechnet 30 ergibt, soll der Computer "Sie habe gewonnen" anzeigen.

    Wenn man beides hat, soll der comp. "Sehr gut, Sie haben gewonnen" anzeigen.

    Wenn man nichts erreicht hat, soll der Comp. "Sie haben verloren" anzeigen.
    Dann soll das ganze Siel wiederholt werden.

    MEINE FRAGE: ⚠ Wie müssen die Programmcodes für dieses verdammt hartes Programm aussehen 😮 ???

    Das Spiel ist fast so wie diese casino spiele, wo man z.B. drei mal die gleichen Zeichen haben muss:

    http://www.cherrycasino.com/de/index.jsp



    1. if/else
    2. cin und cout
    3. std::string
    4. rand() und srand(), modulo operator


  • such mal nach rand()

    wenn du es richtig machst (initialisierst) liefert dir das deine (pseudo-) zufallszahl.
    dann musst du noch dafür sorgen, dass die zahl aus dem gewünschten bereich (0 bis 20) kommt. dafür solltest du dir den modulo-operator (%) angucken.

    lg
    sinthoras



  • Gilder schrieb:

    1. if/else
    2. cin und cout
    3. std::string
    4. rand() und srand(), modulo operator

    Perfekt, genau da habe ich gehängt. Danke 😃


  • Mod

    Hier hast du die einzig mögliche Lösung für dein Vorhaben:

    #include<iostream>
    #include<string>
    #include<algorithm>
    #include<numeric>
    #include<ctime>
    
    template<class random_number_class, unsigned int iterations=3, int target=30> class game
    {
    private:
      random_number_class random;
      int results[iterations];
    public:
      game(random_number_class random):random(random){}
      void play(){
        for(unsigned int i(0); i < iterations; ++i){
          std::string input;
          do{
    	std::cout << "Geben Sie jetzt 'stop' ein: " << std::endl;
    	getline(std::cin,input);
          } while (input != "stop");
          results[i]=random();
          std::cout << "Ihre Zahl: " << results[i] << std::endl;
        }
        if ((std::accumulate(results,results+iterations, 0) == target)
    	|| (std::count(results, results+iterations, results[0]) == iterations))	
          {
    	std::cout << "Sehr gut, Sie haben gewonnen" << std::endl;
          }
        else
          {
    	std::cout << "Sie haben verloren" << std::endl;
          }
      }
    };
    
    template<int minimum, int maximum> class random_number_generator
    {
    private:
      unsigned int status;
      static const unsigned int a = 1664525;
      static const unsigned int c = 1013904223;
      static const unsigned int m = 4294967295;
    public:
      random_number_generator(unsigned int seed): status(seed){}
      int operator()()
      {
        status = (a * status + c) % m;
        return (status % (maximum + 1 - minimum)) + minimum ;
      }
    };
    
    int main()
    {
      random_number_generator<0,20> ran(std::time(0));
      game<random_number_generator<0,20> > my_game(ran);
      for(;;) my_game.play();
    }
    

    Kommentare sind wohl überflüssig, so schön selbsterklärend wie das Programm ist 🤡 .



  • SeppJ schrieb:

    Kommentare sind wohl überflüssig, so schön selbsterklärend wie das Programm ist 🤡 .

    Hey, es sind schliesslich nur Standardfunktionen. 😃


  • Mod

    Nexus schrieb:

    SeppJ schrieb:

    Kommentare sind wohl überflüssig, so schön selbsterklärend wie das Programm ist 🤡 .

    Hey, es sind schliesslich nur Standardfunktionen. 😃

    Besonders gefallen mir die 3 magischen Zahlen ohne Kommentar im Zufallsgenerator. Ohne zu wissen was die bedeuten, kann man vergessen den Code als den eigenen auszugeben.


Anmelden zum Antworten