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

Action!
DO
  príkazy
OD
SlovoVýznam
DOzačiatok slučky
ODkoniec slučky (DO odzadu); program skočí späť na DO
EXITvyskoč 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:

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

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

Ako to funguje

  1. sum=0 – súčet začína na nule. Bez tohto riadka by v premennej mohlo byť čokoľvek.
  2. Slučka vypíše otáznik a načíta číslo.
  3. Ak je číslo 0, EXIT slučku ukončí a program pokračuje za OD.
  4. Inak sa číslo pripočíta k súčtu (sum==+number) a OD vráti program na DO.

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 ODerror ACT019: missing OD
EXIT mimo slučkyerror ACT025: illegal EXIT (not inside DO-OD loop)
v slučke nie je EXIT, alebo jeho podmienka nikdy nenastaneprogram 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:

Vyskúšaj si

  1. Uprav program, aby popri súčte počítal, koľko čísel si zadal, a vypíš aj počet.
  2. Uprav ho, aby skončil pri čísle 999 namiesto 0.
  3. Vypíš na konci aj priemer (súčet delený počtom). Čo treba ošetriť, keď používateľ zadá hneď nulu?

Zhrnutie

Späť: 9. Podmienka · Ďalej: 11. Slučka s podmienkou na začiatku