Tutorial
Zufallszahlen verwenden
von nemored | Seite 2 von 5 |
Initialisierung des Zufallsgenerators
Zur Erzeugung von Zufallszahlen werden zwei Befehle benötigt. Zunächst einmal braucht der Computer einen Startwert, von dem aus er die weiteren Zahlen berechnen kann. Dieser "random seed" wird mit dem Befehl RANDOMIZE startwert festgelegt. In der Regel muss RANDOMIZE genau einmal aufgerufen werden, nämlich vor dem Abruf der ersten Zufallszahl. Der Zufallsgenerator muss also nicht vor jeder neuen Zufallszahl neu initialisiert werden.
RANDOMIZE ist so ausgelegt, dass bei der Angabe desselben Startwerts auch dieselbe Zufallsfolge erzeugt wird. Das hat seine Vorteile, wenn man eine einmal erzeugte Zahlenfolge bei einem späteren Programmstart erneut erhalten möchte. Wenn die Zahlenfolge aber bei jedem Programmdurchlauf anders verlaufen soll, dann benötigt man einen Startwert, der sich von Programmstart zu Programmstart unterscheidet.
An dieser Stelle kommt TIMER ins Spiel. TIMER gibt in FreeBASIC die vergangenen Sekunden seit Systemstart (unter DOS/Windows) bzw. seit der Unix-Epoche (unter Linux und anderen unixartigen Betriebssystemen) zurück. Nur wenn das Programm zweimal in derselben Sekunde gestartet wird, erhält man beide Male dieselbe Zufallsfolge. Daher hat sich zur Initialisierung des Zufallsgenerators der Befehl RANDOMIZE TIMER eingebürgert. FreeBASIC geht hier noch einen Schritt weiter: wenn Sie keinen Startwert angeben, dann wird automatisch ein auf TIMER basierender Startwert verwendet. Dieser unterliegt noch nicht einmal der Sekundengenauigkeit - auch zwei in derselben Sekunde gestarteten Programme erhalten so gut wie sicher zwei verschiedene Startwerte.
Wie Sie aus der Befehlsreferenz entnehmen können, erlaubt RANDOMIZE auch noch die Angabe eines zweiten Parameters, um den Algorithmus zur Berechnung der Zufallszahlen festzulegen. Darüber werden Sie sich in den allermeisten Fällen aber keine Gedanken machen müssen. Als Standard verwendet FreeBASIC den Mersenne-Twister-Algorithmus, der hochwertige Ergebnisse erzielt. Sollten Sie also einfach nur eine Reihe guter Zufallszahlen benötigen, dann können Sie den Parameter getrost weglassen.
Erzeugung von Zufallszahlen
Nachdem der Zufallsgenerator nun initialisiert ist, geht es an die Erzeugung der Zufallszahlen. Hier kommt mit RND der zweite Befehl zum Zug. RND gibt eine DOUBLE-Zahl zwischen 0 und 1 zurück - genauer gesagt eine Zahl im Intervall [0; 1[ (von einschließlich 0 bis ausschließlich 1). Diese Zahl wird auch zur Berechnung der nächsten RND-Zahlen verwendet, sodass ein mehrmaliger Aufruf von RND mehrere verschiedene Zahlen erzeugt (die Darstellung ist etwas vereinfacht - genaueres lesen Sie im oben verlinkten Wikipedia-Artikel).
Das wollen wir bis hierher erst einmal in einem kurzen Programm festhalten.
Beispiel zur Erzeugung von zehn Zufallszahlen:
RANDOMIZE ' Zufallsgenerator initialisieren
FOR i AS INTEGER = 1 TO 10
PRINT RND ' Zufallszahl erzeugen und ausgeben
NEXT
SLEEP
Soweit, so gut - was aber, wenn man Zahlen in einem anderen Bereich erzeugen möchte?
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|