PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zahlenratespiel



Pammy
24.12.2008, 23:15
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 ^^

Pammy
24.12.2008, 23:43
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.

l0dsb
25.12.2008, 00:58
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

Tomo
25.12.2008, 23:09
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 :(

Pammy
26.12.2008, 00:29
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 =)

s23_
26.12.2008, 01:03
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.

Pammy
26.12.2008, 01:05
Kann ich wenn ich den Zufallsgenerator nach der Zeit stelle denn auch einen Bereich festlegen?

s23_
26.12.2008, 01:10
Mit 'nem Modulo könntest du das Beispielsweiße einschränken:
zufall = rand() % 100

=> Zahlen von 0 bis 100.

Pammy
26.12.2008, 01:12
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

s23_
26.12.2008, 01:15
Fast.. in deinem Quelltext oben fehlt

srand(time(NULL));
:)

Pammy
26.12.2008, 01:19
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))

wolf
26.12.2008, 01:59
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

s23_
31.12.2008, 00:07
@-[RiDER]-:

Ja, so macht man das normal.. Wollte ihm jedoch einfachen Code bieten, den er auch versteht. :)