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

Action!
DO
  príkazy
UNTIL podmienka
OD

UNTIL znamená „až kým“. Stojí tesne pred OD. Po každom prechode telom sa podmienka vyhodnotí:

Dva rozdiely oproti WHILE:

WHILEUNTIL
kedy sa skúša podmienkapred telomza telom
koľkokrát sa vykoná telo0-krát alebo viac1-krát alebo viac
slučka beží,kým podmienka platíkým podmienka neplatí

Je to skratka za:

Action!
DO
  príkazy
  IF podmienka THEN EXIT FI
OD

Celý program

Súbor examples/until.act:

Action!
; 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)
RETURN

Preklad 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 7

Ako 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 ODerror 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 UNTILerror 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

  1. Zmeň rozsah na 50 až 100.
  2. Pridaj za InputB() výpis Wrong, try again., ktorý sa objaví, len keď číslo nevyhovuje. (Treba IF v tele slučky.)
  3. Prepíš slučku pomocou WHILE. Čo musíš spraviť pred slučkou, aby fungovala?

Zhrnutie

Späť: 11. Slučka s podmienkou na začiatku · Ďalej: 13. Slučka s počítadlom