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
FOR premenná=začiatok TO koniec
príkazy
NEXT premennáalebo s krokom:
FOR premenná=začiatok TO koniec STEP krok
príkazy
NEXT premenná| Slovo | Význam |
|---|---|
FOR | začína slučku s počítadlom |
premenná | počítadlo – obyčajná číselná premenná |
začiatok | hodnota, ktorú počítadlo dostane pred prvým prechodom |
TO koniec | posledná hodnota, pri ktorej sa telo ešte vykoná |
STEP krok | o 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:
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 = ";SUMPreklad 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 = 5050Ako to funguje
- Riadky 20 až 40:
Iide od 1 do 10 vrátane. Počítadlo sa dá v tele normálne používať – tu sa vypisuje. - Riadok 60: celá slučka na jednom riadku.
STEP 5zväčšujeIpo piatich. - Riadok 80: záporný krok počíta nadol. Bez
STEP -1by to nešlo. - Riadky 120 až 140: počítadlo
ROWvstupuje do výpočtuROW*7. - Riadky 160 až 210: slučka v slučke. Vonkajšia ide po riadkoch, vnútorná vypíše toľko hviezdičiek, aké je číslo riadka. Vnútorná slučka má ako koniec premennú
ROW– koniec nemusí byť číslo. Vnútorná slučka musí byť celá vo vonkajšej: najprvNEXT COL, potomNEXT ROW. - Riadky 220 až 240: zbieranie súčtu. Pred slučkou sa
SUMvynuluje a v každom prechode sa k nemu pripočítaI.
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:
500 FOR W=1 TO 300:NEXT WNerobí 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 NEXT | error B26024: FOR I has no NEXT |
NEXT bez FOR | error 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 -1 | telo sa vykoná raz a slučka skončí |
| v tele meníš počítadlo | slučka preskakuje hodnoty – radšej to nerob |
z tela sa skáče von cez GOTO | funguje; slučka ostane rozrobená, kým ju nenahradí nový FOR s tým istým počítadlom |
Vyskúšaj si
- Vypíš párne čísla od 2 do 20.
- Vypíš malú násobilku celú: desať riadkov a v každom desať čísel. (Slučka v slučke a čiarka v
PRINT.) - Spýtaj sa na číslo
Na vypíš súčin čísel od 1 doN(faktoriál).
Zhrnutie
FOR I=a TO b…NEXT Ivykoná telo preIodapobvrátane.STEP nmení krok; bez neho je 1, záporný počíta nadol.- Telo sa vykoná aspoň raz.
- Slučky sa smú vnárať, nie krížiť.
- Čakacia slučka je v preloženom programe oveľa kratšia než v interpreteri.
Späť: 9. Skok · Ďalej: 11. Podprogramy