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

Turbo Basic XL
DO
  príkazy
  IF podmienka THEN EXIT
  príkazy
LOOP
SlovoVýznam
DOzačiatok slučky
LOOPkoniec: choď späť na DO
EXITokamž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:

Turbo Basic XL
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;"*";I

Preklad a spustenie

Basic26 do.tbas --sim

Čo uvidíš

1+2+...+14 = 105
The first square over 200 is 15*15

Ako to funguje

Hlavná slučka hry

Kostra z kapitoly 22 v Turbo-BASICu XL:

Turbo Basic 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 LOOPerror B26024: DO without LOOP
LOOP bez DOerror B26023: there is nothing for this to close
EXIT mimo slučkyerror B26030: EXIT outside a loop
EXIT v slučke, do ktorej sa skočilo bez jej FORERROR- 26 ?EXIT za behu
DO … LOOP bez EXITnekonečná slučka – niekedy naschvál, na konci programu, aby obrazovka ostala
EXIT vo vnorenej slučkeopustí len vnútornú
premenná sa volá DOOR, DONE, LOOPS, EXITSčíta sa ako DO OR, DO NE, LOOP S, EXIT S

Vyskúšaj si

  1. Čítaj čísla cez INPUT a sčítavaj ich; nula slučku ukončí.
  2. Nájdi najmenšie číslo, ktoré je deliteľné 2, 3, 5 aj 7. (Skúšaj od jednotky, EXIT pri prvom, ktoré vyhovie.)
  3. Prepíš program on.abas z kapitoly 12 bez GOTO: ponuka v DO … LOOP, voľba Quit je EXIT.

Zhrnutie

Späť: 28. Slučky s podmienkou · Ďalej: 30. Procedúry a návestia