Shrnutí blokového programování a ukázka Pythonu
| Typický ročník | 9. |
| Interval vhodných ročníků | 9. – 2. SŠ |
| Učivo | shrnutí blokového programování, Python – proměnné, cykly, podmínky, čtení kódu, želví grafika, ladění programů |
| Předcházející moduly | |
| Navazující modul | Programování v Pythonu I |
| Bezprostřední výsledky učení |
|
| Související RVP výsledky učení |
|
Modul završuje výuku blokového programování shrnutím klíčových programátorských konceptů (cykly, podmínky, proměnné, funkce) a představuje žákům textové programování na příkladu jazyka Python. Cílem je posílit dovednosti v oblasti algoritmizace a nabídnout plynulý přechod mezi vizuální a textovou formou zápisu. Python je představen v jednoduché formě jako „ochutnávka“, která má žákům ukázat, že základy textového programování jsou pochopitelné a dosažitelné. Téma přesahuje rámec výstupů RVP pro ZŠ, ale může být vhodným rozšířením výuky.
Tento blok doporučujeme řešit.
Jen málokdy napíšeme napoprvé bezchybný kód. Riziko chyb snižuje snaha o kvalitní kód, chybám se ale zcela nevyhneme, proto je potřeba chyby aktivně hledat. Chyby v kódu se někdy označují anglickým termínem bug. Proces ověřování správnosti kódu nazýváme testování, proces zjišťování příčiny chyby a její odstranění nazýváme ladění (někdy též „debugování“, angl. „debugging“).
Typy chyb
Rozlišujeme chyby syntaktické (chybný zápis programu – program nelze spustit) a sémantické (program se vykoná, ale nesplňuje požadované chování). Speciálním případem sémantické chyby je zacyklení (program se nikdy nezastaví, např. protože podmínka cyklu nikdy nepřestane platit).
Příklady chybNěkolik příkladů častých sémantických chyb:
- prohození pořadí příkazů (např. pořadí zatáčení a posunu vpřed)
- chybný počet opakování cyklu
- chybné vymezení těla cyklu (např. chybí odsazení příkazu, který se má opakovat)
- záměna cyklu a podmíněného příkazu (dokud místo pokud)
- záměna ostré a neostré nerovnosti (x < y místo x ≤ y)
- záměna logické spojky (P a Q místo P nebo Q)
- prohození srovnávaných proměnných (x < y místo y < x)
- prohození přiřazované proměnné a hodnoty (x ← y místo y ← x)
- záměna proměnných (použití chybné proměnné, hrozí zejména při nevhodném pojmenování)
- použití špatného typu proměnné (řetězec “3” místo čísla 3)
- chybná hodnota parametru (např. nesprávný úhel, o který je potřeba zatočit)
- záměna argumentů při volání funkce (f(a, b) místo f(b, a))
- záměna výpisu a vrácení z funkce (vypiš místo vrať)
Znalost běžných chyb umožňuje zaměřit při ladění pozornost na místa, kde by se mohla chyba ukrývat.
Postup při ladění programu
Tipy k ladění programůKvalitní kód je takový, který se snadno čte, testuje a upravuje. Kvalitu kódu je vhodné průběžně vylepšovat opravami následujících problémů.
Nepoužitý kód
Části kódu, které se buď neprovedou, nebo sice provedou, ale nijak neovlivňují jeho chování, zbytečně komplikují pochopení programu a je proto vhodné je odstranit. Zbytečný může být příkaz, cyklus, podmínka, proměnná i celá funkce.
Efekt nemá opakované přiřazení stejné hodnoty (např. nastavení aktuální barvy malující želvy), přiřazení hodnoty do proměnné, se kterou se již dále nepracuje, nebo matematické operace, které nemění hodnotu (přičtení 0, vynásobení 1).

Pokud se cyklus provede vždy právě jednou, není potřeba – nedochází k žádnému opakování. Cyklus odstraníme, ponecháme však příkazy, které byly v jeho těle. Pokud se tělo cyklu neprovádí vůbec, lze cyklus odstranit včetně jeho obsahu. Obě tyto situace jsou nejsnáze vidět u cyklu opakuj N×, ale mohou nastat u všech typů cyklů.

Pokud podmínka platí vždy, nahradíme podmíněný příkaz obsahem větve pokud. Pokud podmínka neplatí nikdy, nahradíme ho obsahem větve jinak (pokud větev jinak nemá, tak celý podmíněný příkaz smažeme).

Pokud větev jinak neobsahuje žádný příkaz, lze ji vypustit.

Pokud neobsahuje žádný příkaz první větev, lze větve prohodit (a prázdnou vypustit) negací podmínky.

Proměnná, do které se pouze zapisují hodnoty, ale nikdy se z ní hodnota nečte, nemá na běh a výstup programu žádný vliv a lze ji tedy odstranit.

Funkce, kterou pouze definujeme, ale nikde nevoláme, je zbytečná a lze ji odstranit.
Zbytečně složitý kód
Pokud lze kód zjednodušit, zvýší to většinou jeho čitelnost. Relativně jednoduché jsou případy, kdy lze sloučit dva příkazy, cykly, nebo podmínky. Kód lze ale také někdy zjednodušit použitím vhodnější programovací konstrukce (např. cyklu opakuj N× místo opakuj dokud) nebo rozkladem programu (zavedením pomocných funkcí).
Sloučení dvou po sobě jdoucích akcí do jedné. Například dvě otočení o 90° a 30° lze nahradit jediným otočením o 120°.

Pokud je v těle cyklu pouze vnořený cyklus, lze je sloučit do jediného. Sloučení lze také provést u dvou bezprostředně následujících cyklů, které mají stejné tělo.

Pokud podmíněný příkaz obsahuje ve svém těle pouze další podmíněný příkaz, lze se vyhnout vnoření použitím složené podmínky.

Sloučit lze také dva podmíněné příkazy s opačnou podmínkou (pomocí úplného podmíněného příkazu).

Pokud lze logické výrazy zjednodušit, je to typicky vhodné udělat. Častým případem je aplikace negace na nerovnost nebo složenou podmínku. (V případě úplného podmíněného příkazu lze alternativně prohodit příkazy ve větvích pokud a jinak a negaci vypustit.)

Pokud je počet opakování dopředu známý, použijeme cyklus s daným počtem opakování, který je jednodušší.


Pokud se má příkaz provést nejvýše jednou, použijeme podmíněný příkaz, nikoliv cyklus.

Pokud je hlavní program nebo některá funkce příliš složitá, je vhodné program nebo funkci rozložit do více funkcí tak, aby každá funkce měla jasný účel.
Náměty na doplňkové aktivity
ProjektDo tohoto modulu se přirozeně hodí větší otevřený projekt, ve kterém žáci vytvářejí program, pro který si sami vymýšlejí zadání. Pro takový projekt se hodí například nástroj Scratch nebo programování fyzických robotů.