Random Lottozahlen Löser

  • Hey, ich hab die letzten Tage mich gefragt was ich amchen soll und bin dann auf die Idee gekommen zu gucken wie viele Versuche der Computer brauch durch zufall 6 Richtige zu bekommen. Es werden auch angezeigt wenn 1 Richtiger und so weiter.
    Der Sinn von dem Programm... Naja man kann sich drüber streiten :) aber man sieht z.B. nach wie vielen Versuchen man wie viele Richtige hatte.
    Da dashier mein Erstes veröffentlichtes Programm ist, hoffe ich es gefällt euch. Ich nehme auch gerne Kritik entgegen, aber Lob wird auch gerne gesehen ;). Verbesserungsforschläge einfach Posten.
    PS: Alles was Grün makiert ist war mein Erster Versuch :D Da kann man mal gucken wozu Arrays alles gut sind.

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <EditConstants.au3>
    $kkk = 0
    $jjjj = 0
    $iiii = 0
    $2 = 0
    $3 = 0
    $4 = 0
    $5 = 0

    [/autoit] [autoit][/autoit] [autoit]

    Dim $aInput[6], $aLabel[6], $aInputRead[6], $aRandom[6]
    Global $x = 0, $y = 0, $versuche = 0, $gcsd = 0

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Lotto Wahrscheinlichkeitsrechner", -1, -1)
    GUISetBkColor(0x5099FF)
    For $k = 0 To 5
    $aInput[$k] = GUICtrlCreateInput("", $x, 0, 50, 50, $ES_CENTER)
    GUICtrlSetFont(-1, 30)
    $x += 55
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $x = 0
    ;===================================================LABEL==================================================
    For $i = 0 To 5

    [/autoit] [autoit][/autoit] [autoit]

    $aLabel[$i] = GUICtrlCreateLabel(" X", $x, 200, 50, 50)
    GUICtrlSetBkColor(-1, 0xff0000)
    GUICtrlSetFont(-1, 30)
    $x += 55
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $hLosGehtsButton = GUICtrlCreateButton("Rechnung starten", 10, 60, 380, 50)
    $hLabe6Richtiger = GUICtrlCreateLabel("1 Richtiger: " & $jjjj, 10, 260, 2000)
    $hLabe2Richtiger = GUICtrlCreateLabel("2 Richtige: " & $2, 10, 280, 2000)
    $hLabe3Richtiger = GUICtrlCreateLabel("3 Richtige: " & $3, 10, 300, 2000)
    $hLabe4Richtiger = GUICtrlCreateLabel("4 Richtige: " & $4, 10, 320, 2000)
    $hLabe5Richtiger = GUICtrlCreateLabel("5 Richtige: " & $5, 10, 340, 2000)
    $hLabel1Richtiger = GUICtrlCreateLabel("6 Richtige: " & $kkk, 10, 360, 2000)
    $hDurchlauf = GUICtrlCreateLabel("Durchläufe: " & $iiii, 10, 380, 2000)
    GUICtrlSetFont(-1, 15)
    GUICtrlCreateLabel("Anzahl der Versuche:", 10, 170)

    [/autoit] [autoit][/autoit] [autoit]

    $hStopBtn = GUICtrlCreateButton("STOP", 10, 110, 380, 50)
    GUISetState()
    _leerlauf()
    Func _leerlauf()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $Gui_Event_Close
    Exit
    Case $hLosGehtsButton
    _Lotto_Zufall()
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_leerlauf

    [/autoit] [autoit][/autoit] [autoit]

    Func _Lotto_Zufall()
    For $0 = 0 To 5
    $aInputRead[$0] = GUICtrlRead($aInput[$0])
    Next
    For $stayawayknight = 0 To 5
    If $aInputRead[$stayawayknight] >= 50 Then
    MsgBox(0, "Fehler", "Eine Zahl ist größer als 49! Bitte nur Zahlen von 1 - 49 eintragen.")
    _leerlauf()
    EndIf
    Next
    If $aInputRead[0] = $aInputRead[1] Or $aInputRead[0] = $aInputRead[2] Or $aInputRead[0] = $aInputRead[3] Or $aInputRead[0] = $aInputRead[4] Or $aInputRead[0] = $aInputRead[5] Then
    MsgBox(0, "Fehler", "Es ist ein Fehler aufgetreten")
    _leerlauf()
    EndIf
    If $aInputRead[1] = $aInputRead[0] Or $aInputRead[1] = $aInputRead[2] Or $aInputRead[1] = $aInputRead[3] Or $aInputRead[1] = $aInputRead[4] Or $aInputRead[1] = $aInputRead[5] Then
    MsgBox(0, "Fehler", "Es ist ein Fehler aufgetreten")
    _leerlauf()
    EndIf
    If $aInputRead[2] = $aInputRead[1] Or $aInputRead[2] = $aInputRead[0] Or $aInputRead[2] = $aInputRead[3] Or $aInputRead[2] = $aInputRead[4] Or $aInputRead[2] = $aInputRead[5] Then
    MsgBox(0, "Fehler", "Es ist ein Fehler aufgetreten")
    _leerlauf()
    EndIf
    If $aInputRead[3] = $aInputRead[1] Or $aInputRead[3] = $aInputRead[2] Or $aInputRead[3] = $aInputRead[0] Or $aInputRead[3] = $aInputRead[4] Or $aInputRead[3] = $aInputRead[5] Then
    MsgBox(0, "Fehler", "Es ist ein Fehler aufgetreten")
    _leerlauf()
    EndIf
    If $aInputRead[4] = $aInputRead[1] Or $aInputRead[4] = $aInputRead[2] Or $aInputRead[4] = $aInputRead[3] Or $aInputRead[4] = $aInputRead[0] Or $aInputRead[4] = $aInputRead[5] Then
    MsgBox(0, "Fehler", "Es ist ein Fehler aufgetreten")
    _leerlauf()
    EndIf
    If $aInputRead[5] = $aInputRead[1] Or $aInputRead[5] = $aInputRead[2] Or $aInputRead[5] = $aInputRead[3] Or $aInputRead[5] = $aInputRead[4] Or $aInputRead[5] = $aInputRead[0] Then
    MsgBox(0, "Fehler", "Es ist ein Fehler aufgetreten")
    _leerlauf()
    EndIf
    _anfangen()
    EndFunc
    Func _anfangen()
    While 1
    $versuche = 0
    $iiii += 1
    GUICtrlSetData($hDurchlauf, "Durchläufe: " & $iiii)
    For $m = 0 To 5
    $aRandom[$m] = Random(1, 49, 1)
    Next
    ;~ $Random1 = Random(1, 49, 1)
    ;~ $Random2 = Random(1, 49, 1)
    ;~ $Random3 = Random(1, 49, 1)
    ;~ $Random4 = Random(1, 49, 1)
    ;~ $Random5 = Random(1, 49, 1)
    ;~ $Random6 = Random(1, 49, 1)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    For $gcsd = 0 To 5
    GUICtrlSetData($aLabel[$gcsd], $aRandom[$gcsd])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ;~ GUICtrlSetData($aLabel[0], $Random1)
    ;~ GUICtrlSetData($aLabel[1], $Random2)
    ;~ GUICtrlSetData($aLabel[2], $Random3)
    ;~ GUICtrlSetData($aLabel[3], $Random4)
    ;~ GUICtrlSetData($aLabel[4], $Random5)
    ;~ GUICtrlSetData($aLabel[5], $Random6)

    [/autoit] [autoit][/autoit] [autoit]

    $msg = GUIGetMsg()
    Switch $msg
    Case $Gui_Event_Close
    Exit
    Case $hLosGehtsButton
    _anfangen()
    Case $hStopBtn
    _leerlauf()
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;~ For $BadBunnyxD = 0 To 5
    ;~ For $BugFixxD = 0 To 5
    ;~ If $aRandom[$BadBunnyxD] = $aInputRead[$BugFixxD] Then
    ;~ $jjjj += 1
    ;~ GUICtrlSetData($hLabe6Richtiger, "1 Richtiger: " & $jjjj)
    ;~ EndIf
    ;~ Next
    ;~ Next

    [/autoit] [autoit][/autoit] [autoit]

    ;~ For $i2c = 0 To 5
    ;~ For $peethebeexD = 0 to 5
    ;~ If $aRandom[$i2c] = $aInputRead[$peethebeexD] Then
    ;~ $peethebeexD += 1
    ;~ If $aRandom[$i2c] = $aInputRead[$peethebeexD] Then
    ;~

    [/autoit] [autoit][/autoit] [autoit]

    ;~ EndIf
    ;~ Next
    ;~ Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If not $aRandom[0] = $aRandom[1] Or $aRandom[0] = $aRandom[2] Or $aRandom[0] = $aRandom[3] Or $aRandom[0] = $aRandom[4] Or $aRandom[0] = $aRandom[5] _
    Or $aRandom[1] = $aRandom[0] Or $aRandom[1] = $aRandom[2] Or $aRandom[1] = $aRandom[3] Or $aRandom[1] = $aRandom[4] Or $aRandom[1] = $aRandom[5] _
    Or $aRandom[2] = $aRandom[0] Or $aRandom[2] = $aRandom[1] Or $aRandom[2] = $aRandom[3] Or $aRandom[2] = $aRandom[4] Or $aRandom[2] = $aRandom[5] _
    Or $aRandom[3] = $aRandom[0] Or $aRandom[3] = $aRandom[2] Or $aRandom[3] = $aRandom[1] Or $aRandom[3] = $aRandom[4] Or $aRandom[3] = $aRandom[5] _
    Or $aRandom[4] = $aRandom[0] Or $aRandom[4] = $aRandom[2] Or $aRandom[4] = $aRandom[3] Or $aRandom[4] = $aRandom[1] Or $aRandom[4] = $aRandom[5] _
    Or $aRandom[5] = $aRandom[0] Or $aRandom[5] = $aRandom[2] Or $aRandom[5] = $aRandom[3] Or $aRandom[5] = $aRandom[4] Or $aRandom[5] = $aRandom[1] Then

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    For $meee = 0 To 5
    For $you = 0 To 5
    If $aRandom[$meee] = $aInputRead[$you] Then
    $versuche += 1
    EndIf
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If $versuche = 1 Then
    $jjjj += 1
    GUICtrlSetData($hLabe6Richtiger, "1 Richtiger: " & $jjjj)
    EndIf
    If $versuche = 2 Then
    $2 += 1
    GUICtrlSetData($hLabe2Richtiger, "2 Richtige: " & $2)
    EndIf
    If $versuche = 3 Then
    $3 += 1
    GUICtrlSetData($hLabe3Richtiger, "3 Richtige: " & $3)
    EndIf
    If $versuche = 4 Then
    $4 += 1
    GUICtrlSetData($hLabe4Richtiger, "4 Richtige: " & $4)
    EndIf
    If $versuche = 5 Then
    $5 += 1
    GUICtrlSetData($hLabe5Richtiger, "5 Richtige: " & $5)
    EndIf
    If $versuche = 6 Then
    $kkk += 1
    GUICtrlSetData($hLabel1Richtiger, "6 Richtige: " & $kkk)
    msgbox (0,"6 RICHTIGE!!!", "Es wurden 6 Richtige durch Zufall erstellt!")
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;~ If $Random1 = $aInputRead[0] Or $Random1 = $aInputRead[1] Or $Random1 = $aInputRead[2] Or $Random1 = $aInputRead[3] Or $Random1 = $aInputRead[4] Or $Random1 = $aInputRead[5] Then
    ;~ $jjjj += 1
    ;~ GUICtrlSetData($hLabe6Richtiger, "1 Richtiger: " & $jjjj)
    ;~ ElseIf $Random2 = $aInputRead[0] Or $Random2 = $aInputRead[1] Or $Random2 = $aInputRead[2] Or $Random2 = $aInputRead[3] Or $Random2 = $aInputRead[4] Or $Random2 = $aInputRead[5] Then
    ;~ $jjjj += 1
    ;~ GUICtrlSetData($hLabe6Richtiger, "1 Richtiger: " & $jjjj)
    ;~ ElseIf $Random3 = $aInputRead[0] Or $Random3 = $aInputRead[1] Or $Random3 = $aInputRead[2] Or $Random3 = $aInputRead[3] Or $Random3 = $aInputRead[4] Or $Random3 = $aInputRead[5] Then
    ;~ $jjjj += 1
    ;~ GUICtrlSetData($hLabe6Richtiger, "1 Richtiger: " & $jjjj)
    ;~ ElseIf $Random4 = $aInputRead[0] Or $Random4 = $aInputRead[1] Or $Random4 = $aInputRead[2] Or $Random4 = $aInputRead[3] Or $Random4 = $aInputRead[4] Or $Random4 = $aInputRead[5] Then
    ;~ $jjjj += 1
    ;~ GUICtrlSetData($hLabe6Richtiger, "1 Richtiger: " & $jjjj)
    ;~ ElseIf $Random5 = $aInputRead[0] Or $Random5 = $aInputRead[1] Or $Random5 = $aInputRead[2] Or $Random5 = $aInputRead[3] Or $Random5 = $aInputRead[4] Or $Random5 = $aInputRead[5] Then
    ;~ $jjjj += 1
    ;~ GUICtrlSetData($hLabe6Richtiger, "1 Richtiger: " & $jjjj)
    ;~ ElseIf $Random6 = $aInputRead[0] Or $Random6 = $aInputRead[1] Or $Random6 = $aInputRead[2] Or $Random6 = $aInputRead[3] Or $Random6 = $aInputRead[4] Or $Random6 = $aInputRead[5] Then
    ;~ $jjjj += 1
    ;~ GUICtrlSetData($hLabe6Richtiger, "1 Richtiger: " & $jjjj)
    ;~ EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;~ If $Random1 = $aInputRead[0] Or $Random1 = $aInputRead[1] Or $Random1 = $aInputRead[2] Or $Random1 = $aInputRead[3] Or $Random1 = $aInputRead[4] Or $Random1 = $aInputRead[5] And $Random1 <> $Random2 And $Random1 <> $Random3 And $Random1 <> $Random4 And $Random1 <> $Random5 And $Random1 <> $Random6 Then
    ;~ If $Random2 = $aInputRead[0] Or $Random2 = $aInputRead[1] Or $Random2 = $aInputRead[2] Or $Random2 = $aInputRead[3] Or $Random2 = $aInputRead[4] Or $Random2 = $aInputRead[5] And $Random2 <> $Random1 And $Random2 <> $Random3 And $Random2 <> $Random4 And $Random2 <> $Random5 And $Random2 <> $Random6 Then
    ;~ If $Random3 = $aInputRead[0] Or $Random3 = $aInputRead[1] Or $Random3 = $aInputRead[2] Or $Random3 = $aInputRead[3] Or $Random3 = $aInputRead[4] Or $Random3 = $aInputRead[5] And $Random3 <> $Random2 And $Random3 <> $Random1 And $Random3 <> $Random4 And $Random3 <> $Random5 And $Random1 <> $Random6 Then
    ;~ If $Random4 = $aInputRead[0] Or $Random4 = $aInputRead[1] Or $Random4 = $aInputRead[2] Or $Random4 = $aInputRead[3] Or $Random4 = $aInputRead[4] Or $Random4 = $aInputRead[5] And $Random4 <> $Random2 And $Random4 <> $Random3 And $Random4 <> $Random1 And $Random4 <> $Random5 And $Random4 <> $Random6 Then
    ;~ If $Random5 = $aInputRead[0] Or $Random5 = $aInputRead[1] Or $Random5 = $aInputRead[2] Or $Random5 = $aInputRead[3] Or $Random5 = $aInputRead[4] Or $Random5 = $aInputRead[5] And $Random5 <> $Random2 And $Random5 <> $Random3 And $Random5 <> $Random4 And $Random5 <> $Random1 And $Random5 <> $Random6 Then
    ;~ If $Random6 = $aInputRead[0] Or $Random6 = $aInputRead[1] Or $Random6 = $aInputRead[2] Or $Random6 = $aInputRead[3] Or $Random6 = $aInputRead[4] Or $Random6 = $aInputRead[5] And $Random6 <> $Random2 And $Random6 <> $Random3 And $Random6 <> $Random4 And $Random6 <> $Random5 And $Random6 <> $Random1 Then
    ;~ MsgBox(0, "Versuche", "Anzahl der Versuche: " & $versuche)
    ;~ $kkk += 1
    ;~ GUICtrlSetData($hLabel1Richtiger, "6 Richtige: " & $kkk)
    ;~ EndIf
    ;~ EndIf
    ;~ EndIf
    ;~ EndIf
    ;~ EndIf
    ;~ EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    WEnd
    EndFunc ;==>_Lotto_Zufall

    [/autoit]

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

    4 Mal editiert, zuletzt von BadBunny (25. November 2010 um 20:53)

  • Wirklich sehr interessantes Script!
    Ist interessant zu sehen, wieviele Durchläufe gebraucht werden, damit es klappt... Die Geschwindgkeit ist natürlich ein kleines Manko, aber mehr kann man von Autoit auch nicht erwarten.
    Außerdem kann man ohne Warnung Zahlen, die größer als 49 sind, in die großen Inputs oben eingeben.
    Der Stopbutton funktioniert übrigens auch nicht.

    DIe armen Poweruser, Mods und Admins, die hier als Variablen missbraucht wurden ;(

  • Mir war langeweilig, außerdem kann ich mir die so gut merken ;)
    Den Stop Button... ist gefixt^^ durch die vielen Sachen hab ich vergessen aus ExitLoop nen :_leerlauf zu machen :D und das mit den größer als 49 kann man ja schnell machen^^ Ich besser das mal aus. Danke für den Tipp.

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • Hab folgendes entdeckt...

    Es können gleiche Zahlen vorkommen (also z.b. 2Mal die 32 oder sowas)
    Der Recursion Level wird nur erreicht, weil die Funktion Rekursiv ist, was in diesem Fall unnötig ist.

    Versuch mal Folgendes:
    1. Einen Check bei der Vergabe der Neuen Zahlen ob die ausgewählte Zahl schon existiert (um Doppelte vorzubeugen)
    2. Die Komplette Funktion mit einigen Abbruchkriterien in eine Endlosschleife verpacken statt die Funktion Rekursiv auszubauen.

    Das müsste die beiden größten Probleme Beheben.


    mfg
    Mars(i)

  • Der Leiter unseres Segelclubs hat etwas ähnliches mal in C# geschrieben, allerdings nur ähnlich.
    Ich glaube man brauchte 6 minuten damit man 1nen Durchlauf hatte, und ausgegeben wurde in tabellarischer Form wie oft welche Kombination dran kam, man konnte sortieren, abspeichern usw.

    Ich werde ihn mal bitten mir das Programm zuzusenden, samt Hilfedatei

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Mir ist auch gerade die Fehlermeldung Recursion level has been exceeded - AutoIt will quit to prevent stack overflow.: gekommen....
    Das mit den doppelten oben wusste ich^^ habs nur noch nicht ausgebessert, aber trotzdem Danke.
    Das größte Problem ist die Fehlermeldung ....

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • Ich nehme mal an, das Problem ist folgendes:
    - Du rufst beim Klick auf den Button die Funktion Lotto_Zufall auf
    - Von da aus rufst du immer wieder die Funktion leerlauf auf
    - Die Func wartet auf die Rückkehr von der Fuktion leerlauf
    - Die Funktion waretet weiterhin im Speicher, während beim Buttonclick noch mehr Speicher reserviert wird, um die Fuktion zu wiederholen
    - Das ganze wiederholt sich immer und immer wieder
    - Irgendwann wurde zuviel Arbeitsspeicher reserviert --> AutoIt mag das nicht, spuckt den Fehler aus und beendet sich

  • Die funktion _leerlauf() wird doch nicht immer aufgerufen. Die wird doch nur ausgerufen wenn das Stop Btn gedrückt wird.

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • So, danke an alle die mir geholfen haben! Ich habs jetzt ein wenig anders als Ineluki gemacht (hab den post zu spät gesehen^^) aber es läuft bis jetzt immernoch (bin bei 35000^^).
    Ich hab es behoben oben.

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake