TEIL 9: ZUFALLSZAHLEN, Aufgaben 49 bis 53
Will man Zufallsexperimente wie z.B. Würfelspiele simulieren, so braucht man dazu einen Generator von Zufallszahlen. Dies wird in VBasic durch die
RND-Funktion (random = zufällig) und die
RANDOMIZE-Anweisung, die dafür sorgt, daß die RND-Funktion nicht immer dieselben Zahlenfolgen generiert, realisiert.
Die
Rnd-Funktion kann mit
rnd oder
rnd(Zahl) aufgerufen werden. Für die Rückgabewerte gilt:
Wert von Zahl |
Generierte Zufallszahl |
Kleiner als Null |
Immer dieselbe Zahl, die als Startwert Zahl verwendet. |
Größer als Null |
Die nächste Zufallszahl in der Folge. |
Gleich Null |
Die zuletzt generierte Zahl. |
Nicht angegeben |
Die nächste Zufallszahl in der Folge. |
Die Rnd-Funktion gibt einen Wert zurück, der kleiner als 1, aber größer als oder gleich Null ist.
Der Wert von Zahl bestimmt, wie Rnd eine Zufallszahl generiert:
Für jeden gegebenen Standardwert wird dieselbe Zufallszahlenfolge generiert, weil bei jedem nachfolgenden Aufruf der Rnd-Funktion die vorherige Zahl als Startwert für die nächste Zahl in der Folge dient.
Vor dem Aufruf von Rnd verwendet man die Randomize-Anweisung ohne Argument, um den Zufallszahlengenerator mit einem Startwert zu initialisieren, der auf dem Systemzeitgeber basiert.
Besser ist es, die rnd-Funktion mit
randomize (1) zu initialisieren(Würfelexperimente ergeben dann eine bessere Gleichverteilung als bei Verwendung des Timers bei
randomize.
Aufgabe 49
Lies zunächst die Erläuterungen am Anfang dieses Kapitels !!!
Das ff. Programm
ZUFATEST soll lediglich das Arbeiten mit
rnd und
randomize verdeutlichen:
Mit Hilfe der
Format$-Funktion werden die Zufallszahlen gerundet.
Von x,0 bis x,4 wird abgerundet, von x,5 bis x,9 wird hochgerundet.
For i = 1 To 10
Randomize (1)
zahl_1 = Rnd
Text4.Text = "rnd = " + Str(zahl_1)
zahl_1 = zahl_1 * 10
Text1.Text = "zahl_1*10 = " + Str(zahl_1)
zahl_1 = Format$(zahl_1, "0")
Text2.Text = "Format$(zahl_1, '0') = " + Str(zahl_1)
zahl_1 = Val(Str(zahl_1))
Text3.Text = "val (str(zahl_1)) = " + Str(zahl_1)
Next i
Denke daran, auch eine EXE-Datei zu erstellen!
Aufgabe 50
Im Programm ZUFALL_1 wird wieder zahl_1 = rnd benutzt. Durch geeignete Multiplikation und Formatierung können dann jeweils 10 Zufallszahlen in gewünschten Bereich ausgegeben werden:
Als Beispiel die Zählschleife für den Bereich - 5 bis + 5:
For i = 1 To 10
Randomize (1)
zahl_1 = Rnd
zahl_1 = zahl_1 * 10 - 5
Text1.Text = Text1.Text + " " + Str(zahl_1)
Next i
Alles weitere sollte kein Problem mehr für dich sein. Speichere nach Abschluß der Arbeit Zufall_1 auch noch als Zufall_2, das spart Arbeit beim Anlegen des Formulars und auch beim Eintippen des Programmcodes.
Aufgabe 51
In dieser Aufgabe
ZUFALL_2 soll überprüft werden, ob unsere "Würfel" auch nicht manipuliert sind: bei jedem Wurf soll mitgezählt werden, wie oft die jeweilige Augenzahl gewürfelt wurde:
Die Labels 1 bis 6 und die Textboxen 1 bis 6 sollen für das Mitzählen sein, Label 7 soll die caption-Eigenschaft "Augenzahl" haben, die 7. Textbox darunter soll die jeweils gewürfelte Augenzahl anzeigen.
Für die einzelnen Augenzahlen werden verschiedene Zähler definiert, die in einer select-case-Anweisung heraufgesetzt werden.
Es wird solange gewürfelt (
do ... loop until ... ), bis eine der Augenzahlen 1 bis 6 erreicht wird.
Nur wenn 1 bis 6 gewürfelt wurde, wird dies in der 7. Textbox angezeigt (
if ... end if). Die 6 Zähler werden dann in der
select-case-Mehrfach-Abfrage hochgesetzt.
Mit der Lösungshilfe sollten nun keine Fragen mehr offen sein :
Wenn Zufall_2 fertig und gespeichert ist, speichere es noch ein 2. Mal unter dem Namen Zufall_3.
Aufgabe 52
In zufall_3 soll solange gewürfelt werden, bis der Würfel eine 6 zeigt. Die Anzahl der Würfe soll mitgezählt werden:
Hier gibt es nicht Neues, du solltest alles allein programmieren können.
Denke ans Speichern nach getaner Arbeit und speichere ein 2. Mal unter dem Namen zufall_4.
Aufgabe 53
Diesmal sollen 200 Zufallsexperimente ausgeführt werden. Es soll die durchschnittliche Anzahl der Würfe, die man dabei bis zur 6 braucht, angezeigt werden.
Hier wieder Lösungshilfen, erst mal durchdenken, dann erst abpinseln !!!
Speichern nicht vergessen !!! Auch mal wieder an's Ausdrucken der Programmcodes von zufatest, zufall_1 bis zufall_4 denken !!!