Operácie

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.

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.

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

  1. Upravte odpočítavanie tak, aby počítalo od 5 po 1 a potom zobrazilo text „START“.
  2. Pomocou bloku repeat nechajte srdce trikrát zablikať a potom zobrazte smajlíka.
  3. 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.
  4. 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?
  5. 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 →