Archiv verlassen und diese Seite im Standarddesign anzeigen : Zahlenratespiel
Hallo ihr =)
Ich wollte wissen ob ich mit dem noch nicht so Wissen ein Zahlenratespiel coden kann. Doch aus irgendeinem Grund ist die Zufallszahl immer = 42
Hier mal der Code:
#include <iostream>
using namespace std;
int main()
{
int Zahl;
int Eingabe = 0; //Dient nur dazu, dass Die For-Schleife immer weiter geht
int ZahlenGebiet = 100; //Zahlenbereich
int ZufallsZahl = rand()%ZahlenGebiet+1; //Zufallszahl bilden
cout << "Ich denke mir eine Zahl zwischen 1 und 100. Welche ist es?" << endl;
for (int i = 0;0 == Eingabe; i++)
{
cin >> Zahl;
if (Zahl < ZufallsZahl)
cout << "Zu niedrig" << endl;
else if (Zahl > ZufallsZahl)
cout << "Zu hoch" << endl;
else if (Zahl == ZufallsZahl)
cout << "Richtig" << endl;
}
system("Pause"); //Nicht die beste Variante fiel mir aber so spontan ein ;)
return 0;
}
blackberry
24.12.2008, 23:35
Das liegt nicht an dir, es liegt an rand().
Der C++ Pseudozufallsgenerator ist ziemlich schlecht.
Außerdem hatten wir das Thema schonmal - mögen Google und SuFu mit dir sein ^^
Also:
Ich habe erstmal bei Google nach einem Zufallsgenerator gesucht un bin dabei auf genau diesen Befehl gestoßen =)
Bei der Sufu habe ich nach Zufall und rand gesucht, aber nichts gefunden.
Zudem hat er bei manchen Dingen seinen Dienst geleistet jedoch kommt bei mir nun JEDES, aber auch wirklich JEDES mal 42 raus =)
Achja. Ich hab nen anderes Progi mit dem Zahlenbereich 10. Da gehts...
Was gibt es denn für Alternativen?
blackberry
25.12.2008, 00:27
Einen eigenen Algorithmus schreiben, Google nach fertigen Pseudozufallszahlengeneratoren durchsuchen, oder srand mit der momentanen Zeit aufrufen.
int rand ( void );
- Generate random number
Returns a pseudo-random integral number in the range 0 to RAND_MAX.
This number is generated by an algorithm that returns a sequence of apparently non-related numbers each time it is called. This algorithm uses a seed to generate the series, which should be initialized to some distinctive value using srand.
[...]
Quelle (http://www.cplusplus.com/reference/clibrary/cstdlib/rand.html).
-[RiDER]-
25.12.2008, 22:47
Wie immer macht googlen schlau: http://www.google.com/search?q=the+answer+to+life+the+universe+and+every thing
Sorry for spam...
GreetZ RiDER :D :D :D
Man Rider das wollte ich posten :D
Hab ich sofort dran gedacht als ichs oben gelesen hab und habe dann gehofft es hat noch keiner gepostet :(
Achja richtig das gibts ja auchnoch xD
Ok das erklärts. Thxxxx to Rider.
Mir wars übrigens auch grad eingefallen bevor ich in den Thread geschaut habe =)
O_o
Schau mal hier:
srand(time(NULL));
zufall = rand();
Machst du die Generation der Zahlen abhängig von der aktuellen Zeit, bekommst du immer neue Zufallszahlen.
Kann ich wenn ich den Zufallsgenerator nach der Zeit stelle denn auch einen Bereich festlegen?
Mit 'nem Modulo könntest du das Beispielsweiße einschränken:
zufall = rand() % 100
=> Zahlen von 0 bis 100.
Das hab ich in meinem Quelltext oben doch gemacht oder irre ich? =)
Das Ergebnis war 42 aber ich werds mal Testen ;)
Edit: Yay! Das Ergebnis ist was? Na? Na? :P
Fast.. in deinem Quelltext oben fehlt
srand(time(NULL));
:)
error C3861: "time": Bezeichner wurde nicht gefunden.
Brauch ich nen neuen Header?
Edit: So hab. Viele vielen Dank an euch alle =). Was mich jetzt noch glücklich machen würde, wäre ne Erklärung warum meine Version immer auf 42 kam xD (dachte der sich immer nur eine Zahl aus und behielt die dann?(Bei nem Freund kam auch immer 42 raus xD))
error C3861: "time": Bezeichner wurde nicht gefunden.
Brauch ich nen neuen Header?
Edit: So hab. Viele vielen Dank an euch alle =). Was mich jetzt noch glücklich machen würde, wäre ne Erklärung warum meine Version immer auf 42 kam xD (dachte der sich immer nur eine Zahl aus und behielt die dann?(Bei nem Freund kam auch immer 42 raus xD))
#include <time.h>
Anonymouse
26.12.2008, 02:22
Zufallszahlen sind nie wirklich zufällig.
Ohne die Funktion srand() würde der Startparameter immer derselbe sein und der Zufallsgenerator kommt bei jedem ausführen auf dieselben Werte.
-[RiDER]-
28.12.2008, 18:58
Mit 'nem Modulo könntest du das Beispielsweiße einschränken:
zufall = rand() % 100
=> Zahlen von 0 bis 100.
Original von http://www.freebsd.org/cgi/man.cgi?query=rand&apropos=0&sektion=3&manpath=SuSE+Linux%2Fi386+11.0&format=html
In Numerical Recipes in C: The Art of Scientific Computing (William H.
Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling; New
York: Cambridge University Press, 1992 (2nd ed., p. 277)), the follow-
ing comments are made:
"If you want to generate a random integer between 1 and 10, you
should always do it by using high-order bits, as in
j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));
and never by anything resembling
j = 1 + (rand() % 10);
(which uses lower-order bits)."
Random-number generation is a complex topic. The Numerical Recipes in
C book (see reference above) provides an excellent discussion of prac-
tical random-number generation issues in Chapter 7 (Random Numbers).
For a more theoretical discussion which also covers many practical
issues in depth, see Chapter 3 (Random Numbers) in Donald E. Knuth's
The Art of Computer Programming, volume 2 (Seminumerical Algorithms),
2nd ed.; Reading, Massachusetts: Addison-Wesley Publishing Company,
1981.
Das wollte ich nur noch als Ergänzung hinzufügen. ;)
GreetZ RiDER :D :D :D
@-[RiDER]-:
Ja, so macht man das normal.. Wollte ihm jedoch einfachen Code bieten, den er auch versteht. :)
Powered by vBulletin® Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.