Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Zufallszahlen verwenden

von RedakteurnemoredSeite 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 BefehlsreferenzeintragRANDOMIZE 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 BefehlsreferenzeintragTIMER ins Spiel. TIMER gibt in FreeBASIC die vergangenen Sekunden seit Systemstart (unter DOS/Windows) bzw. seit der Externer Link!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 Externer Link!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 BefehlsreferenzeintragRND der zweite Befehl zum Zug. RND gibt eine BefehlsreferenzeintragDOUBLE-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?

 

Gehe zu Seite Gehe zu Seite  1  2  3  4  5  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 03.09.2011 von Redakteurnemored angelegt.
  • Die aktuellste Version wurde am 30.11.2020 von Redakteurnemored gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen