Zufallsgenerator

Die Funktion heißt rand().

Sie liefert eine Zufallszahl im Bereich 0 bis RAND-MAX, wobei RAND-MAX eine vordefinierte symbolische Konstante ist, deren Wert vom verwendeten Compiler abhängt. Der C++-Standard (gemeint ist der ANSI/ISO-Standard) schreibt diesbezüglich keinen bestimmten Wert vor. Bei den meisten Compilern - so bei dem von Borland wie auch beim Visual C++-Compiler - entspricht dieser Wert 32767, sodass ein Aufruf von rand() eine Zufallszahl zwischen 0 und 32767 liefert.

Der Ausdruck rand() gibt einen Wert an das Programm zurück, der dem Rück­gabewert der aufgerufenen Funktion entspricht.

Demnach kann man die­sen Ausdruck einfach cout übergeben.

z.B.

#include <iostream> 

using namespace std;

void main(void)

{

cout << rand();

}

Ausgabe ist eine Zahl zwischen 0 und 32767 - wobei wir hier vorausset­zen, dass RAND-MAX dem Wert 32767 entspricht.

rand() ist in einer der Bibliothek enthalten, die im Header aufgerufen werden muss.

#include <cstdlib>

Um den Rückgabewert der Funktion rand() - die geloßste Zahl - dauerhaft festzuhalten, können Sie diesen auch in einer Variablen speichern. 

z.B.

#include <iostream>

#include <cstdlib> 

using namespace std;

void main(void)

{

int glueck; 

glueck = rand(); 

cout << glueck;

}

Falls Sie das Programm wiederholt ausführen, werden Sie feststellen, dass immer die gleiche Folge von Zufallszahlen ausgeloßt wird. Dies liegt daran, dass der Zufallsgenerator mit einem Algorithmus arbeitet, der auf einem Startwert basiert, wobei sich aus einem bestimmten Startwert auch stets die gleiche Folge von Zufallszahlen ergibt. Der Zufallsgenerator benutzt permanent den Startwert 1, falls ihm nicht durch einen Aufruf der Funktion srand() (Startwert von ran()) ein anderer Ausgangswert übermittelt wird. Der Funktion srand() ist beim Aufruf der gewünschte Startwert zu übergeben. 

Der Aufruf srand(5) initialisiert den Zufallsgenerator folglich mit dem Wert 5. Allerdings führt dies auch nicht zum gewünschten Ergebnis, da sich nun zwar eine andere, jedoch sich ebenfalls stets wiederholende Folge von Zufallszahlen ergibt.

Das Problem lässt sich lösen, indem man srand() den Rückgabewert der Funktion time() übergibt und zwar in der Form

srand(time(NULL)) wobei der Ausdruck time(NULL)

die seit dem 1. Januar 1970 vergangenen Sekunden als Integerwert zurückliefert. Somit ist sichergestellt, dass sich dieser Wert von Pro­grammstart zu Programmstart ändert.

Über den Parameter NULL brauchen Sie sich hier noch keine Gedanken zu machen - es handelt sich um einen so genannten Nullzeiger

Wenn Sie in Ihren Program­men Zufallszahlen benötigen, initialisieren Sie den Zufallsgenerator einfach mit der Anweisung

srand(time(NULL));

Um die Funktion rand() sinnvoll verwenden zu können, muss diese Ini­tialisierung vor dem ersten Aufruf von rand( ) erfolgen, und zwar nur ein einziges Mal. 

Für die Funktion time() ist es erforderlich, die Headerdatei ctime einzubinden.

#include <iostream> 

#include <ctime>

using namespace std;

void main(void)

{

srand(time(NULL));

cout « rand() « endl; 

}

Eingrenzen der Zufallszahl auf einen kleineren Bereich. 

Hierzu bietet sich der Modulo-Operator an. 

Der A%B gibt den Restwert einer Integerdivision z.B.A / B an. Das besondere daran ist, er kann nie größer als B 1 sein. Die möglichen Werte, die dieser Aus­druck annehmen kann, liegen im Bereich von 0 bis B - 1. 

Um also eine Zufallszahl im Bereich von 0 bis 10 zu erhalten, kann rand() wie folgt verwendet werden:

rand() % 11

Dieser Ausdruck liefert stets Werte im Bereich von 0 bis 10 (einschließlich). Möchte man eine Zufallszahl im Bereich von 1 bis 10, lautet der entsprechende Ausdruck:

(rand() % 10) + 1

Wie muss nun der Bereich zum Auslosen einer Lottozahl eingegrenzt werden?