10. Slučka: DO, OD, EXIT
Na čo to je
Počítač vie robiť tú istú vec znova a znova bez únavy. Slučka (cyklus) je kus programu, ktorý sa opakuje.
Ako sa to píše
DO
príkazy
OD| Slovo | Význam |
|---|---|
DO | začiatok slučky |
OD | koniec slučky (DO odzadu); program skočí späť na DO |
EXIT | vyskoč zo slučky hneď teraz; program pokračuje za OD |
Samotné DO … OD sa opakuje donekonečna. Aby slučka niekedy skončila, treba v nej EXIT – zvyčajne v podmienke.
DO a OD sú základ všetkých slučiek v Action!. Slučky WHILE, UNTIL a FOR z ďalších kapitol sú to isté DO … OD s pridaným pravidlom, kedy skončiť.
Celý program
Súbor examples/do.act:
; A loop: add numbers until the user enters 0
PROC Main()
CARD sum, number
sum=0
PrintE("Enter numbers, 0 ends.")
DO
Print("? ")
number=InputC()
IF number=0 THEN
EXIT
FI
sum==+number
OD
PutE()
Print("The sum is ")
PrintCE(sum)
RETURNPreklad a spustenie
action26 do.act --simČo uvidíš
Po zadaní čísel 12, 30, 8 a 0:
Enter numbers, 0 ends.
? 12
? 30
? 8
? 0
The sum is 50Ako to funguje
sum=0– súčet začína na nule. Bez tohto riadka by v premennej mohlo byť čokoľvek.- Slučka vypíše otáznik a načíta číslo.
- Ak je číslo 0,
EXITslučku ukončí a program pokračuje zaOD. - Inak sa číslo pripočíta k súčtu (
sum==+number) aODvráti program naDO.
Príkazy medzi DO a OD sa volajú telo slučky. Odsadzujú sa, aby bolo vidieť, čo sa opakuje.
Slučka v slučke
Keď je slučka vnútri inej slučky, EXIT ukončí len tú najbližšiu – tú, v ktorej priamo stojí. Vonkajšia beží ďalej.
Časté chyby
| Čo sa stalo | Čo povie prekladač alebo program |
|---|---|
chýba OD | error ACT019: missing OD |
EXIT mimo slučky | error ACT025: illegal EXIT (not inside DO-OD loop) |
v slučke nie je EXIT, alebo jeho podmienka nikdy nenastane | program beží donekonečna |
Nekonečná slučka nie je chyba prekladu – niekedy ju chceš (hra beží, kým ju niekto nevypne). Keď sa ti to stane omylom:
- v simulátore sa program po chvíli zastaví sám a vypíše
simulation stopped: instruction limit reached. Simulátor má poistku – po desiatich miliónoch inštrukcií skončí. Kým čaká na vstup z klávesnice, zastavíš ho klávesmi Ctrl+C; - v emulátore zatvor okno alebo stlač kláves, ktorým emulátor resetuje Atari.
Vyskúšaj si
- Uprav program, aby popri súčte počítal, koľko čísel si zadal, a vypíš aj počet.
- Uprav ho, aby skončil pri čísle 999 namiesto 0.
- Vypíš na konci aj priemer (súčet delený počtom). Čo treba ošetriť, keď používateľ zadá hneď nulu?
Zhrnutie
DO … ODopakuje príkazy medzi nimi.EXITslučku ukončí; bez neho beží donekonečna.EXITukončí len najbližšiu slučku.- Pred slučkou nastav premenné, ktoré v nej počítaš (súčet, počítadlo), na začiatočnú hodnotu.
Späť: 9. Podmienka · Ďalej: 11. Slučka s podmienkou na začiatku