Nikolaus Cache: Der Unterschied zwischen WHILE und UNTIL

Hi,

ich habe da mal eine frage, als newbie fange ich gerade an ein wenig in Qbasic zu Progrmmieren und bin auf ein kleines Problem gestoßen.

Wo liegt der Unterschied zwischen WHILE und Until?

Beispiel:

Eine Schleife die so lange laufen soll bis die Taste Esc gedrückt wird:

DO

.... <Anweisungen)

LOOP WHILE INKEY$=CHR$(27)

Schleife läuft nicht an!

DO

.... <Anweisungen)

LOOP UNTIL INKEY$=CHR$(27)

Jetzt ja.... wegen Until. Warum?

  1. Yerf!

    LOOP WHILE INKEY$=CHR$(27)

    Schleife läuft nicht an!

    Ergibt das nicht einen Syntaxfehler oder erlaubt QBasic das tatsächlich? Üblich ist eigentlich nur ein DO WHILE...

    LOOP UNTIL INKEY$=CHR$(27)

    Jetzt ja.... wegen Until. Warum?

    WHILE definiert eine Ablaufbedingung, UNTIL eine Abbruchsbedingung. Das musst du bei deinen Vergleichen beachten. Vermutlich willst du bei WHILE auf Ungleichheit prüfen.

    Gruß,

    Harlequin

    --
    <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
  2. Mahlzeit Nikolaus Cache,

    Wo liegt der Unterschied zwischen WHILE und Until?

    Du kennst den Unterschied der beiden Wörter "solange" und "bis"?

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  3. Hello,

    du musst an dieser Stelle direkt zwei Dinge beachten:

    1. Die Art der Bedingung:
      WHILE prüft die Bedingung und läuft IMMER WEITER, solange die Bedingung WAHR ist. Du hast also eine Art "Positivbedingung" mit der du sagst "laufe weiter so lange wie gilt". LOOP-UNTIL hat hingegen eine Negativ- oder Abbruchbedingung, die sagt "mache es so lange, bis dieser Bedingung gilt". Die Logik ist also genau umgekehrt, wird die Bedingung WAHR, BRICHT UNTIL UP.

    2. Der Zeitpunkt der Prüfung
      Bei WHILE handelt es sich um einen pre-checked-loop, dessen Bedingung VOR der Ausführung überprüft wird. Die Abarbeitungsfolge ist also:
      a) überprüfe, ob die Schleife laufen soll
      b) führe die Schleife aus
      c) weiter mit (a)
      Bei LOOP-UNTIL handelt es sich um einen post-checked-loop, dessen Bedingung erst NACH der Ausführung überprüft wird:
      a) führe die Schleife aus
      b) überprüfe, ob die Schleife laufen soll - falls ja, weiter mit (a)

    Somit gilt auch, dass eine LOOP-UNTIL-Schleife immer mindestens einmal durchlaufen wird, weil die Bedingung frühestens nach dem ersten Schleifendurchlauf anschlägt. WHILE hingegen kann bereits vor dem ersten Schleifendurchlauf einen Ausstieg verursachen.

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    Eine Bilanz ist wie der Bikini einer Frau. Sie zeigt fast alles, aber verdeckt das Wesentliche  --  Günter Stotz, Regierungsdirektor des baden-württembergischen Wirtschaftsministeriums
    1. Hello,

      du musst an dieser Stelle direkt zwei Dinge beachten:

      1. Die Art der Bedingung:
        WHILE prüft die Bedingung und läuft IMMER WEITER, solange die Bedingung WAHR ist. Du hast also eine Art "Positivbedingung" mit der du sagst "laufe weiter so lange wie gilt".

      ahhhh.... also kann WIHLE nur TRUE oder FALSE verstehen oder verstehe ich jetzt alles Falsch?

      LOOP-UNTIL hat hingegen eine Negativ- oder Abbruchbedingung, die sagt "mache es so lange, bis dieser Bedingung gilt". Die Logik ist also genau umgekehrt, wird die Bedingung WAHR, BRICHT UNTIL UP.

      1. Der Zeitpunkt der Prüfung
        Bei WHILE handelt es sich um einen pre-checked-loop, dessen Bedingung VOR der Ausführung überprüft wird. Die Abarbeitungsfolge ist also:
        a) überprüfe, ob die Schleife laufen soll
        b) führe die Schleife aus
        c) weiter mit (a)
        Bei LOOP-UNTIL handelt es sich um einen post-checked-loop, dessen Bedingung erst NACH der Ausführung überprüft wird:
        a) führe die Schleife aus
        b) überprüfe, ob die Schleife laufen soll - falls ja, weiter mit (a)

      aha, daher bekommt auch gerne mal Endlosschleifen....

      1. Hello,

        ahhhh.... also kann WIHLE nur TRUE oder FALSE verstehen oder verstehe ich jetzt alles Falsch?

        scheinbar - alle Schleifen verstehen nur TRUE oder FALSE wenn es um die BEDINGUNG geht, unter der die Schleife ausgeführt wird. Aber WHILE hat eine Bedingung wann sie laufen soll, LOOP-UNTIL eine wann sie nicht mehr laufen soll.

        aha, daher bekommt auch gerne mal Endlosschleifen....

        das hat damit relativ wenig zu tun...Endlosschleifen kann ich in beiden Varianten produzieren
        while (true) { ... }
        do ... until (false)

        MfG
        Rouven

        --
        -------------------
        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
        When the only tool you've got is a hammer, all problems start to look like nails.