Zufalls Generierte Zahlen.



  • Asso Vielen Dank für die Antworten. Jetzt würde ich mein Programm noch ein bisschen erweitern 😃 Immer wenn ich eine Zahl angebe, also 1 = Schere 2= Stein oder Papier bekomme ich eine Zahl zurück 😃 wie kann ich es umändern das ich anstatt ner null das Wort schere bekomme :D? Und ich will das das Programm meine Siege aufzählt. Hoffe ich nerve nicht ^^



  • So sieht mein Quellcode gerade aus!

    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    
    {
    zufall:
    
    system("cls");
    
    int ents;
    int zufall = rand() %3;
    
      cout << "Schere, Stein, Papier Spiel" << endl << endl;
      cout << "1. Schere / 2. Stein / 3. Papier ( 1,2 oder 3)" << endl << endl;
      cin >> ents;
    
      srand (time(NULL));
      cout << rand() %3 << endl;      // zufall : 0 = Schere / 1 = Stein / 2 = Papier
                                      // ents : 1 = Schere / 2 = Stein / 3 = Papier
     if ( ents == 1 && zufall == 0)
     {
          cout << "Unentschieden" << endl;
    
     }
    
     if ( ents == 1 && zufall == 1)
     {
          cout << "Verloren" << endl;
    
     }
    
     if ( ents == 1 && zufall == 2)
     {
          cout << "Gewonnen" << endl;
    
     }  
    
     if ( ents == 2 && zufall == 0)
     {
          cout << "Gewonnen";
    
     }
    
     if ( ents == 2 && zufall == 1)
     {
          cout << "Unentschieden";
    
     }
    
     if ( ents == 2 && zufall == 0)
     {
          cout << "Verloren";
    
     }
    
     if ( ents == 3 && zufall == 0)
     {
          cout << "Verloren";
    
     }
    
     if ( ents == 3 && zufall == 1)
     {
          cout << "Gewonnen";
    
     }
    
     if ( ents == 3 && zufall == 0)
     {
          cout << "Unentschieden";
    
     }  
    
    system("PAUSE");
    
    goto zufall;
    
    }
    

  • Mod

    Und jetzt machst du noch eine vernünftige Schleife drumherum. Und denkst mal darüber nach, wie man eine Zahl zwischen 0 und 2 wohl zu einer Zahl zwischen 1 und 3 machen kann, so dass die komische Unterscheidung zwischen der Zahl des Computers und der Zahl des Spielers wegfällt.



  • Mach ich, aber ich versuche Grad nicht Zahlen sondern Wörter auf die Console angezeigt zu bekommen.



  • Chechen65 schrieb:

    So sieht mein Quellcode gerade aus!

    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    
    {
    zufall:
    
    system("cls");
    
    int ents;
    int zufall = rand() %3;
    
      cout << "Schere, Stein, Papier Spiel" << endl << endl;
      cout << "1. Schere / 2. Stein / 3. Papier ( 1,2 oder 3)" << endl << endl;
      cin >> ents;
      
    
      srand (time(NULL));
      cout << rand() %3 << endl;      // zufall : 0 = Schere / 1 = Stein / 2 = Papier
                                      // ents : 1 = Schere / 2 = Stein / 3 = Papier
     if ( ents == 1 && zufall == 0)
     {
          cout << "Unentschieden" << endl;
      
     }
     
     if ( ents == 1 && zufall == 1)
     {
          cout << "Verloren" << endl;
      
     }
     
     if ( ents == 1 && zufall == 2)
     {
          cout << "Gewonnen" << endl;
      
     }  
     
     if ( ents == 2 && zufall == 0)
     {
          cout << "Gewonnen";
      
     }
     
     if ( ents == 2 && zufall == 1)
     {
          cout << "Unentschieden";
      
     }
     
     if ( ents == 2 && zufall == 0)
     {
          cout << "Verloren";
      
     }
     
     if ( ents == 3 && zufall == 0)
     {
          cout << "Verloren";
      
     }
     
     if ( ents == 3 && zufall == 1)
     {
          cout << "Gewonnen";
      
     }
     
     if ( ents == 3 && zufall == 0)
     {
          cout << "Unentschieden";
      
     }  
    
    system("PAUSE");
    
    goto zufall;
    
    }
    

    Du rufst 2-mal "rand()" auf (Zeile 14 & 22), ist das richtig so? 😉



  • Hahah ja da stand mehr hab probiert wie ich den Zahlen Namen gebe. Könnt ihr mir helfen :D?

    Beispiel:

    Console:

    Schere, Stein, Papier Spiel " " <-- Da könnte die Punktzahl stehen.

    1. Schere / 2. Stein / 3. Papier ( 1,2 oder 3)

    1

    2 <-- Rückgabe / Da soll Stein stehen.

    Schere schneidet Papier, du hast Gewonnen <--- Das sollte auch da stehen 😃



  • 1. Du solltest nur einmal pro Programmstart die srand() aufrufen.

    2. Um Zahlen von rand() vin 1-3 gehen zu lassen:

    rand()%3+1;
    

    3. Du Rufst 2mal rand() auf (Beim ersten mal speicherst du, das 2te mal gibst du es aus und es kann passieren, dass dir ein anderer Wert angezeigt wird, als in zufall steht)

    4. Pack eine Schleife um dein Programm, somit erparst du dir das goto.



  • Falls du ernsthaft C++ lernen möchtest empfehle ich die Investition in ein Buch.

    mfg
    HarteWare



  • 2 Bücher müssten morgen ankommen 😃
    hallihallo ich versteh das nicht richtig. könntest du mein Code umschreiben?



  • Chechen65 schrieb:

    2 Bücher müssten morgen ankommen 😃

    Welche 2 hast bestellt?

    Chechen65 schrieb:

    hallihallo ich versteh das nicht richtig. könntest du mein Code umschreiben?

    Was verstehst du das nicht? / und + gabs doch schon in der Grundschule 😃



  • Chechen65 schrieb:

    2 Bücher müssten morgen ankommen 😃
    hallihallo ich versteh das nicht richtig. könntest du mein Code umschreiben?

    Dann warte doch lieber, bis die da sind, dann brauchst du uns hier auch nicht sehr grundlegende Fragen zu stellen 🙂



  • C und C++ beide vom Anfang an 😃



  • Hab es mehr oder weniger hingekriegt. Aber wenn ich euch jetzt frage wie ich die Punktezahl anzeigen lassen kann, das sind keine Grundlagen 😃 Weis das jemand?

    Ach ja und das hier:

    cout << rand() %3+1 << endl;

    Hat nichts gebracht... die Console hat immer die 1 generiert.

    #include <iostream> 
    #include <cstdlib> 
    
    using namespace std; 
    
    int main() 
    
    { 
    zufall: 
    
    system("cls"); 
    
    int ents; 
    int zufall = rand() %3; 
    
      cout << "Schere, Stein, Papier Spiel" << endl << endl; 
      cout << "1. Schere / 2. Stein / 3. Papier ( 1,2 oder 3)" << endl << endl; 
      cin >> ents; 
    
      srand (time(NULL)); 
      cout << rand() %3 << endl;      // zufall : 0 = Schere / 1 = Stein / 2 = Papier 
                                      // ents : 1 = Schere / 2 = Stein / 3 = Papier 
     if ( ents == 1 && zufall == 0) 
     { 
          cout << "Schere schneidet Schere = Unentschieden!" << endl << endl; 
    
     } 
    
     if ( ents == 1 && zufall == 1) 
     { 
          cout << "Stein schlägt Schere = Verloren!" << endl << endl; 
    
     } 
    
     if ( ents == 1 && zufall == 2) 
     { 
          cout << "Schere schneidet Papier = Gewonnen!" << endl << endl; 
    
     }   
    
     if ( ents == 2 && zufall == 0) 
     { 
          cout << "Stein schlägt Schere = Gewonnen!" << endl << endl; 
    
     } 
    
     if ( ents == 2 && zufall == 1) 
     { 
          cout << "Stein schlägt Stein = Unentschieden!" << endl << endl; 
    
     } 
    
     if ( ents == 2 && zufall == 0) 
     { 
          cout << "Blat umwickelt Stein = Verloren!" << endl << endl; 
    
     } 
    
     if ( ents == 3 && zufall == 0) 
     { 
          cout << "Schere schneidet Papier = Verloren!" << endl << endl; 
    
     } 
    
     if ( ents == 3 && zufall == 1) 
     { 
          cout << "Papier umwickelt Stein = Gewonnen!" << endl << endl; 
    
     } 
    
     if ( ents == 3 && zufall == 0) 
     { 
          cout << "Papier umwickelt Papier = Unentschieden!" << endl << endl; 
    
     }   
    
    system("PAUSE"); 
    
    goto zufall; 
    
    }
    

  • Mod

    Du merkst dir in einer Variable die Punktzahl, veränderst diese gegebenenfalls und gibst sie aus. Doch, das sind Grundlagen, so ungefähr Seite 3 in einem typischen Buch 🙂 .

    Ich wette übrigens, dass nun genau der Zeitpunkt ist, an dem du mit dem goto auf die Schnauze fliegst. Denn mit der Punktzahl, wie einfach das auch aussehen mag, wird auf einmal ein funktionsweiter Zustand wichtig. Da ist es wichtig, den Kontrollfluss genau verfolgen zu können, was wann wo wie verändert wird. Also das, was bei goto so unlesbar ist.



  • Seite 3? Haha 😃 ne ich will es nicht verändern, es soll automatisch passieren. Und ich versteh manchmal die Reaktion einzelner Leute nicht wenn sie sehen wie einer goto benutzt xD ist meiner Meinung nach ein schöner Befehl. Also wenn du was weist freu ich mich 😃 ansonsten schau ich selber wie ich das mit der Punktezahl hinkriegen 🙂


  • Mod

    Chechen65 schrieb:

    Haha 😃 ne ich will es nicht verändern, es soll automatisch passieren.

    So funktioniert Programmierung nicht. Es gibt keine Magie. Du musst ganz genau definieren, was wann wo warum wie passieren soll.

    Und ich versteh manchmal die Reaktion einzelner Leute nicht wenn sie sehen wie einer goto benutzt xD ist meiner Meinung nach ein schöner Befehl.

    Das kannst du als absoluter Anfänger aber nicht einschätzen. Goto gilt als die absolute Todsünde und das zurecht. Benutze es nicht, damit du es dir gar nicht erst angewöhnst.
    Google: goto considered harmful

    Und du hast wahrscheinlich gerade versehentlich eine riesige Glaubensdiskussion ausgelöst, weil gleich wieder jeder seinen einen Fall vorträgt, in dem er goto einmal sinnvoll verwendet hat. 😃



  • SeppJ schrieb:

    Goto gilt als die absolute Todsünde und das zurecht. Benutze es nicht, damit du es dir gar nicht erst angewöhnst.

    Ich weiss nicht, ob es so sinnvoll ist, programmieren durch Verbote zu lehren.
    - Verwende nie goto, nimm for/while
    - Verwende nie Zeiger und new/delete, nimm immer std::vector
    - Verwende nie const char*, nimm std::string
    - Verwende nie UN, ...

    Als Anfänger kommt einem C++ und Programmieren dann als Liste von Verboten vor, ohne deren Grund zu verstehen (auf Dijkstra zu verweisen ist für einen Anfänger wie ihn vielleicht etwas zu hoch gegriffen). Ich finde es besser, in den anfangs noch überschaubaren Programmen diese Fehler zwangsweise zu machen und sich diese Regeln anzueignen, um sie zu vermeiden.



  • Vernünftige Bücher fangen auch nicht mit Pointern, goto, cstrings etc. an sondern bringen es direkt richtig bei. Erst bei Bedarf wird erklärt, wozu es warum benutzt wird.



  • Verwende nie const char*

    Das hat keiner gesagt.

    Rohe Zeiger mit new / delete gibt es auch, eben weiter unten, in irgendeinem Kasseninternum.

    Merksatz:
    Solange man weiß, was man tut
    ist alles supi gut.



  • Sone schrieb:

    Merksatz:
    Solange man weiß, was man tut
    ist alles supi gut.

    Wobei Anfänger lieber nicht nach dem Satz gehen sollten, weil sie denken, sie wüssten was sie tun, tun es aber nicht. Außerdem könnte ich auch immer mit CStrings und malloc/free arbeiten, dann weiß ich auch was ich tue, sinnvoll ist es trotzdem nicht.


Anmelden zum Antworten