Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyAlgoritmizace a programování Návrh algoritmů III Podprogramy Dekompozice algoritmu

Logo Matematická biologie

Dekompozice algoritmu

Rozklad úlohy na podprogramy není nijak omezen. Dekomponovat tak lze ve více krocích (ve více úrovních), nejprve hrubé rozdělení na několik základních částí a pak dekompozice těchto částí na menší kousky atd. V ideálním případě dostaneme program rozdělený do několika částí, kde každý takový díl programu lze zakreslit vývojovým diagramem jehož velikost o moc nepřesahuje nejsložitější úlohy, které jsme zatím řešili. Tento typ návrhu se označuje shora-dolů, protože začínáme na nejvyšší úrovni a postupně řešíme větší a větší detaily (více a více se ponořujeme do problému).

Jiným způsobem, jak se můžeme dobrat vyřešení složitější úlohy je řešit dílčí části a postupně je spojovat do větších a větších celků. Nakonec je spojíme do hlavního programu. Tento způsob se označuje zdola-nahoru. Rozdíl mezi oběma způsoby je tedy zřejmý, v prvním případě začínáme hlavním programem, kdežto v druhém případě hlavním programem končíme. Druhý rozdíl už tolik zřejmý není, při návrhu shora-dolů jsou většinou dílčí řešení poplatné dané úloze. U řešení zdola-nahoru není problém tak ostře ohraničen (řešíme úlohu, u které nemusí být známa omezení), takže řešení bude více univerzální a tudíž znovupoužitelné.

Pro začátek je jednodušší návrh shora-dolů, protože vyžaduje méně představivosti a analytických zkušeností. I proto budeme vždy používat tento způsob rozkladu úlohy, nejprve si vytvoříme hlavní program, kde budeme volat podprogramy a následně tyto podprogramy vytvoříme.

Dalším polem působnosti podprogramů jsou opakující se části kódu. Řekněme, že děláme program na komunikaci s nějakým zařízením. Přenos použitým protokolem je chráněn kontrolním součtem (CRC). Tento kontrolní součet musíme spočítat než odesleme výzvu do zařízení a dále ho musíme spočítat u příchozí odpovědi, abychom zkontrolovali správnost došlých dat. Výpočet CRC je shodný pro obě zprávy, takže je zbytečné mít ho v programu 2x, ale stačí z něj udělat podprogram, který budeme volat ze dvou míst. Šetříme tím nejenom velikost výsledného programu, ale opět se takový program mnohem lépe udržuje (případná úprava výpočtu CRC se provede jen na jedno místě).

A poslední neméně důležitou oblastí jsou knihovní funkce. Každý programovací jazyk nabízí knihovní funkce bez nichž by bylo programování mnohonásobně složitější. Například výpočet goniometrických funkcí (sin, cos atd.) se jistě dá vypočítat aproximačním výpočtem, ale rozhodně je pohodlnější zavolat přepřipravenou funkci (podprogram), který provede výpočet.

Jinak se ve všech případech se jedná o stejné podprogramy. Rozdíl je pouze v tom, kdo a za jakým účelem je vytváří. Knihovní funkce netvoříme my, ale tvůrce dané knihovny - my je jen využíváme. Ve vývojovém diagramu budeme takové volání odlišovat jako obyčejný příkaz. Podprogramy, co rozdělují úlohu na menší části nebo jsou vytvořeny z důvodu opakujícího se kódu, mohou lehce splynout a nijak je dále rozlišovat nebudeme.

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity