29. Slučka bez konca: DO, LOOP, EXIT
Na čo to je
Niektoré slučky nemajú prirodzenú podmienku na začiatku ani na konci: hlavná slučka hry beží „stále“, a vyskočiť z nej treba zo stredu – keď hráč stlačí tlačidlo, keď dôjdu životy. Na to je DO … LOOP a príkaz EXIT.
Ako sa to píše
DO
príkazy
IF podmienka THEN EXIT
príkazy
LOOP
| Slovo | Význam |
|---|---|
DO | začiatok slučky |
LOOP | koniec: choď späť na DO |
EXIT | okamžite opusti slučku; program pokračuje za jej koncom |
Samotné DO … LOOP sa opakuje donekonečna. EXIT môže byť kdekoľvek v tele a môže ich byť viac.
EXIT funguje aj v slučkách REPEAT … UNTIL, WHILE … WEND a FOR … NEXT.
Celý program
Súbor examples/do.tbas:
10 REM DO ... LOOP and EXIT
20 SUM=0:N=0
30 DO
40 N=N+1
50 SUM=SUM+N
60 IF SUM>100 THEN EXIT
70 LOOP
80 PRINT "1+2+...+";N;" = ";SUM
90 REM EXIT leaves FOR, REPEAT and WHILE as well
100 FOR I=1 TO 100
110 IF I*I>200 THEN EXIT
120 NEXT I
130 PRINT "The first square over 200 is ";I;"*";IPreklad a spustenie
Basic26 do.tbas --simČo uvidíš
1+2+...+14 = 105
The first square over 200 is 15*15Ako to funguje
- Riadky 30 až 70: program sčítava 1, 2, 3 … a po každom pripočítaní pozrie, či súčet prekročil sto. Keď áno,
EXITpreskočí zaLOOPna riadok 80. - Riadky 100 až 120: slučka má dva východy. Riadny, keď
Iprejde stovku, a predčasný cezEXIT, keď sa našlo, čo sa hľadalo. Počítadlo poEXITostane na hodnote, pri ktorej sa odišlo – preto riadok 130 vie vypísať 15. EXITopúšťa len najvnútornejšiu slučku, v ktorej stojí. Z dvoch vnorených slučiek naraz ním nevyskočíš.
Hlavná slučka hry
Kostra z kapitoly 22 v Turbo-BASICu XL:
100 DO
110 S=STICK(0)
120 IF STRIG(0)=0 THEN EXIT
130 EXEC MOVE_PLAYER
140 EXEC DRAW
150 PAUSE 2
160 LOOP
170 PRINT "Game over"Žiadne čísla riadkov, na ktoré sa skáče, a hneď je vidieť, kde slučka začína a končí. (EXEC a PAUSE sú v kapitolách 30 a 33.)
EXIT a FOR
V Atari BASICu sa zo slučky FOR predčasne odchádzalo skokom GOTO za NEXT. Slučka tým ostala „rozrobená“ – počítač si ju ďalej pamätal. EXIT to robí čisto: slučku naozaj ukončí a pokračuje za jej NEXT. Príkaz NEXT I vykonaný po EXIT by už svoju slučku nenašiel (chyba 13).
EXIT patrí dovnútra slučky – medzi jej FOR a NEXT. Keby program do tela slučky skočil cez GOTO a FOR nevykonal, EXIT nemá čo ukončiť a program skončí chybou 26.
Časté chyby
| Čo sa stalo | Čo sa stane |
|---|---|
chýba LOOP | error B26024: DO without LOOP |
LOOP bez DO | error B26023: there is nothing for this to close |
EXIT mimo slučky | error B26030: EXIT outside a loop |
EXIT v slučke, do ktorej sa skočilo bez jej FOR | ERROR- 26 ?EXIT za behu |
DO … LOOP bez EXIT | nekonečná slučka – niekedy naschvál, na konci programu, aby obrazovka ostala |
EXIT vo vnorenej slučke | opustí len vnútornú |
premenná sa volá DOOR, DONE, LOOPS, EXITS | číta sa ako DO OR, DO NE, LOOP S, EXIT S |
Vyskúšaj si
- Čítaj čísla cez
INPUTa sčítavaj ich; nula slučku ukončí. - Nájdi najmenšie číslo, ktoré je deliteľné 2, 3, 5 aj 7. (Skúšaj od jednotky,
EXITpri prvom, ktoré vyhovie.) - Prepíš program
on.abasz kapitoly 12 bezGOTO: ponuka vDO … LOOP, voľbaQuitjeEXIT.
Zhrnutie
DO … LOOPopakuje donekonečna.EXITslučku opustí; býva zaIF … THEN.EXITplatí aj vREPEAT,WHILEaFOR, vždy pre najvnútornejšiu slučku.
Späť: 28. Slučky s podmienkou · Ďalej: 30. Procedúry a návestia