ALGORITMIZACE Příklady ze života, větvení, cykly Cíl kapitoly: Uvedení do problematiky algoritmizace Klíčové pojmy: Algoritmus, Vlastnosti správného algoritmu, Možnosti zápisu algoritmu, Vývojový diagram, a konec algoritmu, Sekvence, Větvení, Cyklus Algoritmus přesný postup, který je potřeba k vykonání určité činnosti 1. Podmínky, které algoritmus musí splňovat: mít začátek a konec být věcně správný být jednoznačný být obecný být opakovatelný být srozumitelný 1.1. a konec algoritmu Po konečném počtu kroků musí dojít od počátku do konce. 1.2. Věcná správnost Tato podmínka je velmi důležitá. Porušíme-li podmínku věcné správnosti, pak se tato chyba hned nepozná. Program zdánlivě pracuje, ale má chybné výsledky. Př.: 1. V programech nelze použít výraz se zlomkovou čarou, ale s lomítkem 2. Znak pro odmocninu nelze použít, ale použijeme např. funkci SQRT 1.3. Jednoznačnost Pokud v programu porušíme podmínku jednoznačnosti, pak může program v některých případech (jiná kombinace vstupních dat) buď havarovat, nebo poskytovat špatné výsledky. Př.: Při výpočtu matematických a logických úloh Výrazy se zlomky ošetřit tak, aby jmenovatel bal různý od nuly Při použití funkcí ošetřit oblasti, ve kterých se hodnoty blíží k nevlastnímu bodu Odmocniny v oboru reálných čísel musí být výraz nezáporný 3.11.2010 Algoritmizace 15/1
1.4. Obecnost Každý algoritmus musí řešit co nejširší množství úloh, pro nejširší skupinu uživatelů. Př.: Chceme sestavit algoritmus pro výpočet 2 + 2. Pro jiný součet bychom museli sestavit jiný algoritmus. Proto je nutné algoritmus zobecnit, aby uměl sečíst libovolná čísla. 1.5. Opakovatelnost Správný algoritmus je možné kdykoliv zopakovat a při stejných podmínkách se bude chovat stejně. Př.: Chceme spočítat výraz V = A*B+C. Hodnoty A a B jsme načetli zvenčí, ale neuvedli jsme hodnotu C. Algoritmus musíme upravit tak, aby byla nastavena i hodnota pro proměnnou C 1.6. Srozumitelnost Každý algoritmus musí být natolik srozumitelný, aby mu rozuměl nejen programátor, který algoritmus vytvářel, ale i jiný programátor, který bude na přání uživatele algoritmus upravovat nebo rozšiřovat. Proto pro zápis algoritmů je dobré volit některou z metod, které jsou k tomuto účelu určeny. Je nutné v dostatečné míře používat komentáře, u všech proměnných v algoritmu by měl být vysvětlen jejich význam. 2. Možnosti zápisu algoritmů slovní vyjádření matematický zápis rozhodovací tabulky vývojové diagramy počítačové programy 2.1. Slovní vyjádření algoritmu Slovní popisy algoritmů jsou např. všemožné návody k používání různých výrobků, různé technologické postupy (recepty). Používá se pro: skupinu lidí, kteří nemají programátorské vzdělání pro komunikaci programátora s uživatelem Výhody: domluvíme se i s laikem Jediná možnost, když nic jiného nezbývá Nevýhody: 3.11.2010 Algoritmizace 15/2
nejméně přehledná Nelze zaručit, zda vede k cíli, zda je jednoznačný, přesný a srozumitelný 2.2. Matematický zápis Tato metoda je vhodná pro řešení matematických vztahů. Př.: Kořeny kvadratické rovnice ve tvaru Ax 2 + Bx + C = 0 se řeší podle vzorce Výhody: je jednoznačný Nevýhody: bývá málo podrobný nelze jej přímo zadat počítači 2.3. Rozhodovací tabulky Je vhodná v případech, kdy se v úloze vyskytuje několik možností a vlastní řešení je pro každou možnost jednoduše popsatelné. Př.: rozvrh hodin pro konkrétní třídu tabulka pro výpočet splátek při leasingu na automobil tabulka pro určení logického součtu a součinu dvou logických hodnot Výhody: zápis je jednoznačný vhodný pro případy většího počtu možností, z nichž je pak řešení velice jednoduše popsatelné Nevýhody: nehodí se pro každý typ úloh pokud vyžadujeme delší vysvětlování, pak tabulka strácí přehlednost 2.4. Vývojové diagramy Je to symbolický algoritmický jazyk, používaný pro názorné zobrazení algoritmu. Používá se jako komunikační prostředek: při týmové spolupráci analytiků a programátorů k dokumentačním účelům je přehlednější než výpis programu. Vývojové diagramy se skládají z jednotlivých symbolů mezi sebou spojeny orientovanými čarami. Postup psaní značek je odshora dolů a zleva doprava. 3.11.2010 Algoritmizace 15/3
3. Značky vývojových diagramů START A,B O = 2*PI*R Mezní značka: kreslí se na začátek a konec diagramu a do místa, kde se má běh algoritmu přerušit. Píšeme do ní obvykle na začátku algoritmu název, na konci slovo END a v místě přerušení STOP. Vstup nebo Výstup: předepisuje načtení dat A, B z vnějšího zdroje (např. z klávesnice) respektive předepisuje výstup dat, např. jejich zobrazení na obrazovce. Obsahuje jména proměnných, jejichž hodnoty se mají načíst nebo zobrazit. Zpracování: znázorňuje nějakou činnost programu, během níž dochází k transformaci dat. V bloku může být jedna nebo více instrukcí. Musí mít jeden vstup a jeden výstup. + - Větvení:slouží k větvení programu na základě podmínky, která je uvedena A>5 uvnitř. V případě splnění, pokračuje program větví označenou znaménkem + v opačném případě větví označenou znaménkem -. Cyklus: označuje začátek cyklu o známém počtu opakování. Stejná značka může být i na konci tohoto cyklu s nápisem cyklu. Spojka: umožňuje spojit dvě části vývojového diagramu, které nebylo možné nakreslit souvisle. Spojky na konci a na začátku musí být označeny stejnými čísly. Podprogram: tato značka předepisuje vykonání činnosti, která je definována jiným vývojovým diagramem. 4. Základní konstrukce algoritmu 3.11.2010 Algoritmizace 15/4
Sekvence nejjednodušší typ algoritmu, skládající se jen ze sekvenčních bloků Větvení pro ošetření nežádoucích důsledků nebo rozvětvení algoritmu při několika možnostech Cyklus opakování určité části algoritmu buď se stejnými, nebo pokaždé jinými daty 4.1. Sekvence 1. Výměna obsahu dvou buněk pomocí pomocné buňky: měna obsahu dvou buněk pomocí pomocné buňky: Čti: A, B POM:=A A:=B B:=POM Zobraz: A, B 3.11.2010 Algoritmizace 15/5
2. Výměna obsahu dvou buněk bez pomocné buňky: Čti: A, B A:=A-B B:=B+A A:=B-A Zobraz: A, B 3.11.2010 Algoritmizace 15/6
3. Objem a plocha válce: Čti: R,V OBJ:=PI*R*R*V PLO:=2*PI*R*R+ 2*PI*R*V Zobraz: OBJ,PLO 3.11.2010 Algoritmizace 15/7
4.2. Větvení 1. Podíl dvou čísel - musíme ošetřit nenulovost dělitele Čti: A,B A<>0 Nelze dělit Zobraz:C=A/B 3.11.2010 Algoritmizace 15/8
2. Odmocnina výraz pod odmocninou nezáporný Čti: A A>=0 Nelze odmocnit Zobraz:SQRT(A) 3.11.2010 Algoritmizace 15/9
3. Zjištění, zda je číslo kladné, či záporné Čti: A A>0 Číslo je záporné Číslo je kladné 3.11.2010 Algoritmizace 15/10
4. Porovnání dvou čísel Čti: A,B A>B B je větší A je větší 3.11.2010 Algoritmizace 15/11
4.3. Cyklus S pevným počtem opakování Řízený podmínkou na začátku cyklu Řízený podmínkou na konci cyklu 4.3.1. Cyklus s pevným počtem opakování 1. Součet prvních N čísel. START čti N S = 0 P = 1 - P <= N Zobraz S + S = S + P END P = P + 1 3.11.2010 Algoritmizace 15/12
4.3.2. Řízený podmínkou na začátku cyklu 1. Aritmetický průměr řady kladných čísel ukončených nulou START S = 0 P=0 cis=0 cis<>0 P<>0 Nemá řešení čti CIS Zobraz Prum=s/P S = S +CIS P=P+1 END 3.11.2010 Algoritmizace 15/13
4.3.3. Řízený podmínkou na konci cyklu 1. zjistěte společného dělitele dvou přirozených čísel Čti: A,B A>B B=B-A A=A-B A<>B Zobraz:A 3.11.2010 Algoritmizace 15/14
Použitá literatura: 1. Jana Pšeničková :Algoritmizace, Computer Media 2007 2. Morkes David:Základy programování Computer Press Praha 1998, Učebnice pro střední školy 3. Kukal Jaromír: Myšlením k algoritmu Grada 1992 3.11.2010 Algoritmizace 15/15