Výpis souhrnů
Cykly a podmínky
Prohlížíte si souhrny informací k určitým tématům. Systémy Umíme se zaměřují hlavně na jejich procvičování. Ke cvičením k jednotlivým podtématům se dostanete pomocí odkazů níže.
Podtémata
Cykly a podmínky
Průběh programu můžeme řídit pomocí cyklů a podmínek. Cykly umožňují vykonávat příkazy opakovaně: buď zadaný počet opakování (opakuj N×), nebo dokud platí nějaká podmínka (opakuj dokud). Podmíněné příkazy umožňují vykonat část programu, pouze pokud platí určitá podmínka.
Cykly a podmínky lze kombinovat – můžeme je do sebe vnořovat. Často se používají zejména podmínky uvnitř cyklů (opakované rozhodování) a cykly uvnitř cyklů (vnořené cykly).
Tipy k procvičování
- Před procvičováním cyklů a podmínek je vhodné důkladně procvičit posloupnosti příkazů. Zejména je potřeba vědět, v jakém pořadí jsou příkazy vykonávány.
- Určování, které příkazy patří do těla cyklu a podmínek, lze procvičit samostatně v rámci tématu vnořené bloky.
- Před vytvářením vlastních programů je užitečné procvičit čtení kódu a pochopení principu cyklů a podmínek, k tomu lze využít cvičení Kód kostky, Rozhodovačku, Pexeso, Přesouvání a Krok po kroku.
- Důkladné procvičení podmínek a cyklů pak umožňuje řešení interaktivních programovacích úloh formou blokového programování. V Želví grafice a ProgMalování lze procvičovat cykly s daným počtem opakování (i vnořené), v Plošinovce podmínky, Stavitel pak umožňuje procvičení všech cyklů i podmíněných příkazů.
- Konkrétní náměty na postup procvičování nabízí výukové moduly Algoritmické myšlení a základy blokového programování (zaměřené na posloupnosti příkazů a cykly) a Blokové programování: podmínky, ladění (zaměřené na podmíněné příkazy a cyklus opakuj dokud).
Opakuj N×
Kdybychom všechny algoritmy vyjadřovali jako prostou posloupnost akcí, byly by často velmi dlouhé a nepřehledné. Proto se snažíme v problémech hledat pravidelnosti a vzory a ty následně vyjádřit v algoritmu pomocí opakovaného provádění stejných instrukcí.
Základní forma opakování je cyklus s pevně daným počtem opakování (v programovacích jazycích se běžně označuje jako for cyklus). Takto například dáme želvě pokyn, aby vykreslila čtverec (který se skládá ze 4 stejných stran):
Při zápisu opakování musíme dávat dobrý pozor na to, co je součástí cyklu a co je mimo něj. Příklad:
První příklad opakuje pouze vykreslování jablek, kreslení jahody je mimo cyklus. Ve druhém příkladě se opakuje vykreslování jablek i jahod. Ve třetím příkladě nejdříve nakreslíme tři jablka, potom tři jahody.
Můžeme též použít cyklus, který se opakuje tak dlouho, dokud není splněná zadaná podmínka. Tyto cykly pokrývá navazující téma opakuj dokud.
NahoruPři programování můžeme chtít, aby se nějaké akce provedly tehdy, když dojde k určité události. V Plošinovce můžeme potřebovat vyskočit při kliknutí a otočit se, když narazíme na kaktus. Hlavička bloku určuje událost, na kterou čekáme (kliknutí myši, stisknutí klávesy, doručení zprávy). Tělo bloku pak obsahuje příkazy, které se mají při dané události provést.
Programy s událostmi
Akce se provede vždy, když dojde k dané události. Pokud tedy k události dochází opakovaně, akce se provede vícekrát. Naopak, pokud k události nikdy nedojde, akce se neprovede ani jednou. Jeden program může obsahovat více událostí. V takovém případě se může stát, že dojde k více událostem současně a provede se několik akcí v jednu chvíli. (Události proto souvisí se souběžností.) Vytváření programů s událostmi se označuje jako událostmi řízené programování.
Události vs. podmínky
Události mohou připomínat podmíněné příkazy – v obou případech se nějaké příkazy provádí jen tehdy, když něco platí. Podmínka podmíněného příkazu se však kontroluje pouze v ten moment, když na ni při vykonávání programu narazíme, zatímco na událost se čeká během celého programu. Události jsou spouštěné konkrétními signály (např. kliknutí), zatímco podmínky mohou být obecné výrazy obsahující např. porovnávání a logické spojky. Události a podmínky lze kombinovat – tělo události může tvořit podmíněný příkaz.
Využití událostí
Události umožňují vytvářet interaktivní programy, které reagují na akce uživatele. To se běžně používá v hrách (při stisnutí mezerníku postavička vyskočí), v aplikacích s grafickým uživatelským rozhraním (textový procesor reaguje na zmáčknutou klávesu zobrazením příslušného znaku) a ve webových aplikacích (při stisknutí na tlačítko „Odeslat“ se odešle zpráva). Lze však reagovat i na události uvnitř programu (když postavička vejde do dveří, změní se scéna).
Události ve Scratchi
Událostmi řízené programování využívá i Scratch. Kromě akcí uživatele může být událostí i obdržení zprávy, kterou rozešleme v jiné části programu.
Podmínky a větvení
U většiny algoritmů potřebujeme, aby postup závisel na aktuálním stavu. Polévku musíme zahřívat a míchat, dokud nezačne vřít. Pokud při příjezdu na křižovatku svítí červená, auto musí zastavit.
Rozhodování podle podmínek zapisujeme pomocí slov pokud a jinak (v angličtině if a else). Názorné příklady:
Někdy větev „jinak“ nepoužíváme. Pokud podmínka není splněna, tak se v takovém případě neprovede žádná speciální akce:
Při vyjadřování podmínek často využíváme logické spojky (a zároveň, nebo, negace).
NahoruOpakuj dokud
Kromě základních cyklů s pevně daným počtem opakování využíváme často v algoritmech i cyklus typu opakuj dokud. Tento cyklus se opakuje tak dlouho, dokud je splněna zadaná podmínka. V programovacích jazycích se pro zápis tohoto typu cyklu využívá příkaz while.
Pozor na rozdíl oproti podobně znějícímu podmíněnému příkazu pokud. Tělo příkazu pokud se provede nejvýše jednou, zatímco tělo příkazu dokud se může provádět opakovaně.
Všimněte si, že po provedení cyklu podmínka neplatí (vláček není na žlutém políčku). Podmínka se vyhodnocuje ještě před prvním vykonáním těla cyklu. Pokud není splněna, tak se tělo cyklu neprovede ani jednou:
Jako u všech řídicích bloků musíme dávat dobrý pozor na to, co je součástí cyklu a co je mimo něj:
Podmínka se kontroluje vždy před provedením celého bloku, nikoliv po každém příkazu:
Při vyjadřování podmínek často využíváme logické spojky (a zároveň, nebo, negace):
Opakované rozhodování
K rozhodování podle podmínky používáme podmíněný příkaz pokud. Pokud se potřebujeme rozhodovat opakovaně, můžeme podmíněný příkaz provádět opakovaně uvnitř cyklu. K opakování využíváme příkaz opakuj N× nebo opakuj dokud, případně rekurzi – vzájemně se volající funkce (ve cvičení Robotanik). Příklady:
V těle cyklu může být příkazů více. Pozornost je potřeba věnovat odsazení, které určuje, který příkaz je součástí cyklu a podmíněného příkazu. V následujícím programu je příkaz nahoru
součástí vnořeného podmíněného příkazu (provede se 3×), příkaz doprava
je součástí cyklu, ale nikoliv podmíněného příkazu (provede se 5×) a příkaz doleva
je vně cyklu (provede se pouze jednou, po skončení cyklu).
Vnořené cykly
K opakování příkazů slouží příkazy opakuj N× a opakuj dokud.
V těle cyklu mohou být nejen základní příkazy, ale třeba i další cyklus – ten nazýváme vnořený cyklus. Pro jeho použití nepotřebujeme žádný nový příkaz. Prostě jen cyklus zapíšeme (a odsadíme) uvnitř jiného cyklu:
Odsazení příkazů je důležité – určuje, co je součástí kterého cyklu. Kdyby bylo kreslení jahody odsazené více, bylo by součástí vnitřního cyklu:
Naopak, kdyby bylo kreslení jahody odsazené méně, nebylo by součástí žádného cyklu a provedlo by se až po dokončení vnějšího cyklu: