Zufallszahlen

Hallo Leute!
Bin ein Programmiernewbie und würde mir gerne einen
Lottogenerator programmieren der mir wenn ich einen Startbutton drücke 6 Zufallszahlen zwischen 1-46 ausgiebt.
Habe Visual Basic Express Edition…
Kann mir jemand ein Buch empfehlen zu Visual Basic Express…Zum Selbststudium?
Lg aus Oberösterreich und Danke im Vorraus!

Hallo,

Bin ein Programmiernewbie und würde mir gerne einen
Lottogenerator programmieren der mir wenn ich einen
Startbutton drücke 6 Zufallszahlen zwischen 1-46 ausgiebt.
Habe Visual Basic Express Edition…

VB-Express kenne ich nicht, mit VB wäre es sinnvoll, den Zufallsgenerator erst mal zu initialisieren …

Randomize Timer

… und dann Zahlen zu ziehen. …

R = Int(Rnd(1) \* 46 ) + 1


Rnd(1) erzeugt eine Zufallszahl zwischen 0 und 1. Mit 46 Multipliziert ergibt das Zahlen > 0 und

Hallo Rainer!
Danke für den Tip!
Das funktioniert auch nur hab ich ne frage zu randomize timer…
Wenn ich das weglasse…dann bekomme ich immer die selben zahlen präsentiert…
grüsse!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

Das funktioniert auch nur hab ich ne frage zu randomize
timer…
Wenn ich das weglasse…dann bekomme ich immer die selben
zahlen präsentiert…

Ja, ‚Zufallszahlen‘ werden eben auch ‚berechnet‘. Initialisirst Du den Zufallsgenerator nicht, beginnt er immer mit der selben ‚zufälligen‘ Zahl und setz seine Arbeit auch immer in der selben Reihenfolge fort.
Initialisierst Du den mit einer festen Zahl, dann beginnt er auch immer mit der selben Zahl und arbeitet vorhersehbar weiter, aber eben nicht mit der Selben, als würde er nicht initialisiert. Für Verschlüsselungsroutinen kann das sehr nützlich sein, wenn der Wert zur Initialisierung aus einem Passwort errechnet wird.

Um wirklich immer verschiedene, zufällige Zahlen zu bekommen, ist eine Initialisiereun über den Timer sinnvoll. Um dann den selben Ablauf zu bekommen, müßtest Du den Timer neu starten und jedes mal exakt in der selben Millisekunde initialisieren. Das ist parktisch ausgeschlossen.

Gruß, Rainer

Hallo Rainer!(Alter Programmierfux!)

Mit diesem Code funktionierts jetzt!hurra!
Was mich noch stört wenn Zahlen doppelt vorkommen…Aber daran arbeite ich jetzt!:smile:

Randomize()

Dim a, b, c, d, f, g As Integer

a = Int(Rnd(1) * 46) + 1
b = Int(Rnd(1) * 46) + 1
c = Int(Rnd(1) * 46) + 1
d = Int(Rnd(1) * 46) + 1
f = Int(Rnd(1) * 46) + 1
g = Int(Rnd(1) * 46) + 1

txt1.Text = a
txt2.Text = b
txt3.Text = c
txt4.Text = d
txt5.Text = f
txt6.Text = g

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Rainer!(Alter Programmierfux!)

Hi,

Mit diesem Code funktionierts jetzt!hurra!
Was mich noch stört wenn Zahlen doppelt vorkommen…Aber daran
arbeite ich jetzt!:smile:

Randomize()

Dim a, b, c, d, f, g As Integer
dim arr(45) as integer
dim i as integer
for i=0 to 45
arr(i)=i+1
next i

a= arr(Int(Rnd(1) * 46) )
arr(a-1)=arr(45)
b= arr(Int(Rnd(1) * 46) )
arr(b-1)=arr(44)
c= arr(Int(Rnd(1) * 46) )
arr(c-1)=arr(43)
d= arr(Int(Rnd(1) * 46) )
arr(d-1)=arr(42)
e= arr(Int(Rnd(1) * 46) )
arr(e-1)=arr(41)
f= arr(Int(Rnd(1) * 46) )
arr(f-1)=arr(40)

txt1.Text = a
txt2.Text = b
txt3.Text = c
txt4.Text = d
txt5.Text = f
txt6.Text = g

Gruß.Timo

Hallo,

Mit diesem Code funktionierts jetzt!hurra!
Was mich noch stört wenn Zahlen doppelt vorkommen…Aber daran
arbeite ich jetzt!:smile:

Randomize()

Dim a, b, c, d, f, g As Integer

a = Int(Rnd(1) * 46) + 1
b = Int(Rnd(1) * 46) + 1
c = Int(Rnd(1) * 46) + 1
d = Int(Rnd(1) * 46) + 1
f = Int(Rnd(1) * 46) + 1
g = Int(Rnd(1) * 46) + 1

txt1.Text = a
txt2.Text = b
txt3.Text = c
txt4.Text = d
txt5.Text = f
txt6.Text = g

darf ich da ein wenig kritisieren? :wink:
So etwas macht man besser in einer Schleife, da schleichen sich nicht so leicht Fehler ein.
Das hier macht das Selbe:

Randomize Timer
 Dim i
 For i = 0 To 5
 Text1(i).Text = Int(Rnd(1) \* 46) + 1
 Next

Du mußt für ‚Text1‘ nur erst ein Steuerelementefeld erstellen.:
Text1 auf die Form legen, kopieren, einfügen … nun sollte VB fragen, ob Dui ein Steuerelementefeld möchtest. Ja klicken, noch vier einfügen, fertig.

Gruß, Rainer

Hallo Fragewurm,

Das funktioniert auch nur hab ich ne frage zu randomize
timer…
Wenn ich das weglasse…dann bekomme ich immer die selben
zahlen präsentiert…

Grundsätzlich erzeugt ein Computer immer Pseudo zufallszahlen, das bedeutet, dass sich die erzeugte Zahlenreihe irgendwann wiederholt, also einen Kreis bildet. Ein guter ^Generator zeichnit sich dadurch aus, dass es sehr lange geht, bis er sich wiederholt.

Weiterhin, merkt sich der Generatur bei jedem Aufruf die berechnete Zahl, bzw. einen internen Wert und rechnet das nächste mal mit diesem Wert weiter. Beim Starten des Generators, wird deshalb immer mit dem selben Wert begonnen, ausser man überschreibt diesen Wert mit „randomize timer“.

Zum Testen von Programmen kann es Sinnvoll sein, immer mit dem selben Wert anzufangen.
Auch arbeitet man oft bei Simulationen mit Pseudozufallszahlen um grosse Datenmengen zu simulieren. Auch hier macht es Sinn bei jedem Durchlauf verschiedener Modelle die gleiche Zahlenreihe zu verwenden.

MfG Peter(TOO)

cool!
das versteh ich auch…
ziemlich kurz…das mit der überprüfung von doppelten zahlen hab ich so gelöst…
Randomize()

Dim a, b, c, d, f, g As Integer

Do
a = Int(Rnd(1) * 46) + 1
b = Int(Rnd(1) * 46) + 1
c = Int(Rnd(1) * 46) + 1
d = Int(Rnd(1) * 46) + 1
f = Int(Rnd(1) * 46) + 1
g = Int(Rnd(1) * 46) + 1

Loop Until a b And a c And a d And a f And a g And b c And b d And b f And b g And c d And c f And c g And d f

txt1.Text = a
txt2.Text = b
txt3.Text = c
txt4.Text = d
txt5.Text = f
txt6.Text = g

was kürzeres ist mir nicht eingefallen aber habs 20 mal probiert und nie war eine zahl doppelt!
grüsse

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

cool!
das versteh ich auch…
ziemlich kurz…das mit der überprüfung von doppelten zahlen
hab ich so gelöst…
Randomize()

Dim a, b, c, d, f, g As Integer

Do
a = Int(Rnd(1) * 46) + 1
b = Int(Rnd(1) * 46) + 1
c = Int(Rnd(1) * 46) + 1
d = Int(Rnd(1) * 46) + 1
f = Int(Rnd(1) * 46) + 1
g = Int(Rnd(1) * 46) + 1

Loop Until a b And a c And a
d And a f And a g And b c
And b d And b f And b g And c
d And c f And c g And d f

Erstens nicht sehr optimiert (kann im worst-case ewig dauern; siehe dir meinen Vorschlag im Posting weiter oben an).
Zweitens: Was ist mit der Überprüfung dg und fg ?
Gruß.Timo

txt1.Text = a
txt2.Text = b
txt3.Text = c
txt4.Text = d
txt5.Text = f
txt6.Text = g

was kürzeres ist mir nicht eingefallen aber habs 20 mal
probiert und nie war eine zahl doppelt!
grüsse