Rýchlokurz micro:bit/04 Cyklus for
Zo stránky SensorWiki
← Predchádzajúca lekcia | ⌂ Obsah kurzu | Nasledujúca lekcia →
Čo sa naučíte
- opakovať príkazy presne daný počet krát,
- používať riadiacu premennú cyklu,
- rozsvietiť ľubovoľnú LED podľa súradníc,
- vložiť jeden cyklus do druhého (vnorené cykly).
Vysvetlenie: cyklus s počítadlom
Cyklus forever opakuje príkazy donekonečna. Často však potrebujeme niečo zopakovať presne N-krát, napr. trikrát zablikať alebo odpočítať od 9 po 0. Na to slúži cyklus for.
Cyklus for má riadiacu premennú (v MakeCode sa predvolene volá index), ktorá funguje ako počítadlo. Pred prvým opakovaním má počiatočnú hodnotu a po každom opakovaní sa zvýši o 1. Keď prekročí koncovú hodnotu, cyklus skončí a program pokračuje príkazom, ktorý nasleduje za cyklom. V tele cyklu sa dá riadiaca premenná čítať, takže každé opakovanie môže urobiť niečo trochu iné.
Cyklus for poznajú všetky bežné jazyky, líši sa len zápisom:
| Bloky | JavaScript | Python | Hodnoty premennej index |
|---|---|---|---|
for index from 0 to 4 |
for (let index = 0; index <= 4; index++) |
for index in range(5): |
0, 1, 2, 3, 4 |
repeat 4 times |
for (let index = 0; index < 4; index++) |
for index in range(4): |
0, 1, 2, 3 |
⚠️ Pozor na hranice. Blok for index from 0 to 4 vykoná telo päťkrát (0, 1, 2, 3, 4), koncová hodnota sa teda ešte vykoná. V JavaScripte to vyjadruje podmienka index <= 4 („kým je index menší alebo rovný 4“). V Pythone range(5) znamená „čísla od 0 po 5, ale bez 5“. Programátori v praxi takmer vždy počítajú od nuly, preto si na to zvyknite hneď.
JavaScriptový zápis for (let index = 0; index <= 4; index++) má tri časti oddelené bodkočiarkami: počiatočné nastavenie (let index = 0), podmienka pokračovania (index <= 4) a krok (index++ je skratka pre index = index + 1). Rovnaký zápis používa aj jazyk C, s ktorým sa stretnete v ďalších predmetoch.
Program 1: odpočítavanie
Bloky cyklov sú v kategórii Loops, matematické operácie v kategórii Math.
-
Program v blokoch...
for (let index = 0; index <= 9; index++) {
basic.showNumber(9 - index)
basic.pause(500)
}
basic.showIcon(IconNames.Yes)
for index in range(10):
basic.show_number(9 - index)
basic.pause(500)
basic.show_icon(IconNames.YES)
Ako to funguje
Riadiaca premenná index postupne nadobúda hodnoty 0, 1, 2, … 9. Zobrazujeme však výraz 9 - index, teda 9, 8, 7, … 0. Týmto jednoduchým trikom dostaneme odpočítavanie, hoci index stúpa. Po desiatom opakovaní cyklus skončí a vykoná sa príkaz za ním: zobrazí sa fajka.
Všimnite si, že fajka sa zobrazí len raz: príkaz showIcon nie je odsadený, teda nie je súčasťou tela cyklu.
Program 2: postupné rozsvietenie displeja
Každá LED na displeji má svoje súradnice (x, y). Súradnica x je číslo stĺpca zľava doprava, y číslo riadku zhora nadol, obe od 0 po 4. Ľavá horná LED má teda súradnice (0, 0), pravá dolná (4, 4). Blok plot x y z kategórie Led rozsvieti jednu LED, blok unplot x y ju zhasne.
-
Program v blokoch...
for (let y = 0; y <= 4; y++) {
for (let x = 0; x <= 4; x++) {
led.plot(x, y)
basic.pause(100)
}
}
for y in range(5):
for x in range(5):
led.plot(x, y)
basic.pause(100)
Ako to funguje
Tu sú dva cykly vnorené do seba. Vonkajší cyklus prechádza riadky (y = 0 až 4). Pri každom jeho opakovaní prebehne celý vnútorný cyklus, ktorý prejde všetky stĺpce daného riadku (x = 0 až 4). Telo vnútorného cyklu sa teda vykoná 5 × 5 = 25-krát, raz pre každú LED. Displej sa zapĺňa ako text v knihe: riadok po riadku, v každom riadku zľava doprava.
Riadiace premenné sme tu premenovali na x a y, lebo tieto mená presne vyjadrujú ich význam. V bloku for stačí kliknúť na meno premennej a zvoliť New variable....
Časté chyby
- O jedno opakovanie viac alebo menej – najčastejšia chyba pri cykloch vôbec (anglicky off-by-one error). Pri každom cykle si overte, aká je prvá a posledná hodnota riadiacej premennej.
- Príkaz vo vnútri namiesto za cyklom (alebo naopak). V blokoch skontrolujte, do ktorých „čeľustí“ blok patrí, v Pythone odsadenie.
- Súradnice mimo rozsahu. LED s x = 5 neexistuje, príkaz sa jednoducho nevykoná a neohlási chybu.
Úlohy
- Upravte odpočítavanie tak, aby počítalo od 5 po 1 a potom zobrazilo text „START“.
- Pomocou bloku repeat nechajte srdce trikrát zablikať a potom zobrazte smajlíka.
- Upravte program 2 tak, aby sa displej plnil po stĺpcoch zhora nadol (stačí vymeniť poradie cyklov). Potom pridajte ďalšiu dvojicu cyklov s blokom unplot, ktorá displej postupne zhasne.
- Nakreslite na displej uhlopriečku z ľavého horného do pravého dolného rohu jedným cyklom. Pomôcka: aký vzťah majú súradnice x a y pre LED na uhlopriečke?
- Naprogramujte „bežiace svetielko“: jedna LED v strednom riadku sa presúva zľava doprava (rozsvietiť – počkať – zhasnúť – posunúť).
← Predchádzajúca lekcia | ⌂ Obsah kurzu | Nasledujúca lekcia →