Zufallsfunktion für blutige Anfänger
-
Hallo,
ich habe nochmal eine Frage. Ich bin wirklich blutiger Anfänger. Ist schwierig, wenn man keinen Ansprechpartner hat...
Ich lerne C++ mit dem Buch "Einstieg in C++" von Arnold Willemer.
Dort gibt es folgende Musterlösung für das Problem, dass der Computer eine zufällige Zahl zwischen 1 und 1000 aussucht und der Nutzer eine Zahl eingiebt und sieht, ob die größer, kleiner oder richtig bezogen auf die Zufallszahl ist.
Der Code lautet so:
[/code]
#include <iostream>
#include <cstdlib>
using namespace std;int main()
{
int Geraten;
int SuchZahl;
srand(time(0));
SuchZahl = rand() % 1000 + 1;
do
{
cout << "Eine Zahl zwischen 1 und 1000!" << endl;
cin >> Geraten;
if (Geraten < SuchZahl)
{
cout << "zu klein!" << endl;
}if (Geraten > SuchZahl)
{
cout << "zu gross!" << endl;
}
}
while (Geraten != SuchZahl);
cout << "Das war richtig!" << endl;
}Vor allem weiss ich nicht, was der Teil "time(0)" in "srand(time(0));" genau soll und woher der kommt. Auch die nächste Zeile ist mir nicht ganz klar.
Naja, das wäre mein kleines Problem. Hoffentlich nicht zu winzig für die Veteranen

Liebe Grüße von Dietrich
-
Als einzige Frage aus Deinem Post konnte ich entziffern, was das time(0) bei srand soll. time(0) ermittelt die aktuelle Zeit. Diese wird genutzt, um den Zufallszahlengenerator zu initialisieren, damit der bei einem anderen Zeitpunkt (der ja immer ist), auch andere Zufallszahlen erzeugt, sonst würden die sich ja ständig wiederholen.
Zahl liefert dann eine mächtig große Zufallszahl. Mit % weist man die Zahl in die Schranken, weil alles ab 1000 wieder bei 0 anfängt. Also haben wir eine Range von 0-999. Da wir aber eine Zahl von 1-1000 wollen, rechnen wir +1. Tadaaaa!
-
srand(time(0));Du willst doch sicher, dass jedesmal, wenn du dein Programm startest, eine neue, völlig andere Zufallszahl erzeugt wird, wenn du
rand()benutzt, oder?
Nun, dafür musst du den Zufallsgenerator, der hinterrand()steckt, richtig seeden. Das Problem hierbei ist, dass "richtig seeden" bedeutet, bei jedem Programmstart anders zu seeden.Hierfür bietet sich die Zeit an.
time(0)gibt die Anzahl der Sekunden seit dem 1. Januar 1970 zurück, die sich natürlich ständig erhöht. Nimmt man also diese Zahl als Parameter, wird jedes mal anders geseeded.Edit: Er meint mit
Zahl liefert dann eine mächtig große Zufallszahl.
eine Zahl im Intervall
[0, RAND_MAX].
-
... für die freundliche Hilfe! War ja ganz einfach

Dietrich