12. Slučka s podmienkou na konci: UNTIL
Na čo to je
Niekedy treba telo slučky vykonať najprv a až potom zistiť, či ho opakovať. Typický prípad: opýtať sa, a ak odpoveď nevyhovuje, opýtať sa znova.
Ako sa to píše
DO
príkazy
UNTIL podmienka
ODUNTIL znamená „až kým“. Stojí tesne pred OD. Po každom prechode telom sa podmienka vyhodnotí:
- platí → slučka končí,
- neplatí → program sa vráti na
DO.
Dva rozdiely oproti WHILE:
WHILE | UNTIL | |
|---|---|---|
| kedy sa skúša podmienka | pred telom | za telom |
| koľkokrát sa vykoná telo | 0-krát alebo viac | 1-krát alebo viac |
| slučka beží, | kým podmienka platí | kým podmienka neplatí |
Je to skratka za:
DO
príkazy
IF podmienka THEN EXIT FI
ODCelý program
Súbor examples/until.act:
; UNTIL: the condition is tested after each turn
PROC Main()
BYTE number
DO
Print("Enter a number from 1 to 10: ")
number=InputB()
UNTIL number>=1 AND number<=10
OD
PutE()
Print("Thank you, you entered ")
PrintBE(number)
RETURNPreklad a spustenie
action26 until.act --simČo uvidíš
Po zadaní 0, potom 25 a nakoniec 7:
Enter a number from 1 to 10: 0
Enter a number from 1 to 10: 25
Enter a number from 1 to 10: 7
Thank you, you entered 7Ako to funguje
Program sa opýta, načíta číslo a až potom skúša, či je medzi 1 a 10. Ak nie, opýta sa znova. Za slučkou má program istotu, že number je v poriadku – inak by sa cez UNTIL nedostal.
Tu je UNTIL prirodzenejšie ako WHILE: pred prvou otázkou ešte žiadne číslo nie je, takže podmienku na začiatku nie je s čím vyhodnotiť.
Všimni si podmienku: hovorí, kedy slučka skončí („až kým je číslo medzi 1 a 10“), nie kedy pokračuje.
Časté chyby
| Čo sa stalo | Čo sa stane |
|---|---|
UNTIL nie je posledný príkaz pred OD | error ACT019: missing OD: expected OD, got … |
podmienka napísaná ako pri WHILE („kým pokračovať“) | slučka skončí po prvom prechode, alebo nikdy |
chýba OD za UNTIL | error ACT019: missing OD |
Na druhý riadok tabuľky pozor zvlášť. Ak prepisuješ WHILE na UNTIL, podmienku treba obrátiť: z < sa stane >=, z AND sa stane OR a naopak.
Vyskúšaj si
- Zmeň rozsah na 50 až 100.
- Pridaj za
InputB()výpisWrong, try again., ktorý sa objaví, len keď číslo nevyhovuje. (TrebaIFv tele slučky.) - Prepíš slučku pomocou
WHILE. Čo musíš spraviť pred slučkou, aby fungovala?
Zhrnutie
DO … UNTIL podmienka ODopakuje telo, až kým podmienka začne platiť.- Telo sa vykoná vždy aspoň raz.
UNTILstojí tesne predOD.- Podmienka hovorí, kedy skončiť – opačne ako pri
WHILE.
Späť: 11. Slučka s podmienkou na začiatku · Ďalej: 13. Slučka s počítadlom