Zufallszahl soll generiert werden



  • Für mein Zahlenraten-Programm soll anstatt eines festgeschriebenen Werts eine Zufallszahl ausgewählt werden.

    Welches Modul würdet ihr empfehlen, und wie ließe sich ein Generator-Algorithmus am übersichtlichsten für dieses Programm programmieren?

    (Meine Kenntnisse beschränken sich derzeit leider nur auf Schleifen, Funktionen und natürlich Verzweigungen, noch nix Klassen, Objekte oder ähnliches)

    [code="cpp"]
    #include <iostream>
    using namespace std;

    Zaehler = 0; // Anzahl bisheriger Versuche
    int Zufallszahl = 45; // Generierung Zufallszahl
    int Versuch; // Die selbst geratene Zahl

    int main()
    {
    cout << "Du musst eine Zahl zwischen 1 und 60 erraten" << endl // Spiel wird erklärt
    << "Du hast 5 Versuche!";

    while(Zaehler != 5 && Versuch != 45) // Beginn des "Spiels"
    {
    cout << "\nRate: ";
    cin >> Versuch; // Benutzer soll raten

    if(Versuch > Zufallszahl) // Wenn geratene Zahl groesser als gesuchte Zahl
    {
    cout << "Du hast die Zahl zu hoch geschaetzt.";
    }

    else if(Versuch < Zufallszahl) // Wenn kleiner als ges. Zahl
    {
    cout << "Du hast die Zahl zu niedrig geschaetzt.";
    }

    Zaehler++; // Versuch verbraucht
    }

    if(Versuch==Zufallszahl) // Erfolgsmeldung
    {
    cout << "\nDu hast die Zahl erraten!";
    }

    else // Gescheitärrrt!!
    {
    cout << "\nAlle Versuche aufgebraucht. Beim naechsten mal klappt es bestimmt.";
    }
    cin >> Versuch // Programm schliesst nicht automatisch
    return 0; // Das muss man halt schreiben, wozu auch immer

    }
    [code="cpp"]



  • Such mal nach srand und rand.



  • ... und globale Variablen solltest du dir gar nicht erst angewöhnen.



  • Versuchs mal mit folgendem Code:

    int Zufallszahl = rand() % 100 + 1; // Generierung Zufallszahl
    

    Dieser Code würde eine Zufallszahl zwischen 1 und 100 generieren.

    Erklärung: rand() generiert eine zufällig Zahl zwischen 0 und RAND_MAX.
    Um den Bereich einschränken zu können, in dem die Zahl fällt, benutzt man den Modulus Operator, der den Rest einer Division darstellt.
    Eine Zahl geteilt durch 100 kann den Rest 0-99 haben. Um so eine Zahl zwischen 1 und 100 darzustellen, wird einfach 1 addiert.



  • int Zufallszahl = rand() % 100 + 1; // Generierung Zufallszahl
    

    Wenn du das nur so schreibst, wird immer die gleiche Zahl generiert, weil der Algorithmus der dahinter sitzt immer der gleiche ist. Schreib einfach noch zusätzlich folgendes in main():

    srand((unsigned)time( NULL ));
    

    Dadurch benutzt rand() die aktuelle Millisekunde als Startwert für den Algorithmus.

    Und diese libs einbinden:

    #include <time.h>
    #include <windows.h>
    

    Greets PALone



  • PALone schrieb:

    [...]

    Mhm. Wofür die <windows.h> !? Aber da wir hier versuchen (halbwegs) modernes C++ zu schreiben nehmen wir lieber:

    #include <ctime>
    #include <cstdlib>
    
    int main()
    {
    	std::srand( static_cast< unsigned >( std::time( nullptr ) ) );
    
    	// ...
    

    und lesen uns nebenbei noch einen tollen Artikel vom Großmeister durch.



  • Swordfish schrieb:

    Aber da wir hier versuchen (halbwegs) modernes C++ zu schreiben nehmen wir lieber:

    Buuuh!
    http://cpp.indi.frih.net/blog/2014/12/the-bell-has-tolled-for-rand/



  • Swordfish schrieb:

    [...] (halbwegs) modernes C++ [...]

    Hey, immerhin keine C-Header 🤡



  • Danke 🤡
    Aber C kann ich gar nicht 😃

    Die windows.h hab ich aus einem Source von mir kopiert und nicht gelöscht. Sorry. Naja...meine Lösung hat auf jeden Fall geklappt 🕶 👍

    Greets PALone


Anmelden zum Antworten