vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Verschiedenes / Sonstiges   |   VB-Versionen: VB4, VB5, VB629.05.01
Lottozahlen 6 aus 49

Generieren von Zufallszahlen im Bereich 1-49 unter Berücksichtigung bereits ermittelter Zahlen.

Autor:   Dieter OtterBewertung:  Views:  61.670 
www.tools4vb.deSystem:  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



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.