Case $button abbrechen ohne das Programm zu schließen?

  • Hey Leute,

    mein Programm berechnet den größten gemeinsamen Teiler zweier Zahlen die größer als 0 sind. Man gibt zwei Zahlen ein und drück auf den "Berechnen" button. Sollte eine Zahl nicht größer als 0 sein, dann soll das Case sich beenden und man muss erneut 2 Zahlen eingeben, die berechnet werden und erneut auf "Berechnen". Wichtig ist, dass das Case auch wirklich beendet wird.

    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.9.23 (Beta)
    Author: Tauber
    Applikationsname: GGT
    Version: v1.0.0

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

    Script Function:
    Applikation zur Berechnung des größten gemeinsamen Teilers zweier Zahlen > 0.

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

    #ce ----------------------------------------------------------------------------

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

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $main = GUICreate("GGT", 163, 116, 192, 162)
    $zahl1 = GUICtrlCreateInput("", 32, 16, 97, 21)
    $zahl2 = GUICtrlCreateInput("", 32, 48, 97, 21)
    $start = GUICtrlCreateButton("Berechnen", 32, 80, 97, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $start

    ; Werte auslesen
    $z1 = GUICtrlRead($zahl1)
    $z2 = GUICtrlRead($zahl2)

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

    ; Überprüfen ob die Argumente <= 0 sind
    If (($z1 <= 0) OR ($z2 <= 0)) Then
    MsgBox(64, "Error", "Zahlen müssen größer als 0 sein!" & @CRLF & "Bitte geben Sie eine gültige Zahl ein.")
    EndIf

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

    ; Solange die Argumente ungleich sind wiederhole
    While ($z1 <> $z2)

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

    ; Überprüfe ob das erste Argument kleiner als das zweite Argument ist
    ; Falls zutreffend, dann tausche die Variablen
    If ($z1 < $z2) Then
    $t = $z1
    $z1 = $z2
    $z2 = $t
    EndIf

    ; Größere Zahl wird von der kleineren subtrahiert und überschrieben
    $z1 = $z1 - $z2
    WEnd

    ; GGT wurde gefunden und wird ausgegeben
    MsgBox(64, "GGT", "Der größte gemeinsame Teiler ist: " & $z1)

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

    EndSwitch
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von Tauber (8. Dezember 2013 um 01:25)