13. Slučka s počítadlom: FOR, TO, STEP

Na čo to je

Najčastejšia slučka zo všetkých: „sprav toto desaťkrát“ alebo „prejdi čísla od 1 do 100“. FOR sa o počítanie postará sám.

Ako sa to píše

Action!
FOR premenná=začiatok TO koniec
DO
  príkazy
OD

alebo s krokom:

Action!
FOR premenná=začiatok TO koniec STEP krok
DO
  príkazy
OD
SlovoVýznam
FORzačína slučku s počítadlom
premennápočítadlo – obyčajná premenná, ktorú si deklaroval
začiatokhodnota, ktorú počítadlo dostane pred prvým prechodom
TO koniecposledná hodnota, pri ktorej sa telo ešte vykoná
STEP kroko koľko sa počítadlo po každom prechode zväčší; bez STEP o 1

Je to skratka za:

Action!
premenná=začiatok
WHILE premenná<=koniec
DO
  príkazy
  premenná==+krok
OD

Celý program

Súbor examples/for.act:

Action!
; FOR: a loop with a counter

PROC Main()
  BYTE i, row, col

  FOR i=1 TO 10
  DO
    PrintB(i) Put(' )
  OD
  PutE()

  FOR i=0 TO 20 STEP 5
  DO
    PrintB(i) Put(' )
  OD
  PutE()

  PutE()
  PrintE("The 7 times table:")
  FOR row=1 TO 10
  DO
    PrintB(row) Print(" x 7 = ") PrintBE(row*7)
  OD

  PutE()
  FOR row=1 TO 4
  DO
    FOR col=1 TO row
    DO
      Put('*)
    OD
    PutE()
  OD
RETURN

Preklad a spustenie

action26 for.act --sim

Čo uvidíš

1 2 3 4 5 6 7 8 9 10 
0 5 10 15 20 

The 7 times table:
1 x 7 = 7
2 x 7 = 14
3 x 7 = 21
4 x 7 = 28
5 x 7 = 35
6 x 7 = 42
7 x 7 = 49
8 x 7 = 56
9 x 7 = 63
10 x 7 = 70

*
**
***
****

Ako to funguje

Začiatočníci často volajú počítadlá i, j, k. Je to zvyk z matematiky; meno ako row alebo col však hovorí viac.

Tri vlastnosti, ktoré treba poznať

1. Koniec a krok sa vyhodnotia raz, pri vstupe do slučky. Keď v tele zmeníš premennú, ktorá bola koncom, počet prechodov sa už nezmení.

2. FOR nepočíta nadol. FOR i=10 TO 1 sa nevykoná ani raz, lebo 10 je už na začiatku väčšie ako koniec. Nepomôže ani STEP -1. Na odpočítavanie použi WHILE:

Action!
i=10
WHILE i>0
DO
  PrintBE(i)
  i==-1
OD

3. BYTE počítadlo a koniec 255 je nekonečná slučka.

Action!
BYTE i
FOR i=0 TO 255     ; never ends
DO
OD

Slučka končí, keď je počítadlo väčšie ako koniec. BYTE však väčší ako 255 byť nemôže – po 255 sa pretočí na 0 a ide sa odznova. Ak potrebuješ prejsť všetkých 256 hodnôt, použi počítadlo typu CARD.

Časté chyby

Čo sa staloČo sa stane
počítadlo nie je deklarovanéerror ACT008: undeclared name
chýba DOerror ACT015: missing DO na prvom príkaze tela
začiatok je väčší ako koniectelo sa nevykoná ani raz
BYTE počítadlo, koniec 255nekonečná slučka
v tele meníš počítadloslučka preskakuje hodnoty – radšej to nerob

Po skončení slučky má počítadlo hodnotu o krok väčšiu ako koniec: po FOR i=1 TO 3 je v i číslo 4.

Vyskúšaj si

  1. Vypíš párne čísla od 2 do 20.
  2. Vypíš malú násobilku celú: desať riadkov a v každom desať čísel. (Slučka v slučke; výsledok môže byť až 100, to sa do BYTE zmestí.)
  3. Sčítaj čísla od 1 do 100 a vypíš súčet. Akého typu musí byť premenná na súčet?

Zhrnutie

Späť: 12. Slučka s podmienkou na konci · Ďalej: 14. Parametre