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.

Mezní značky podprogramu

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.

Značka volání podprogramu

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 


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.