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 Zahlint 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 ratenif(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 ZufallszahlDieser 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 ZufallszahlWenn 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