Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyAlgoritmizace a programování Návrh algoritmů II Opakující se kód, cykly

Logo Matematická biologie

Opakující se kód, cykly

Cyklus je určitá část algoritmu, která se provádí opakovaně. Ukážeme si smysl cyklů na příkladu. Představte si algoritmus pro hledání minima ze tří čísel. Kdybychom chtěli najít minimum z pěti čísel, z deseti čísel, z tisíce čísel atd., tak by se nám vývojový diagram neúměrně rozrostl. A smyslem vývojových diagramů je zápis programů, nikoliv popsání všech dostupných papírů.

Začneme od zjištění minima ze dvou zadaných hodnot a). Výsledkem bude menší z obou hodnot. Kdybychom chtěli tento algoritmus rozšířit na tři, tak můžeme postupovat dále a nalezené menší číslo porovnáme se třetím zadaným. Můžeme to ovšem udělat i tak, že si nalezené minimum uložíme a další porovnání provedeme pouze s tímto minimem b).

Pokud bychom přidali další porovnání, tak bychom ho opět mohli dělat pouze s uloženým minimem c). Tím dostáváme opakující se kód. Jsou zde ovšem ještě dvě věci, které by bylo potřeba změnit. Načtení provádím do proměnné, která se pokaždé jmenuje jinak, a za druhé by bylo vhodné upravit počátek tak, aby jeho zápis vypadal stejně jako následně přidávané sekvence.

Nejprve upravíme počáteční sekvenci, tj. vývojový diagram z a). Je několik možností a my si tu ukážeme dvě hlavní. V první jde o to, že první načtené číslo se stane počáteční inicializací hledaného minima, které si průběžně ukládáme do proměnné MIN d). Druhou možností je počáteční inicializaci proměnné MIN udělat na nějakou strašně velkou hodnotu. Nejlépe na tu maximální, kterou si označíme +nekonečno. Kdybychom hledali maximum, tak by počáteční inicializace byla na -nekonečno.

V principu jde o to, aby z prvního porovnání vyšlo menší (resp. větší při hledání maxima) námi zadané číslo, ať je jakékoliv. To nám zajistí pouze a jenom nějaká maximální hodnota při hledání minima (resp. minimální hodnota při hledání maxima), protože cokoliv je menší než +nekonečno. Výsledkem je vývojový diagram d).

Inicializace je důležitá i z jiného hlediska. Každý algoritmus musí totiž splňovat podmínku opakovatelnosti, tj. pro stejná vstupní data musí dávat stejný výsledek. Kdybychom proměnnou MIN neinicializovali, tak by se nedalo minimálně při prvním porovnání určit, jakou má hodnotu, a výsledek takového porovnání by byl nejistý. Každá proměnná musí mít známou hodnotu před svým prvním použitím.

A jako poslední se zbavíme měnících se jmen proměnných. Když se podíváme, kde se načtená proměnná (třeba A) používá, tak zjistíme, že po načtení se s ní provede porovnání a případně se její hodnota uloží do proměnné MIN. Dále se již nepoužívá. Z toho vyplývá, že při dalším načítání nemusíme používat jinou proměnnou, ale můžeme využít tuto proměnnou opakovaně.

Výsledkem tedy bude vývojový diagram f) – výsledek diagramu pro nalezení maxima ze tří hodnot. Na tomto obrázku je vidět, že zde máme část, která se stále opakuje, a to včetně jmen proměnných. Nyní můžeme přistoupit k zápisu takového algoritmu s pomocí cyklu.

Nejprve si ukážeme, jak se takový cyklus (označovaný jako for cyklus) zapisuje do vývojového diagramu. Tělo je část kódu, která se má cyklicky opakovat. Počet opakování je dán rozsahem, který je zapsán ve značce pro cyklus. V něm se zadává rozmezí od - do, např. rozmezí od 1 do 100 znamená, že se cyklus provede stokrát.

Hodnota cyklu se mění každým průchodem automaticky a ukládáme si ji do nějaké pomocné proměnné (nejčastěji i od slova index). Občas se stane, že tuto hodnotu k ničemu nepotřebujeme, ale i tak je dobré ji ukládat do nějaké proměnné.

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