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

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

Atari BASIC
FOR premenná=začiatok TO koniec
  príkazy
NEXT premenná

alebo s krokom:

Atari BASIC
FOR premenná=začiatok TO koniec STEP krok
  príkazy
NEXT premenná
SlovoVýznam
FORzačína slučku s počítadlom
premennápočítadlo – obyčajná číselná premenná
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 zmení; bez STEP o 1
NEXT premennákoniec tela: zmeň počítadlo a ak ešte neprekročilo koniec, choď späť za FOR

Telo slučky je všetko medzi FOR a NEXT. Môže byť na ďalších riadkoch, alebo na tom istom riadku za dvojbodkou.

Celý program

Súbor examples/for.abas:

Atari BASIC
10 REM FOR: a loop with a counter
20 FOR I=1 TO 10
30   PRINT I;" ";
40 NEXT I
50 PRINT
60 FOR I=0 TO 20 STEP 5:PRINT I;" ";:NEXT I
70 PRINT
80 FOR I=5 TO 1 STEP -1:PRINT I;" ";:NEXT I
90 PRINT "Go!"
100 PRINT
110 PRINT "The 7 times table:"
120 FOR ROW=1 TO 10
130   PRINT ROW;" x 7 = ";ROW*7
140 NEXT ROW
150 PRINT
160 FOR ROW=1 TO 4
170   FOR COL=1 TO ROW
180     PRINT "*";
190   NEXT COL
200   PRINT
210 NEXT ROW
220 SUM=0
230 FOR I=1 TO 100:SUM=SUM+I:NEXT I
240 PRINT "1+2+...+100 = ";SUM

Preklad a spustenie

Basic26 for.abas --sim

Čo uvidíš

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

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

*
**
***
****
1+2+...+100 = 5050

Ako to funguje

Telo slučky je odsadené o dve medzery za číslom riadka. BASIC tie medzery ignoruje (Atari BASIC ich pri písaní zahodí, Turbo-BASIC XL vo výpise odsadzuje sám), ale je z nich na prvý pohľad vidieť, čo k čomu patrí – a ktorá slučka nemá NEXT.

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.

Štyri vlastnosti, ktoré treba poznať

1. Telo sa vykoná vždy aspoň raz. FOR I=5 TO 1 bez záporného kroku telo jedenkrát vykoná (s I = 5) a až NEXT zistí, že je za koncom. Tak sa správa Atari BASIC aj Turbo-BASIC XL.

2. Po skončení slučky je počítadlo o krok ďalej. Po FOR I=1 TO 3 je v I číslo 4.

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

4. Krok môže byť desatinný: FOR X=0 TO 1 STEP 0.25 prejde 0, 0.25, 0.5, 0.75 a 1.

Čakacia slučka

V starých programoch často nájdeš prázdnu slučku:

Atari BASIC
500 FOR W=1 TO 300:NEXT W

Nerobí nič, len počíta – a tým spomaľuje. V interpreteri trvalo tristo prechodov asi pol sekundy a programátori si tak robili prestávky. Preložený program je však mnohokrát rýchlejší, takže prestávka skoro zmizne. Presné čakanie, ktoré od rýchlosti nezávisí, je v kapitolách 18 (časovač Atari) a 33 (PAUSE v Turbo-BASICu XL); pre dobové programy má prekladač voľbu --line-delay (kapitola 42).

Časté chyby

Čo sa staloČo sa stane
chýba NEXTerror B26024: FOR I has no NEXT
NEXT bez FORerror B26013: NEXT without FOR
slučky sa krížia (NEXT I pred NEXT J)error B26013: NEXT I does not match FOR J
počítanie nadol bez STEP -1telo sa vykoná raz a slučka skončí
v tele meníš počítadloslučka preskakuje hodnoty – radšej to nerob
z tela sa skáče von cez GOTOfunguje; slučka ostane rozrobená, kým ju nenahradí nový FOR s tým istým počítadlom

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 a čiarka v PRINT.)
  3. Spýtaj sa na číslo N a vypíš súčin čísel od 1 do N (faktoriál).

Zhrnutie

Späť: 9. Skok · Ďalej: 11. Podprogramy