VB -17: Randomize

Zufall oder doch nicht?

Ihr habt es sicher alle inzwischen gemerkt : Wir können zwar nicht vorhersagen, welche Zahlenfolge unser Zufallsgenerator bringt, bevor wir unser Programm zum allerersten mal gestartet haben, dennoch sind unsere Zahlen nicht ganz zufällig. Nach jedem Programmstart läuft immer die gleiche Zahlenfolge ab (7,6,6,4,4,8,2...). Solange wir genügend Zahlen zur Auswahl haben, ist das zwar nicht besonders schlimm, aber dennoch könnte es irgendwann langweilig werden.

Wir nehmen also unseren Zufallsgenerator nochmal genauer unter die Lupe! Wir haben die Funktion RND bisher ohne Argument benutzt. Man kann jedoch auch ein Argument übergeben, um dem Zufall ein wenig ins Handwerk zu pfuschen. Es hängt dabei auch vom Vorzeichen des Arguments ab, was unser Zufallsgenerator ausspuckt.

Ein negatives Argument ergibt immer die gleiche Zahl, z.B.

    z = Rnd(-2)            'Zufallszahl (liegt zwischen 0 und 1)
    

ergibt in unserem Beispiel immer 7, eine -5 produziert immer eine 8. Eine positive Zahl (egal welche) oder die 0 bzw. wie in unserem bisherigen Beispiel ergibt immer eine gleichablaufende Folge (7,6,6,4,4,8,2...).

Die Null (oder kein Argument) hat jedoch eine Sonderstelllung. Sie nimmt eine intern im Zufallsgenerator erzeugte Zahl als Basis für die Folge. Wenn es uns also gelingt, diese interne Zahl zu beeinflussen (wie beim ehrlichen "Kartenmischen"), dann können wir wirklich mit einem "Zufall" rechnen. Dazu gibt es die Funktion "Randomize". Sie initialisiert den Zufallsgenerator!

    Function Zufallszahl(ByVal min, ByVal max)
        Randomize          'Zufallsgenerator initialisieren
        z = Rnd            'Zufallszahl (liegt zwischen 0 und 1)
        Zufallszahl = Int(min + (max - min + 1) * z)
    End Function
    

Beispielprojekt laden

Wenn wir jetzt unser Programm laufen lassen, hat auch ein "Supergedächtnis" keine Chance mehr, die Zahlenfolge ist nicht mehr vorhersehbar!

Anmerkung: Auch "Randomize" kann einen Anfangswert als Argument bekommen, doch ich will das Thema nicht zu sehr ausweiten , lassen wir das Argument weg, nimmt Randomize automatisch "Timer" als Argument und das soll uns als Zufall reichen.

Soviel zur Theorie der Zufallszahlengeneratoren, ich hoffe, das Thema war nicht allzu trocken.

zurück Index weiter


© Copyright 1998-2000 J.Behling EMail schreiben ABC-Ware's Homepage
Weitergabe und Druck (auch in Teilen, mit Ausnahme von Privatgebrauch) ohne ausdrückliche Genehmigung der Autorin untersagt.