Algoritmus a vazba na program
Je důležité si uvědomit, že dosud počítače nejsou schopné zcela samostatného myšlení. Pro provádění výpočtů a obecně zpracování dat je třeba vytvořit jasné postupy - algoritmy zpracování.
1. Algoritmus a vazba na program
1.9. Podprogram
Jistě jste všimli, že algoritmus může být svojí velikostí poněkud rozsáhlý. Nebylo by tedy vhodné algoritmus zpřehlednit? Zkusíme využít principu tzv. dekompozice – postupné dělení problémů na menší – tedy rozčlenění algoritmu na podprogramy (v C# obecně nazývané metody).
Každý podprogram má značku svého začátku a konce (stejně jako hlavní program). Podprogram je definován svým názvem (je vhodné využít VelbloudíNotaci - každé nové slovo je uvozeno velkých písmenem), který je uváděn v počáteční značce podprogramu. Pokud je zapotřebí nějakých vstupů (např. hodnot, textu apod.) jsou uvedeny v závorce za názvem podprogramu. Takové vstupy (potažmo výstupy) se nazývají parametry. V případě definování, tzv. deklarace podprogramu, zatím nemusí být známy konkrétní hodnoty těchto parametrů. Tyto parametry označujeme jako formální parametry. Tyto parametry nabývají konkrétních hodnot až v rámci provádění podprogramu. U těchto parametrů je uveden datový typ (typ dat, které budou obsahovat), který je uveden před názvem každého parametru podprogramu - viz Obrázek 1.

Obrázek 1: Mezní značky podprogramu
Hlavním důvodem proč dekomponovat rozsáhlý program je zejména jeho jednodušší údržba. Velmi často se stává, že se některé příkazy opakují a pokud bychom vkládali kopii tohoto kódu a následně jsme zjistili, že jsme v tomto duplikovaném kódu udělali chybu, musíme tento kód opravovat tolikrát, kolikrát jsme ho duplikovali. Namísto toho, pokud kód umístíme do podprogramu, můžeme tento podprogram několikrát spouštět, tzv. volat (ať už v rámci hlavním programu, nebo podprogramu). Pokud jsme využili podprogram a narazili bychom na chybu v kódu podprogramu, stačí jen opravit kód v podprogramu a bezchybný podprogram stačí jen znovu volat.
K volání podprogramu využíváme následující značku - viz Obrázek 2.
![]()
Obrázek 2: Značka volání podprogramu
Pozn.: Podprogramy jsou někdy též obecně nazývány podprocesy - anglicky „Subprocess“.
Podprogram může představovat:
- Funkci - funkce nám zpravidla vrací pouze jeden výstup, ale její výhodou je, že můžeme přiřadit hodnotu výstupu z této funkce zpět do algoritmu, který danou funkci spustil. U funkce budeme uvádět její datový typ výstupu
- Proceduru - procedura nemusí mít žádný výstup, nebo může mít až několik výstupů (nástroj Flowgorithm umožňuje používat pouze funkci, tj. návrat jednoho výstupu! Lze také specifikovat, že funkce nebude mít žádný výstup - jedná se tedy o proceduru)
Algoritmus KalkulackaPodprogramy - Popis: Vývojový diagram pro řešení aritmetických operací u dvou zadaných čísel pomocí podprogramů
- Zadání: Zkuste navrhnout algoritmus, který řeší základní aritmetické operace podle zadaného číselného kódu (1 … sčítání, 2 … odečítání, 3 … násobení a 4 … dělení) u dvou uživatelem zadaných čísel a a b. Vytvořte funkci ZadejCislo ve které naplníte hodnotu čísla, které je argumentem pro některou z aritmetických operací. Tato funkce má vstupní argument NazevParametru, který je názvem aktuálně zadávaného čísla a je vypsán před načtením hodnoty čísla zadaného uživatelem (aby uživatel věděl, který argument právě zadává). Rozdělte aritmetické operace do následujících podprogramů: SectiParametry, OdectiParametry, NasobParametry a VydelParametry, ve kterých budou prováděny příslušné aritmetické operace. Pro zobrazení výsledku výpočtu deklarujte podprogram ZobrazVysledek
- Řešení:
Podprogramy - funkce:
- ZadejCislo: https://phix.zcu.cz/moodle/pluginfile.php/389313/mod_book/chapter/98975/Algoritmus_Kalkulacka_Podprogram_ZadejCislo.png
- SectiParametry: https://phix.zcu.cz/moodle/pluginfile.php/389313/mod_book/chapter/98975/Algoritmus_Kalkulacka_Podprogram_SectiParametry.png
- OdectiParametry: https://phix.zcu.cz/moodle/pluginfile.php/389313/mod_book/chapter/98975/Algoritmus_Kalkulacka_Podprogram_OdectiParametry.png
- NasobParametry: https://phix.zcu.cz/moodle/pluginfile.php/389313/mod_book/chapter/98975/Algoritmus_Kalkulacka_Podprogram_NasobParametry.png
- VydelParametry: https://phix.zcu.cz/moodle/pluginfile.php/389313/mod_book/chapter/98975/Algoritmus_Kalkulacka_Podprogram_VydelParametry.png
Podprogram - procedura:
Asi si říkáte, že jsme sice pojistili program proti možným chybám ze strany uživatele ve formě vypsání varovné hlášky, např. možné dělení nulou, pokud uživatel zvolil aritmetickou operaci dělení a zadal druhé číslo 0. Sice se na první pohled může zdát, že ve funkci VydelParametry pouze stačí vypsat varovná hláška, ale pokud jste algoritmus spustili, asi jste byli zaskočeni, že aplikace Flowgorithm se zastavila u bloku mezní značky této funkce a bylo vypsáno varovné hlášení: Pokoušíte se číst data z proměnné, do které ještě žádná data nebyla vložena. Příčina: proměnná 'cc' nebyla inicializována (tj. naplněna počáteční hodnotou). Znamená to, že chceme předat jako výstup této funkce něco, co nám funkce ani nevypočítala (neproběhlo dělení parametrů) a proměnná 'cc' je ve skutečnosti prázdná - není v ní uložena žádná hodnota.
Pro ošetření těchto možných chyb a také k dalším účelům využijeme cykly.