Lekce 6 - cykly¤
V této lekci si představíme cykly, což je nástroj který nám umožňuje opakovat kód podle nějakého pravidla. Zatím je využijeme pro komunikaci s robotem, v následující lekci si ukážeme jejich použití při řízení robota.
Máme primárně dva typy cyklů:
for
pro případ kdy víme kolikrát se cyklus má opakovatwhile
pro případ kdy neznáme počet opakování
Cyklus for¤
Cyklus for
můžeme napsat takto:
for(let i: number = 0; i < 3; i++) {
// opakovaný kód
}
- řídící proměnnou s její výchozí hodnotou
- výraz který určuje počet opakování
- nakonec jednoduchou operaci která se provede při každém průchodu cyklem jako poslední operace
Tedy vytváříme proměnnou i
s výchozí hodnotou 0
, která bude existovat po dobu toho, co se vykonává cyklus.
Ačkoliv v běžném životě počítáme věci od 1
, v informatice častěji začínáme 0
. Může zde však být cokoliv.
Následně definujeme výraz i < 3
, který značí, kdy se cyklus má zastavit. Na konci cyklu zvýšíme i
o jedna.
Při prvním průchodu bude tedy i = 0
při druhém i = 1
a při třetím i = 2
při dalším zvyšování by platilo i = 3
tam ale už nebude pravdivý výraz i < 3
a cyklus se tedy ukončí.
Do složených závorek píšeme vykonávaný kód, který se v tomto případě vykoná 3-krát.
Zadání A¤
Ve spojení se znalostmi z minulých lekcí napište program, který po stisku tlačítka vypíše čísla 0 až 9 (pomocí console.log(cislo)
), vždy na samostatný řádek.
Kod napište tak aby bylo jednoduché ho upravit na výpis jakéhokoli jiného intervalu, např. 0 až 99 nebo 10 až 19.
Řešení
import * as gpio from "gpio";
const BTN_PIN = 0;
gpio.pinMode(BTN_PIN, gpio.PinMode.INPUT); // nastaví pin 0 jako vstup
gpio.on("falling", BTN_PIN, () => { // událost, která proběhne při stisknutí tlačítka připojeného na pin 0
console.log("Stisknuto, začínáme počítat");
for (let i: number = 0; i < 9; i++) { // vypíšeme čísla od 0 do 8
console.log(i);
}
console.log(""); // oddělíme jednotlivé stisky
});
Cyklus while¤
Pokud nevíme, kolikrát se má cyklus opakovat, použijeme místo cyklu for
cyklus while
.
Do kulatých závorek teď píšeme jen výraz který určuje jestli se cyklus vykoná znovu nebo ne. Kód, který se má vykonávat, dokud platí podmínka, vypadá takto:
while (podmínka) {
// náš kód
}
Zadání B¤
Nyní napište kód který do konzole vypíše čtverec složený z hvězdiček (znaku *
),
např. takto:
***
***
***
Pokud nechceme za vypsanými znaky nový řádek, místo známého console.log()
použijeme stdout.write
Řešení
import { stdout } from "stdio";
const SQUARE_SIZE: number = 3; // velikost čtverce
console.log("Vykreslíme čtverec o velikosti " + SQUARE_SIZE + "x" + SQUARE_SIZE);
for(let row: number = 0; row < SQUARE_SIZE; row++){ // projdeme všechny řádky
for(let col: number = 0; col < SQUARE_SIZE; col++){ // projdeme všechny sloupce
stdout.write("*"); // vypíšeme hvězdičku
}
stdout.write("\n"); // přesuneme se na další řádek
}
Zadání výstupního úkolu V1¤
Napište kod který který vypíše čísla od 9 do 0. Zadání je velmi podobné jako zadání A, jen jdou čísla sestupně namísto vzestupně. Nekopírujte jen dodaný kód, ale zkuste si jej napsat sami.
Zadání výstupního úkolu V2¤
Stejně jako v zadání B budeme do konzole vykreslovat geometrický obrazec, akorát tentokrát to bude trojúhelník jako tenhle:
*
**
***
****
*****