Zufallszahlengenerator

  • Hallo,
    ich hab einen script geschrieben der zufallszahlen in ein gui schreiben soll, leider funktioniert das nicht so wie ich es gerne hätte :weinen: kann mir jemand sagen was ich falsch gemacht habe?

    [autoit]

    ;~ Soll Zufallszahlen in ein Gui schreiben
    #include <GUIConstants.au3>
    $mal=""

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

    $min = InputBox("Von...", "Zahl:", "", "", 70, 50) ;Die Startzahl.
    $max = InputBox("Bis...", "Zahl:", "", "", 70, 50) ;Die Endzahl.
    $wieoft = InputBox("Wie oft?...", "Zahl:", "", "", 70, 50) ;Wie viele Zahlen ausgegenen werden sollen.

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

    GUICreate("Generierte Zahlen",260,249)
    GUISetState(@sw_show)
    $zahlen=GUICtrlCreateEdit(""& @CRLF,0,0,260,249,$ES_AUTOVSCROLL + $WS_VSCROLL,-1)

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

    While 1
    $msg=GUIGetMsg()
    If $msg=$GUI_EVENT_CLOSE Then ExitLoop
    WEnd

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

    For $mal=$wieoft to 1 Step -1
    $zahl=Random($min, $max)
    GUICtrlSetData($zahlen, $zahl)
    $zahl=""
    Next

    [/autoit]


    Ich würde gerne noch etwas zu random() fragen, damit lassen sich ja entweder fließkommazahlen oder ganze zahlen erzeugen. gibt es eine möglichkeit von vornherein anzugeben auf wie viele stellen generiert werden soll oder muss man danach extra runden?

    Viele Grüße vinschni

    • Offizieller Beitrag

    Hallo!

    Die For schleife muss vor die Gui ($msg) schleife! Die $msg schleife bleibt ja solange konstant bis die Gui geschlossen wird, und da ist es ja schon zu spät, ausser du würdest ein Sleep setzen.
    So sollte es so gehen wie du es wolltest:

    Spoiler anzeigen
    [autoit]

    ;~ Soll Zufallszahlen in ein Gui schreiben
    #include <GUIConstants.au3>
    $mal = ""

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

    $min = InputBox("Von...", "Zahl:", "", "", 70, 50) ;Die Startzahl.
    $max = InputBox("Bis...", "Zahl:", "", "", 70, 50) ;Die Endzahl.
    $wieoft = InputBox("Wie oft?...", "Zahl:", "", "", 70, 50) ;Wie viele Zahlen ausgegenen werden sollen.

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

    GUICreate("Generierte Zahlen", 260, 249)
    GUISetState(@SW_SHOW)
    $zahlen = GUICtrlCreateEdit("Das sind die Zahlen:" & @CRLF, 0, 0, 260, 249, $ES_AUTOVSCROLL + $WS_VSCROLL, -1)

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

    For $mal = $wieoft To 1 Step -1;Warum hier runterzählen? warum nicht For $mal = 1 To $wieoft ? Naja egal^^ habs mal so gelassen
    $zahl = Random($min, $max,1)
    GUICtrlSetData($zahlen, $zahl,1)
    GUICtrlSetData($zahlen, @CRLF,1)
    Next

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

    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

    [/autoit]

    Mfg Spider

    • Offizieller Beitrag

    Hi,

    ich habe dir mal ne GUI-Varinante draus gemacht.

    [autoit]


    ;~ Soll Zufallszahlen in ein Gui schreiben
    #include <GUIConstants.au3>
    GUICreate("Generierte Zahlen", 300, 400)
    $min = GUICtrlCreateInput("Von...", 10, 10, 100, 20) ;Die Startzahl.
    $max = GUICtrlCreateInput("Bis...", 10, 40, 100, 20);Die Endzahl.
    $wieoft = GUICtrlCreateInput("Wie oft?...", 10, 70, 100, 20) ;Wie viele Zahlen ausgegenen werden sollen.
    $zahlen = GUICtrlCreateEdit("", 10, 100, 260, 249, $ES_AUTOVSCROLL + $WS_VSCROLL, -1)
    $start = GUICtrlCreateButton("Start", 120, 10, 150, 20)
    $reset = GUICtrlCreateButton("Reset", 120, 40, 150, 20)
    $exit = GUICtrlCreateButton("Exit", 120, 70, 150, 20)
    GUICtrlSetState($min, $GUI_FOCUS)
    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit (0)
    Case $exit
    Exit (0)
    Case $start
    generieren()
    Case $reset
    GUICtrlSetData($zahlen, "")
    EndSwitch
    WEnd

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

    Func generieren()
    For $i = 0 To GUICtrlRead($wieoft)
    GUICtrlSetData($zahlen, Random(GUICtrlRead($min), GUICtrlRead($max), 1) & @CRLF, 1)
    Next
    EndFunc ;==>generieren

    [/autoit]

    So long,

    Mega

    • Offizieller Beitrag

    Hallo!

    Zu deiner Frage mit Random(), man kann bei Random() nicht von vorneherein eingeben wieviele Stellen sie zurückgeben soll. Aber mit einer kleinen Funktion ist das kein Problem:

    [autoit]

    _MyRandom(100,200) ; Zufallszahl zw. 100 und 200 ohne Nachkommastelle
    _MyRandom(100,200,3) ; Zufallszahl zw. 100 und 200 mit 3 Nachkommastellen

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

    Func _MyRandom($min, $max, $precision=0)
    return StringFormat("%." & $precision &"f",Random($min,$max))
    EndFunc

    [/autoit]
  • @mega:
    super plan mit der gui funktioniert auch wunderbar außer die minzahl ist größer als die maxzahl(bsp:min=20 max=19) dann ist der zufallswert immer 0...sollte vll noch gekapselt werden bevor der user irgend ein schwachsinn an die funktion übergibt...vll einfach ne ne kleine abfrage rein...

    [autoit]

    Case $start
    If ((GUICtrlRead($min)) > (GUICtrlRead($max))) Then
    MsgBox(48,"Fehler","Die Minimalzahl ist größer als die Maximalzahl.")
    Else
    generieren()
    EndIf

    [/autoit]


    müsste rein theoretisch funktionieren(nicht ausprobiert^^)

    aber sonst :keks: ;)

  • @th.meger danke für die gui, hast du echt gut eingebaut.

    Zum abfangen der fehler, ich denke das ist hier nur bedingt notwendig, da es ja darum geht in dem fall mit den ergebnissen etwas anzufangen.(z.b. lassen sich hiermit prima öde messtabellen beschummeln, denn nach ein par versuchen kennt man die näherungswerte sowieso. und wer dann irgendwelche verrückten dinge eingibt z.b. buchstaben, der hat den sinn des scripts nicht verstanden, und es währe dann besser er würde seine messungen selber machen) aber der vollständigkeithalber währe es sinnvoll alles abzufangen, da geb ich snoozer recht.
    grüße

    vinschni


    :kiss:th.meger

    2 Mal editiert, zuletzt von Vinschni (4. Dezember 2006 um 15:50)

  • Danke th.meger ;)
    die abfangarbeiten krieg ich allein hin.
    Sorry wenn ich so viel klein schreib, ich hab grad nen gips, da gehts so schneller

    Grüße vinschni