Rubrik: Verschiedenes / Sonstiges | VB-Versionen: VB4, VB5, VB6 | 29.05.01 |
Lottozahlen 6 aus 49 Generieren von Zufallszahlen im Bereich 1-49 unter Berücksichtigung bereits ermittelter Zahlen. | ||
Autor: Dieter Otter | Bewertung: | Views: 61.693 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Aus gegebenem Anlass (wir hatten diesbezüglich eine an uns gerichtete Anfrage) möchten wir Ihnen heute einen Routine zum Generieren von Lotozahlen 6 aus 49 vorstellen. Beim Erzeugen der Zufallszahlen muss sich die Zahl immer zwischen 1 und 49 befindet. Außerdem darf eine bereits ermittelte Zahl nicht doppelt "gezogen" werden.
Damit keine Zahlen doppelt vorkommen, wird jede ermittelte "Lottozahl" in einem Array-Datenfeld gespeichert. Beim Ermitteln der nächsten "Lottozahl" wird dann zunächst das Datenfeld nach der gezogenen Zahl durchsucht. Befindet sich die Zahl bereits im Datenfeld, wird eine neue Zufallszahl generiert.
' Array für die gezogenen Lottozahlen Dim Lottozahl(6) As Integer
Lotto 6 aus 49
' Sicherstellen, daß bei jedem Start wirklich ' eine neue Zufallszahl generiert wird Randomize -Timer ' Insgesamt 6 Zufallszahlen ermitteln Dim Ziehung As Integer Dim i As Integer Dim Result As Boolean Dim Zahl As Integer Ziehung = 0 While Ziehung < 6 Ziehung = Ziehung + 1 Do ' Zufallszahl 1..49 Zahl = Int(49 * Rnd + 1) ' Prüfen, ob Zufallszahl bereits "gezogen" Result = True For i = 1 To Ziehung - 1 If Lottozahl(i) = Zahl Then Result = False: Exit For End If Next i Loop Until Result = True Lottozahl(Ziehung) = Zahl Wend ' Lottozahlen anzeigen Dim Msg As String Msg = "Die Lottozahlen lauten: " For i = 1 To 6 Msg = Msg & Format$(Lottozahl(i)) & " " Next i MsgBox Msg
Erläuterungen zur Do...Loop-Schleife
Innerhalb der Do...Loop-Schleife wird zunächst eine Zufallszahl im Bereich 1 bis 49 ermittelt. Danach wird mittels einer For...Next-Schleife geprüft, ob diese Zahl bereits in einem früheren Durchlauf ermittelt wurde. Die For...Next-Schleife hat immer Ziehung - 1 Durchläufe, d.h. bei der ersten Ziehung (es sind ja noch keine Zahlen zuvor gezogen worden) erfolgen 0 Schleifen-Durchläufe, was ja durchaus logisch ist. Die ermittelte Zahl wird dann im Array-Feld Lottozahl(1) gespeichert. Im nächste Durchlauf hat die Variable Ziehung den Wert 2. Innerhalb der Do...Loop-Schleife wird wiederum eine Zufallszahl generiert. Dann erfolgen 2-1 (also 1) Durchläufe, um zu prüfen, ob die Zahl bereits zuvor ermittelt wurde. Ist dies der Fall wird die Variable Result auf False gesetzt, so daß die Do...Loop-Schleife erneut durchlaufen wird. Ist die Zahl noch nicht vorhanden, wird sie im Datenfeld Lottozahl(2) gespeichert. Und ganau nach diesem Schema geht es weiter, bis eben 6 unterschiedliche Zahlen aus dem Wertebereich 1 bis 49 ermittelt werden konnten.
Erläuterungen zur Rnd-Funktion
Das Ermitteln einer Zufallszahl erfolgt in Visual-Basic mit Hilfe der Rnd-Funktion. Die Rnd-Funktion gibt hierbei eine Zahl im Berich 0 und <1 zurück. Um nun eine Ganzzahl in einem vorgegebenen Wertebereich zufällig zu ermitteln, geht man folgendermaßen vor:
Zahl = Int((Obergrenze - Untergrenze + 1) * Rnd + 1)
Obergrenze steht für die höchste Zahl und Untergrenze für die niedrigste Zahl. Das bedeutet also für das Würfel-Experiment:
Zahl = Int((6 - 1 + 1) * Rnd + 1)
was ja gleichbedeutend ist mit:
Zahl = Int(6 * Rnd + 1)
Zu beachten ist noch, daß Rnd immer die selben Zufallszahlen generiert. Um dies zu verhindern, dient der Ausdruck:
Randomize -Timer