Der Unterschied zwischen WHILE und UNTIL
Nikolaus Cache
- programmiertechnik
0 Harlequin0 EKKi2 Rouven0 Nikolaus Cache0 Rouven
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?
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
Mahlzeit Nikolaus Cache,
Wo liegt der Unterschied zwischen WHILE und Until?
Du kennst den Unterschied der beiden Wörter "solange" und "bis"?
MfG,
EKKi
Hello,
du musst an dieser Stelle direkt zwei Dinge beachten:
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.
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
Hello,
du musst an dieser Stelle direkt zwei Dinge beachten:
- 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.
- 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....
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