WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Lotto Zahlengenerator funkt nicht ganz richtig (http://www.wcm.at/forum/showthread.php?t=165322)

coolbininet 07.05.2005 13:14

Lotto Zahlengenerator funkt nicht ganz richtig
 
Hallo, habe folgendes Programm geschrieben, dass mir die Lottozahlen ausgeben soll. Diese simuliert die Ziehung bei aw = 1 und ew = 45 aber so, als ob die Zahlen wieder in den "Topf" zurückgelegt werden würden, sprich ich muss jetzt sobald die zahl innerhalb des Intervalls
gezogen wurden, diese aus der Grundmenge der zu ziehenden Zahlen entfernen, wie mache ich das? Hier das Skript:

Public Function zufallszahl(aw, ew)
Dim k, zahl As Integer
k = 0
zahl = 0
Do While (k < 6)
zahl = Int(((ew - aw + 1) * Rnd) + aw)
Debug.Print zahl
k = k + 1
Pause 1
Loop
Debug.Print ("Sechser komplett")
End Function

In Erwartung auf eine Antwort verbleibe ich

Grüsse Coolbininet

Flink 07.05.2005 15:00

Alle Zahlen in einem Feld der Größe 6 zwischenspeichern.
Um den
Code:

zahl = Int(((ew - aw + 1) * Rnd) + aw)
nochmals eine Schleife bilden, in der mit einer IF-Abfrage über die 6-Feld-Elemente überprüft wird, daß die Zahl noch nicht gezogen worden ist.

coolbininet 07.05.2005 15:14

So habe ich mir dass auch gedacht, nur wo und wie schaut der Code dann aus?

Grüße Coolbininet

pong 07.05.2005 22:50

Zitat:

Original geschrieben von coolbininet
So habe ich mir dass auch gedacht, nur wo und wie schaut der Code dann aus?

Grüße Coolbininet

Pseudo Code
schalter function_gezogen(char *zahlen, char zahl, unsigned int max)
int i=0
set schalter-nicht-gezogen to true
while(i < max)
if (zahlen[i] = zahl)
then set schalter-gezogen to true
end-if
return schalter

pong

Sesa_Mina 08.05.2005 11:01

Hier eine Variante die 6 Zahlen ermittelt und auch noch die Zusatzzahl.

Im Anschluss werden die Zahlen aufsteigend sortiert ausgegeben :)

Private Function LottoZ(AW As Byte, EW As Byte)
Dim Zahlen() As Byte, Zaehler As Byte, Zahl As Byte
Dim Output As String
' AW/EW vertauschen falls AW größer EW
If AW > EW Then Zahl = EW: EW = AW: AW = Zahl
' Zu kleiner Bereich? Geht nicht.
If (EW - AW) < 7 Then MsgBox "Fehler! Zahlenbereich zu klein!", vbOKOnly: End
ReDim Zahlen(EW) ' Hier merken wir uns die gezogenen Zahlen
Zaehler = 0: Output = ""
Randomize Timer
Do
Zahl = Int(Rnd * ((EW + 1) - AW)) + AW ' Zahl auswählen
If Zahlen(Zahl) = 0 Then ' Zahl überprüfen. Eintragen wenn frei
If Zaehler < 6 Then Zahlen(Zahl) = 1 Else Zahlen(Zahl) = 2
Zaehler = Zaehler + 1 ' Zähler raufsetzen wenn ok
Debug.Print "*"
End If
Loop Until Zaehler = 7

Output = "Die Lottozahlen: "
For Zahl = AW To EW
If Zahlen(Zahl) = 1 Then Output = Output & Zahl & ", "
Next
For Zahl = AW To EW
If Zahlen(Zahl) = 2 Then Output = Output & "Zusatzzahl: " & Zahl
Next
MsgBox Output, vbOKOnly
End Function

coolbininet 08.05.2005 12:41

Habe mich sehr gefreut liebe Sesa_Mina!
 
Es klappt aber nicht!

Fehlermeldung 'Laufzeitfehler 13' Typen unverträglich!

Was ist da unverträglich?

Bytheway wie kann ich in VB ein Integerarray "befüllen" und gleichzeit dann wieder etwas daraus auslesen?

Dachte immer das "Befüllen" geht so:

Dim longarray as Long
Redim longarray(12,125,25,25)

Aber wie bekomme ich die Werte da wieder heraus, ZB in eine MSGBOX?
Meine VB-Hilfe lässt mich da im Dunklen tappen!


Grüße Coolbininet

Grüße

coolbininet 08.05.2005 12:41

Habe mich sehr gefreut liebe Sesa_Mina!
 
Es klappt aber nicht!

Fehlermeldung 'Laufzeitfehler 13' Typen unverträglich!

Was ist da unverträglich?

Bytheway wie kann ich in VB ein Integerarray "befüllen" und gleichzeit dann wieder etwas daraus auslesen?

Dachte immer das "Befüllen" geht so:

Dim longarray as Long
Redim longarray(12,125,25,25)

Aber wie bekomme ich die Werte da wieder heraus, ZB in eine MSGBOX?
Meine VB-Hilfe lässt mich da im Dunklen tappen!


Grüße Coolbininet

Grüße

coolbininet 08.05.2005 12:42

Habe mich sehr gefreut liebe Sesa_Mina!
 
Es klappt aber nicht!

Fehlermeldung 'Laufzeitfehler 13' Typen unverträglich!

Was ist da unverträglich?

Bytheway wie kann ich in VB ein Integerarray "befüllen" und gleichzeit dann wieder etwas daraus auslesen?

Dachte immer das "Befüllen" geht so:

Dim longarray as Long
Redim longarray(12,125,25,25)

Aber wie bekomme ich die Werte da wieder heraus, ZB in eine MSGBOX?
Meine VB-Hilfe lässt mich da im Dunklen tappen!


Grüße Coolbininet

Grüße

Sesa_Mina 08.05.2005 13:02

mein code funktioniert in vb6 in jedem fall (getestet!)

ad array werte zuweisen / auslesen

Dim Array()
Redim Array(Anzahlfelder)
Array(FeldIndex) = Wert
Wert = Array(FeldIndex)


Damit das mit redim funktioniert muss die Variable auch als Array deklariert sein was du nicht getan hast.

Dim Longarray() as long
wäre die richtige deklaration.
Das Klammerpaar ist hier wichtig weil das VB mitteilt dass die variable ein Array ist.


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag