Právní upozornění Všechna práva vyhrazena. Žádná část této tištěné či elektronické knihy nesmí být reprodukována a šířena v papírové, elektronické či jiné podobě bez předchozího písemného souhlasu nakladatele. Neoprávněné užití této knihy bude trestně stíháno. Používání elektronické verze knihy je umožněno jen osobě, která ji legálně nabyla v rozsahu stanoveném autorským zákonem. Elektronická kniha je datový soubor, který lze užívat pouze v takové formě, v jaké jej lze stáhnout z portálu. Jakékoliv neoprávněné užití elektronické knihy nebo její části, spočívající např. v kopírování, úpravách, prodeji, pronajímání, půjčování, sdělování veřejnosti nebo jakémkoliv druhu obchodování nebo neobchodního šíření je zakázáno! Zejména je zakázána jakákoliv konverze datového souboru nebo extrakce části nebo celého textu, umisťování textu na servery, ze kterých je možno tento soubor dále stahovat, přitom není rozhodující, kdo takového sdílení umožnil. Je zakázáno sdělování údajů o uživatelském účtu jiným osobám, zasahování do technických prostředků, které chrání elektronickou knihu, případně omezují rozsah jejího užití. Uživatel také není oprávněn jakkoliv testovat, dekompilovat, zkoušet či obcházet technické zabezpečení elektronické knihy. Děkujeme že elektronické knihy nelegálně nešíříte. Podporujete tak vznik dalších elektronických titulů. Kopírování zabíjí elektronické knihy!
(c) Computer Media s.r.o. Všechna práva vyhrazena. www.computermedia.cz
[email protected]
Další servery s elektronickým obsahem v i d e o p r í r u c k y. c z
Algoritmizace Ing. Jana Pšenčíková
Nakladatelství a vydavatelství
Vzdìlávání, které baví www. c o mp u t e r m e d i a . c z
R
Algoritmizace Algoritmizace Autor: Ing. Jana Pšenčíková Návrh layoutu: Pavel Navrátil Zlom a sazba: Ing. Michal Jiříček Návrh obálky: Ing. Michal Jiříček Jazyková úprava: PhDr. Dagmar Procházková
© Computer Media s.r.o., 2007 Vydání první Všechna práva vyhrazena
ISBN: 80-86686-80-9
Žádná část této publikace nesmí být publikována a šířena žádným způsobem a v žádné podobě bez písemného svolení vydavatele. Adresa: Computer Media s.r.o. Hrubčická 495 798 12 Kralice na Hané Česká republika Telefon: +420 582 302 666 Fax: +420 582 302 667 E-mail:
[email protected] Web: http://www.computermedia.cz
Líbí se Vám tato učebnice? Co v ní postrádáte? Své tipy, postřehy a názory pište na adresu
[email protected]. Děkujeme Vám. PARTNERSKÝM SERVEREM TÉTO KNIHY JE WWW.ISKOLA.CZ
Nakladatelství a vydavatelství
www.computer media.cz
2
R
i škola.cz VAŠE ELEKTRONICKÁ ŠKOLA
Obsah Obsah ALGORITMUS .............................................................................................................................. 7 CO JE TO ALGORITMUS A PROČ VYTVÁŘÍME ALGORITMY ................................................................................................................ 7 Začátek a konec algoritmu .............................................................................................................................................................................. 7 Věcná správnost ............................................................................................................................................................................................... 9 Jednoznačnost............................................................................................................................................................................................... 10 Obecnost ....................................................................................................................................................................................................... 12 Opakovatelnost .............................................................................................................................................................................................. 12 Srozumitelnost ............................................................................................................................................................................................... 13
MOŽNOSTI ZÁPISU ALGORITMŮ .......................................................................................................................................................... 13 Slovní vyjádření algoritmu .............................................................................................................................................................................. 13 Matematický zápis .......................................................................................................................................................................................... 14 Rozhodovací tabulky ...................................................................................................................................................................................... 14 Vývojové diagramy ......................................................................................................................................................................................... 16 Počítačový program ....................................................................................................................................................................................... 18 Další formy zápisu algoritmů ......................................................................................................................................................................... 18
SEKVENCE ................................................................................................................................ 19 Jednoduchá sekvence s jedním sekvenčním blokem – příkaz výstupu ......................................................................................................... 19 Sekvence se dvěma sekvenčními bloky ......................................................................................................................................................... 19 Součet obsahu dvou buněk, přiřazovací příkaz ............................................................................................................................................. 20 Výměna obsahu dvou buněk .......................................................................................................................................................................... 21 Další typické sekvenční algoritmy .................................................................................................................................................................. 22 Rozdíl a součin .............................................................................................................................................................................................. 22 Obdélník – obvod a plocha ............................................................................................................................................................................ 23 Obvod kružnice a plocha kruhu ..................................................................................................................................................................... 23 Rovnostranný trojúhelník – obvod a plocha ................................................................................................................................................... 23 Objem a plocha válce .................................................................................................................................................................................... 24 Šestiúhelník - obvod a obsah ......................................................................................................................................................................... 24 Výměna hodnot ve dvou buňkách bez pomocné buňky ................................................................................................................................. 25 Pythagorova věta ........................................................................................................................................................................................... 25
VĚTVENÍ .................................................................................................................................... 26 OŠETŘENÍ NEŽÁDOUCÍCH DŮSLEDKŮ ............................................................................................................................................... 26 Křižovatka ...................................................................................................................................................................................................... 26 Podíl ............................................................................................................................................................................................................... 27 Obecnější výraz s dělením ............................................................................................................................................................................. 27 Odmocnina .................................................................................................................................................................................................... 28 Obecný výraz ................................................................................................................................................................................................. 28
VĚTVENÍ Z DŮVODU NĚKOLIKA ŽÁDOUCÍCH MOŽNOSTÍ ................................................................................................................. 29 Nedělní program ............................................................................................................................................................................................ 29
VÝRAZY S ABSOLUTNÍ HODNOTOU, VLASTNOSTI ČÍSEL ................................................................................................................. 29 Absolutní hodnota .......................................................................................................................................................................................... 29 Zjištění, zda je číslo kladné, či záporné ......................................................................................................................................................... 30 Zjištění, zda je číslo sudé, či liché ................................................................................................................................................................. 30 Dělitelnost ...................................................................................................................................................................................................... 31
POROVNÁVÁNÍ A ŘAZENÍ ČÍSEL, MAXIMUM A MINIMUM .................................................................................................................. 32 Porovnání dvou čísel podle velikosti............................................................................................................................................................... 32 Seřazení dvou čísel s pomocnou buňkou ...................................................................................................................................................... 33 Největší ze tří čísel – bez pomocné buňky .................................................................................................................................................... 33 Maximum ze tří čísel s použitím pomocné buňky .......................................................................................................................................... 34 Maximum ze tří čísel s použitím dočasného maxima ..................................................................................................................................... 34 Seřazení tří čísel podle velikosti bez pomocné buňky .................................................................................................................................... 35 Seřazení tří čísel s použitím pomocné buňky ................................................................................................................................................ 36 Seřazení tří čísel podle velikosti s respektováním výsledku předchozího kroku ............................................................................................ 37 Seřazení čtyř čísel podle velikosti – s pomocnou buňkou .............................................................................................................................. 38
ÚLOHY Z GEOMETRIE ............................................................................................................................................................................ 39 Trojúhelník ...................................................................................................................................................................................................... 39 Test na trojúhelník rovnoramenný, rovnostranný, obecný ............................................................................................................................... 40 Test na pravoúhlý trojúhelník .......................................................................................................................................................................... 41
KOMBINOVANÉ ALGORITMY ................................................................................................................................................................. 43 Lineární rovnice .............................................................................................................................................................................................. 43 Soustava dvou lineárních algebraických rovnic ............................................................................................................................................. 43 Kvadratická rovnice s reálnými kořeny ........................................................................................................................................................... 44 Kvadratická rovnice s komplexně sdruženými kořeny .................................................................................................................................... 45 Kalkulačka ...................................................................................................................................................................................................... 47 Rychlost, dráha, čas ....................................................................................................................................................................................... 48 Pohyb rovnoměrně zrychlený ......................................................................................................................................................................... 49 Vlaky .............................................................................................................................................................................................................. 50
CYKLY ....................................................................................................................................... 53 CYKLUS A JEHO TYPY ........................................................................................................................................................................... 53
3
Algoritmizace Cykly s pevným počtem opakování ............................................................................................................................................................... 54 Cyklus řízený podmínkou – podmínka je na začátku cyklu ............................................................................................................................ 55 Cyklus řízený podmínkou – podmínka je na konci cyklu ................................................................................................................................ 56 Čekací smyčka ............................................................................................................................................................................................... 57
ÚLOHY S OPAKOVÁNÍM ......................................................................................................................................................................... 58 Paralelní odpory ............................................................................................................................................................................................. 58 Kalkulačka ...................................................................................................................................................................................................... 59
SUMY, PROHLEDÁVÁNÍ ŘADY ČÍSEL, MAXIMUM A MINIMUM ............................................................................................................ 61 Zobrazení čísel od jedničky do desítky .......................................................................................................................................................... 61 Zobrazení čísel od dvojky do dvacítky, jen sudé ............................................................................................................................................ 61 Suma čísel od 1 do 10 ................................................................................................................................................................................... 62 Suma 10 různých čísel, resp. libovolného počtu čísel .................................................................................................................................... 62 Maximum z deseti kladných čísel ................................................................................................................................................................... 63 Maximum a minimum z celých čísel, jejichž počet bude zadán předem ........................................................................................................ 65 Suma čísel, jejichž počet není předem znám – test uprostřed cyklu ............................................................................................................ 67 Suma čísel, jejichž počet není předem znám – s testem na začátku ............................................................................................................ 67 Suma čísel, jejichž počet není znám předem – s testem na konci cyklu ....................................................................................................... 68 Maximum z neznámého počtu čísel .............................................................................................................................................................. 69 Maximum a minimum z neznámého počtu celých čísel ................................................................................................................................. 70 Zjištění, kolik čísel je kladných a kolik záporných – celkový počet je znám ................................................................................................... 71 Zjištění, kolik čísel je kladných, kolik záporných - přijde-li nula, pak cyklus skončí ........................................................................................ 72 Zjištění, kolikrát se v textu objeví zadané písmeno – text je zadáván po znacích ......................................................................................... 73 Zjištění, kolikrát se v textu objeví zadané písmeno – text je zadán najednou ............................................................................................... 74 Zjištění počtu slov ve větě – znak po znaku ................................................................................................................................................... 75 Zjištění počtu slov ve větě – načte se celá věta najednou ............................................................................................................................. 76 Součin pomocí součtu ................................................................................................................................................................................... 77 Dělení pomocí odečítání ................................................................................................................................................................................ 78 Největší společný dělitel ................................................................................................................................................................................ 79 Součet číslic v čísle ....................................................................................................................................................................................... 80 Test, kolikrát se vyskytuje určitá číslice v daném čísle ................................................................................................................................... 81
ODDECHOVÉ ÚLOHY .............................................................................................................................................................................. 82 Písnička „Když jsem já sloužil“ ....................................................................................................................................................................... 82 Společenská hra „Severní pól“ ...................................................................................................................................................................... 84 Zajíci a bažanti .............................................................................................................................................................................................. 85
ČÍSELNÉ SOUSTAVY A PŘEVODY MEZI NIMI ...................................................................................................................................... 86 Převod z desítkové soustavy do dvojkové – nové cifry se vypisují od nejvyšších ........................................................................................ 88 Převod čísla z dvojkové soustavy do desítkové ............................................................................................................................................. 89
ŘADY – ARITMETICKÉ, GEOMETRICKÉ, DALŠÍ .................................................................................................................................. 90 Aritmetická řada – výpočet hodnoty prvků řady, prvky se zobrazují průběžně .............................................................................................. 90 Aritmetická řada – výpočet hodnoty prvků řady, všechny prvky se zobrazí nakonec ..................................................................................... 91 Aritmetická řada – součet ............................................................................................................................................................................... 92 Geometrická řada – výpočet hodnoty prvků řady, prvky se zobrazují průběžně ............................................................................................ 93 Geometrická řada – výpočet hodnoty prvků řady, všechny prvky se zobrazí nakonec .................................................................................. 94 Geometrická řada – Suma ............................................................................................................................................................................. 95 Složité úrokování ........................................................................................................................................................................................... 96 Stavební spoření ............................................................................................................................................................................................ 98 Faktoriál ....................................................................................................................................................................................................... 100 Algoritmus pro výpočet Ludolfova čísla ................................................................................................................................................... 101 Algoritmus pro výpočet hodnoty přirozeného logaritmu čísla 2 ................................................................................................................... 102 Algoritmus pro výpočet funkce sinus x pomocí mocninné řady ................................................................................................................... 103 Algoritmus pro výpočet funkce ex pomocí mocninné řady ........................................................................................................................... 104
OPERACE S VEKTORY A MATICEMI ................................................................................................................................................... 105 Součet vektorů ............................................................................................................................................................................................. 105 Skalární součin vektorů ................................................................................................................................................................................ 106 Minimum z řady čísel, metoda přímého výběru – řešení pomocí vektoru ................................................................................................... 107 Maximum z řady čísel, metoda probublávání – řešení pomocí vektoru ....................................................................................................... 108 Matice – načtení prvků ................................................................................................................................................................................ 109 Matice – počet kladných a záporných prvků ............................................................................................................................................... 110 Největší a nejmenší prvek matice ................................................................................................................................................................ 111 Pozice největšího a nejmenšího prvku matice ............................................................................................................................................ 112 Trojúhelníková matice .................................................................................................................................................................................. 113 Diagonální matice ........................................................................................................................................................................................ 114 Matice otočená kolem hlavní diagonály ....................................................................................................................................................... 116 Součet matic ................................................................................................................................................................................................ 118 Součin matic ................................................................................................................................................................................................ 119
TŘÍDICÍ ALGORITMY ............................................................................................................................................................................. 121 Select Sort (třídění přímým výběrem) ........................................................................................................................................................... 121 Bubble Sort (třídění probubláváním) - zjednodušený ................................................................................................................................... 123 Bubble Sort (třídění probubláváním) - klasický ............................................................................................................................................ 124 Shake Sort (třídění přetřásáním) .................................................................................................................................................................. 126
4
Úvod
Vysvětlivky k prvkům použitým v knize V knize naleznete několik značek, které mají svůj smysl. Na první pohled tak snadno vizuálně pochopíte, zda je text důležitý, zda se jedná o poznámku, nebo na co si máte dávat pozor. Poznámka: Tímto symbolem jsou v textu označeny poznámky, tedy text, který není nezbytně nutný pro pochopení vysvětlovaného problému. Má za úkol pouze upřesnit nebo doplnit význam textu, případně odkázat na jiné stránky s podobným tématem. Tip: Tímto symbolem jsou v textu označeny všechny tipy. Tip je text, který podává návod na vyzkoušení dalších postupů a ukazuje i jiné možnosti řešení daného problému. Upozornění: Tímto symbolem jsou v textu označena všechna upozornění. Varují před záludnými překážkami a úskalími, na něž je nutné dávat pozor, a upozorňují na nebezpečí v programech a na časté chyby v postupech. Pamatujte: Tímto symbolem jsou v textu označeny pasáže, které je dobré si zapamatovat a znát. Většinou se jedná o základy probírané látky daného tématu. Bez znalosti těchto pasáží obvykle není možné úspěšně pokračovat v dalším studiu.
POJMY A PRVKY POUŽITÉ V TEXTU Při výkladu algoritmizace jsou použity tyto značky: Začátek nebo Konec - vyskytuje se pouze na začátku programu (pak z jeho dolního okraje vystupuje šipka a uvnitř je uvedeno Začátek) nebo na jeho konci (pak šipka vstupuje do jeho horního okraje a je uvnitř uvedeno Konec). Vstup nebo Výstup - znázorňuje načtení dat, která jsou potřebná pro činnost programu (Čti: ...), nebo také zobrazení výstupů programu na zobrazovacím zařízení (Zobraz: ...) – např. na obrazovce nebo na tiskárně. Zpracování - znázorňuje nějakou činnost programu, během které dochází k transformaci dat (například sečtení dvou čísel). Během sekvenčního bloku nesmí dojít k rozvětvení programu (má jen jeden výstup). Rozhodovací blok - slouží k rozvětvení programu na základě podmínky, která je uvedena uvnitř. Je-li podmínka splněna, pak program pokračuje větví označenou znaménkem +, není-li splněna, pokračuje větví označenou znaménkem -. Příprava - označuje přípravnou fázi programu, užívá se například pro zahájení cyklu o známém počtu opakování. Stejná značka může být i na konci tohoto typu cyklu. Spojka - umožňuje spojit dvě části vývojového diagramu, které nebylo možno nakreslit souvisle (např. přerušení na konci stránky nebo z důvodu křížících se čar). Spojky na konci přerušení a na začátku pokračování musí být označeny stejnými čísly. Podprogram - znázorňuje samostatnou část programu, která může obsahovat větší množství kroků (například Načti matici A).
5
Algoritmizace CO NAJDETE V TÉTO KNIZE Algoritmizace je jednou z nejdůležitějších činností při vytváření softwaru. Zabývá se formulací postupů, podle kterých pak programátor vytváří program. Je to ta část dovedností, která nepodléhá času, momentální módě, ani firemním zájmům. Za posledního půl století vznikla řada programovacích jazyků, které byly po několika letech nahrazeny modernějšími, a po jazycích, které se učíte dnes, přijdou určitě zase jiné. Jediné, co zůstalo stejné a co budete moci použít i po mnoha letech, je právě algoritmizace. Osvojíte-li si algoritmický způsob myšlení, pak se stanete nepostradatelnými odborníky, a to i v případě, že se nebudete zabývat tvorbou softwaru. Právě k tomu Vám má dopomoci tato kniha. Kniha je rozčleněna celkem do čtyř kapitol a obsahuje více než stovku vývojových diagramů s podrobnými komentáři a vysvětlivkami. Je určena zejména pro studenty středních škol, které systematicky vede krok po kroku ke zdolání úskalí algoritmizace. Věřím, že zde najdou inspiraci i pedagogové, kterým usnadní jejich nelehkou práci při přípravě výuky. V první kapitole s názvem Algoritmizace je definován pojem algoritmus včetně všech podmínek, které musí splňovat. Význam jednotlivých podmínek je dokázán sporem – je ukázáno, jak by algoritmus dopadl, kdyby příslušná podmínka chyběla. Druhá kapitola se jmenuje Sekvence. Obsahuje nejjednodušší principy tvorby algoritmů. Ty se sice samostatně uplatní jen málo, ale jsou základním stavebním kamenem při tvorbě složitějších algoritmů. Třetí kapitola se zabývá větvením. Je to jeden ze základních prvků algoritmizace, který umožní na základě vyhodnocení podmínky zpracovat několik variant řešení. Část kapitoly je věnována systematickému ošetřování nežádoucích stavů, jež mohou nastat při řešení úloh (dělení nulou, pokus o odmocnění záporného čísla...), zbytek se zabývá úlohami, které mají několik plnohodnotných řešení. Čtvrtá – nejobsáhlejší – kapitola je věnována cyklům. Od jednoduchých úloh, ve kterých vystačíte se „selským rozumem“, budete vedeni složitějšími postupy, k nimž budete potřebovat znalosti středoškolské matematiky (goniometrické funkce, aritmetické, geometrické či mocninné řady, exponenciální funkce a logaritmy). Na závěr si ukážeme několik typů třídicích algoritmů. V knize jsou ctěny mezipředmětové vztahy – zejména návaznost na středoškolskou matematiku a fyziku. Aby učebnice nebyla tak suchopárná, najdete zde i oddechové pasáže – algoritmizace písniček, společenských her či hádanek. Upozornění: Zápis matematických a fyzikálních veličin a vztahů je přizpůsoben obvyklému způsobu zápisu v algoritmech a vývojových diagramech.
VĚNOVÁNÍ Tato kniha je věnována všem (nejen mým) budoucím maturantům.
6
Algoritmus - proces algoritmizace
Algoritmus CÍL KAPITOLY: UVEDENÍ DO PROBLEMATIKY ALGORITMIZACE Důležité pojmy: •
Algoritmus
•
Vlastnosti správného algoritmu
•
Možnosti zápisu algoritmu
•
Vývojový diagram
•
Začátek a konec algoritmu
•
Sekvence
•
Větvení
•
Cyklus
•
Rozhodovací tabulky
•
Program
•
Překladač
CO JE TO ALGORITMUS A PROČ VYTVÁŘÍME ALGORITMY Každý student v dnešní době už přišel do styku s počítačem a pracoval s počítačovými programy, byť jako uživatel. Tyto programy musel předtím někdo vytvořit – musel počítači přesně říci, co mají dělat. To znamená, že: •
napřed musel vymyslet postup, kterému říkáme algoritmus;
•
pak tento postup musel přepsat do kódu, kterému počítač bude rozumět – přepsat jej do nějakého programovacího jazyka.
Algoritmus je přesný postup, který je potřeba k vykonání určité činnosti. Musí splňovat následující podmínky: •
musí mít začátek a konec – po konečném počtu kroků musí dojít od počátku do konce;
•
musí být věcně správný;
•
musí být jednoznačný - v každém jeho kroku musí být jasné, jaký bude jeho následující krok;
•
musí být obecný;
•
musí být opakovatelný;
•
musí být srozumitelný.
Význam těchto podmínek bude ukázán na příkladech.
Začátek a konec algoritmu Podívejte se nejprve, jak by vypadal špatný algoritmus, ve kterém by byla tato základní podmínka porušena. Možná znáte písničku Pes jitrničku sežral – zapsána do algoritmu by vypadala takto: Vidíte, že se písnička bude zpívat pořád dokola a tento algoritmus nikdy neskončí. Pokud byste podle tohoto algoritmu napsali program, fungoval by tak, že by se po jeho spuštění neustále vypisoval text písničky a program by nebyl k zastavení. Musel by být násilně ukončen, nebo byste museli vypnout počítač (což v obou případech není nejlepší řešení).
docela maličkou
Jak tedy algoritmus upravit? V běžném životě spoléháme na inteligenci člověka (v našem případě zpěváka písničky) – až ho přestane zpívání bavit nebo až všichni posluchači usnou, skončí. Počítač však vlastní inteligenci nemá a dělá pouze to, co mu přikážete. 7
Algoritmizace Pokuste se tedy podobnou podmínku dodat do algoritmu, a tím odstranit jeho nedostatek. V následujícím schématu je již algoritmus správný, byla doplněna podmínka, která umožní cyklus ukončit.
docela maličkou
Doplněná podmínka
Na první pohled se zdá, že by nikdo takovou hloupou chybu neudělal, aby vytvořil algoritmus, který nedojde do konce. Ve skutečnosti je však porušení podmínky konečnosti algoritmu poměrně častou chybou, protože to nemusí vypadat vždy tak průhledně jako v naší písničce. Upravený algoritmus - teď už ve správném tvaru
Doplněná instrukce
1. průchod I=1 2. průchod I=2 . . . 10. průchod I=10
U tohoto příkladu jde o algoritmus, u kterého na počátku není jasné, jak velké je I. Co když je hned větší než 10? Pak se bude pořád dál zvyšovat a k desítce se nikdy nevrátí. Algoritmus nikdy neskončí. 8
Algoritmus - proces algoritmizace Upozornění: Zhotovíte-li program podle špatného algoritmu (ve kterém je porušena podmínka konečnosti), pozná se to buď tak, že navenek opakuje neustále stejné kroky, nebo „zatuhne“ a vy nevíte, co se děje, nebo systém havaruje z důvodu přetečení paměti.
Věcná správnost Podmínka věcné správnosti je velmi důležitá a vlastně by měla být samozřejmostí. K čemu vám budou všechny poučky o algoritmech, pokud k výpočtu použijete špatný vzoreček? Platí zde samozřejmě přísloví „dvakrát měř, jednou řež“ – všechny vztahy, které použijete v algoritmu, je nutno pořádně zkontrolovat.
Nesprávný vzorec
Upozornění: Nejčastější chybou u začátečníků je nesprávný přepis vzorce do vývojového diagramu (a následně do programu). a) Výrazy se zlomky: V programech nelze použít zlomkové čáry, namísto nich se používá / (lomítko). Výraz:
musíte přepsat jako
X :=(A+B) / (C+D), každý jiný zápis je nesprávný. Pokud byste výraz zapsali takto:
X := A+B / C+D, znamenalo by to nebo takto:
X := A+B / (C+D), znamenalo by to Přednosti ve vyhodnocování matematických operací, které byly určeny délkou zlomkové čáry, se musí nahradit závorkami, jinak má přednost násobení a dělení před sečítáním či odečítáním. b) Výrazy s odmocninami Stejně tak nelze v programech použít Pak například výraz
(znak pro odmocninu), ten se nahrazuje výrazem SQRT.
musíte zapsat jako SQRT(A+B), každý jiný zápis je nesprávný.
Stejná pravidla platí i u psaní goniometrických funkcí (argument musí být vždy v závorce) a dalších funkcí. Upozornění: Zhotovíte-li program podle špatného algoritmu, ve kterém je porušena podmínka věcné správnosti, pak se tato chyba na první pohled nepozná. Program zdánlivě pracuje, ale poskytuje chybné výsledky. Poznámka: Někdy se v počáteční fázi algoritmizace používají v algoritmech i matematické zápisy se zlomkovými čarami či znaky odmocniny , které jsou později nahrazeny programátorským zápisem. V rámci této učebnice bude od počátku používán programátorský zápis, protože byste se mu stejně nevyhnuli a usnadníte si tím pozdější přechod k programování.
9
Algoritmizace Jednoznačnost Porušení podmínky jednoznačnosti bývá úplně nejčastější závadou, která se u algoritmů vyskytuje. Je to tím, že tvůrce algoritmu musí pečlivě zvažovat všechny možnosti, které mohou během zpracování nastat. Ukázka opět ozřejmí několik příkladů: 1. Kino nebo výlet Potkají se dva kamarádi a jeden druhého se ptá: „Co budeš dělat zítra?“ Druhý odpoví: „Půjdu buďto do kina, nebo na výlet.“ Je to algoritmus? Je vidět, že v tomto případě je jasně porušena podmínka jednoznačnosti. Dotyčný neví, zda půjde do kina, nebo na výlet. Člověk by určitě v tomto případě nejednal nahodile, rozhodl by se na základě nějakých dalších okolností, které by nastaly, a rozumově je vyhodnotil. Pokud by však byl stejným algoritmem řízen robot, pak by nefungoval, protože by se dostal do situace, ve které by se nedokázal rozhodnout.
Aby byl algoritmus správný, musí se do něj doplnit podmínka, na jejímž základě dojde k rozvětvení. Dialog dvou přátel upravíme: Potkají se dva kamarádi a jeden druhého se ptá: „Co budeš dělat zítra?“ Druhý odpoví: „Bude-li hezky, půjdu na výlet, nebude-li hezky, půjdu do kina.“ Nyní už je algoritmus správný (viz obr. vpravo). 2. Kožich Jistý mladík se kamarádí s jednou slečnou. Ta mu řekne: „Nekoupíš-li mi kožich, rozejdu se s tebou.“ Je možné její tvrzení pokládat za algoritmus (viz obr. vpravo)? Vidíte, že v tvrzení slečny je skryta podmínka, která však není korektní. Je zde propracovaná jen jedna větev algoritmu – co se stane, když mladík slečně kožich nekoupí. Druhá větev algoritmu – když slečna kožich dostane – zde úplně chybí. Chybí větev
Aby se jednalo o správný algoritmus, musí se doplnit i druhá větev: V úvahu připadá několik možností:
10
•
dostane-li slečna kožich, zůstane s mladíkem „navěky“ (což je málo pravděpodobné);
•
usoudí, že dostala, co chtěla, a s mladíkem se stejně rozejde;
•
bude klást další požadavky tak dlouho, až jí jednou mladík nevyhoví, a pak se s ním stejně rozejde.
Algoritmus - proces algoritmizace Takto by vypadaly upravené verze „Už tě nepotřebuji“ a „Kladení dalších požadavků“ :
3. Dělení Tento příklad zastupuje celou řadu matematických a logických úloh, ve kterých se musíte zabývat podmínkami řešitelnosti a na které se při algoritmizaci zapomíná. Jsou to zejména: •
výrazy se zlomky – jmenovatel se nemůže rovnat nule (pak se hodnota výrazu blíží k nekonečnu);
•
různé další funkce (například goniometrické, exponenciální, geometrické řady...) – musíte ošetřit oblasti, ve kterých se hodnoty funkcí blíží k nekonečnu;
•
odmocniny – hledáte-li řešení v oboru reálných čísel, pak výraz pod odmocninou nesmí být záporný.
Na tato ošetření se často zapomíná, a dochází tak k nejzávažnějším chybám v programech. Podmínky řešitelnosti se vždy ošetřují větvením algoritmu: •
na větev, kde je vše v pořádku a pokračuje se ve výpočtu (resp. v jiné činnosti algoritmu)
•
na větev, kde se zpravidla uživateli sdělí, že něco brání zdárnému průběhu (jedná-li se už o program, pak se vypíše chybové hlášení) a algoritmus skončí. Doplněná podmínka, teď už je algoritmus správný.
Neošetřené dělení – co když bude ve jmenovateli nula?
Upozornění: Zhotovíte-li program podle špatného algoritmu, ve kterém je porušena podmínka jednoznačnosti, pak program v některých případech (v závislosti na zadaných vstupních datech) pracuje správně a poskytuje správné výsledky. V jiných případech tentýž program (při jiné kombinaci vstupních dat) buď havaruje, nebo se chová navenek korektně, ale poskytuje nesmyslné výsledky. 11
Algoritmizace Obecnost Každý algoritmus musí být co nejobecnější, aby bylo možné pomocí něj řešit co nejširší množství úloh. Je v zájmu každého tvůrce softwaru, aby jeho programy byly použitelné pro co nejširší skupinu uživatelů (a tedy i potenciálních kupců). Ukažme si tento jev na příkladu: Představte si, že zpracujete program, který bude umět spočítat, kolik je 1+1. Algoritmus bude velice jednoduchý, bude to ale znamenat, že když budete chtít sečíst jiná dvě čísla, budete muset vytvořit sice velice podobný, ale přesto nový algoritmus a ten pak naprogramovat. Proto je nutné algoritmus zobecnit, aby uměl sečítat jakákoli dvě čísla. Teď už sice umíte sečíst libovolná dvě čísla, ale algoritmus je pořád ještě málo obecný. Co když budete chtít také odečítat, násobit a dělit? Potom je nutné algoritmus ještě dále zobecnit. Jeho vývojový diagram najdete v kapitole Větvení pod názvem Kalkulačka (str. 47). Doplněná instrukce; teď už algoritmus umožňuje sčítat všechna čísla.
Opakovatelnost Základní podmínkou pro správný algoritmus je, že je možné jej kdykoli zopakovat a při stejných podmínkách se bude chovat stejně. To znamená, že při zadání stejných vstupních dat dospějete vždy ke stejným výsledkům. Jak vůbec může dojít k tomu, že by se algoritmus mohl chovat pokaždé jinak? Předveďme si na příkladu, kdy je zapotřebí spočítat výraz:
C = A * I+ B Hodnoty A a B jste sice načetli zvenčí, ale ve výrazu se vyskytuje ještě další proměnná I, o které není nic známo. Obecně může nabývat libovolných hodnot. K této chybě může dojít, když je daný algoritmus součástí nějakého většího celku, ve kterém je stejná proměnná využívána k něčemu úplně jinému. Chyba vznikla tak, že ve skutečnosti výsledek tohoto algoritmu nezávisel jen na načtených datech, ale ještě na jedné další proměnné, o které jste nic nevěděli. Původní algoritmus
Proměnná I, která je neznámá.
12
Upravený algoritmus
Proměnná I bude rovněž načtena zvenčí.
Proměnné I přiřadíte hodnotu.
Algoritmus - proces algoritmizace Algoritmus upravíte tak, že si zjistíte, zda se s uvedenou proměnnou nepracuje ještě někde jinde (pokud je váš algoritmus součástí většího celku). Pokud ano, zvolíte jiný název proměnné a pak (v obou případech, ať byl váš algoritmus součástí něčeho většího, či ne) musíte do algoritmu dodat hodnotu této proměnné •
buď načtením zvenčí,
•
nebo přiřazením hodnoty (viz obr. na předchozí straně dole - Upravený algoritmus).
Srozumitelnost Každý algoritmus musí být natolik srozumitelný, aby mu rozuměl nejen programátor, který podle něj bude vytvářet program, ale i sám tvůrce, jenž bude po nějakém čase nucen algoritmus na přání uživatele upravit nebo rozšířit. Proto pro zápis algoritmů volte některou z metod, které jsou k tomuto účelu určeny, a používejte v dostatečné míře komentáře. Všechny proměnné, které v algoritmu použijete, by měly být popsány a měl by být vysvětlen jejich význam.
MOŽNOSTI ZÁPISU ALGORITMŮ Pro zápis algoritmů můžete nejčastěji zvolit některou z těchto metod: •
slovní vyjádření;
•
matematický zápis;
•
rozhodovací tabulky;
•
vývojové diagramy;
•
počítačové programy.
Slovní vyjádření algoritmu Na počátku kapitoly bylo řečeno, že algoritmus je přesný postup k vykonání určité činnosti. Musí mít začátek a konec, musí být správný, jednoznačný, obecný a srozumitelný. Pokud bude slovní popis určité činnosti dostatečně přesný, věcně správný ... atd., potom se bude jednat o vyjádření algoritmu. Slovní popisy algoritmů jsou známy z běžného života – jsou to všemožné návody k používání různých výrobků, různé technologické postupy apod. Slovní vyjádření algoritmu se používá v těchto případech: •
Skupina lidí, kterým je algoritmus určen, nemá programátorské vzdělání a nelze předpokládat, že by akceptovala jiné než slovní vyjádření (recepty v kuchařské knize, návod na použití DVD přehrávače apod.).
•
Při komunikaci analytika (programátora) s uživatelem. Člověk odpovědný za algoritmizaci v softwarové firmě (analytik) nemusí být odborníkem na věcnou problematiku, kterou má algoritmizovat. Musí však umět „vyzpovídat“ uživatele, aby mu přesně řekl, co všechno od programu, který si objednal, očekává. V první fázi tedy analytik volí slovní formu vyjádření algoritmu, aby si ji nechal odsouhlasit či doplnit uživatelem (který zase není programátor). Výhody slovního vyjádření:
•
je to forma vyjádření algoritmu, pomocí které se domluvíte i s laikem;
•
je to jediná možnost, když nic jiného nezbývá. Nevýhody slovního vyjádření:
•
ze všech forem zápisu algoritmů je nejméně přehledné;
•
nemá nástroje jak „uhlídat“, zda algoritmus vede ve všech případech k cíli, zda je opravdu jednoznačný a zejména dostatečně přesný a srozumitelný (snad každý z nás občas kroutil hlavou nad nesrozumitelným návodem nebo se pozastavil nad nejasným zněním zákona, který je natolik nejednoznačný, že záleží na šikovnosti právníka, v čí prospěch ho vyloží).
Podívejme se na pár příkladů, které přibližují použití slovního vyjádření: 1. Školní řád: „Žáci jsou povinni chodit do školy slušně a čistě oblečeni, řádně upraveni a učesáni.“ Výňatek ze školního řádu 13
Algoritmizace Kdykoli čte třídní učitel tuto pasáž ve třídách školy, která je zaměřena na informatiku, zvedne se les rukou a studenti požadují definici slušného oblečení, řádné úpravy zevnějšku a účesu. Znění školního řádu vychází z určitých obecně vžitých pravidel, co lidé v našem kulturním prostředí považují za slušné či upravené. Potíž je ale v tom, že jinou představu o slušném oblečení či účesu může mít -náctiletý student, a jinou -cetiletý (-sátiletý) učitel či učitelka. Tento příklad je docela úsměvný a svědčí o tom, že studenti přemýšlejí o informacích, které se jim předkládají. 2. Odstoupení od smlouvy (méně úsměvný příklad): Od smlouvy lze odstoupit v těchto případech: a)
...
b)
...
c)
...
d)
když odporuje dobrým mravům.
Zjednodušený výňatek z Obchodního zákoníku. Znění zákona opět vychází z obecného povědomí o dobrých mravech. Potíž je však v tom, že jinou představu o dobrých mravech má člověk, kterého ošidili, a jinou několikrát trestaný recidivista.
Matematický zápis Tato forma je vhodná všude tam, kde je možné řešenou problematiku popsat pomocí matematických vztahů. Použití této formy je možné přiblížit opět na následujícím příkladu: 1. Kořeny kvadratické rovnice ve tvaru
ax2 + bx + c = 0 se řeší podle vzorce
Výhody matematického zápisu: •
Je jednoznačný - člověk znalý úpravy matematických výrazů jednoznačně určí, za jakých podmínek je možno úlohu řešit. Pro něho je tedy zápis jednoznačný a splňuje podmínky pro vyjádření algoritmu. Často slouží jako platforma, na které si předává podklady odborník – technik či výzkumník (který není programátorem) – s analytikem-programátorem. V rámci jednoho zadání se může jednat o velké množství komplikovaných matematických vztahů. Nevýhody matematického zápisu:
•
Ve většině případů bývá málo podrobný a nelze jej přímo zadat počítači. Člověk například ví, že kdyby dosadil do výše uvedeného vzorce čísla a a by se náhodou rovnalo nule, vyjde mu nesmysl, nebo kdyby výraz pod odmocninou byl menší než nula, rovnice nebude mít řešení v oboru reálných čísel.
•
Kdyby se však tento vzorec přímo přepsal do programovacího jazyka a neošetřily se všechny podmínky, které mohou nastat, pak by program v určitých situacích havaroval.
Rozhodovací tabulky Další možností pro zápis algoritmu je rozhodovací tabulka. Je velice 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říkladem užití rozhodovacích tabulek může být: 1. Rozvrh hodin pro určitou konkrétní třídu Z rozhodovací tabulky znázorňující rozvrh (viz obr. na následující straně) je každému studentovi jasné, že:
14
•
je-li pondělí, pak má první vyučovací hodinu češtinu, druhou vyučovací hodinu matematiku... atd.;
•
je-li úterý, pak má první vyučovací hodinu matematiku, druhou hodinu angličtinu... atd.
Algoritmus - proces algoritmizace •
Chce-li zjistit, co bude mít například ve středu čtvrtou vyučovací hodinu, vybere řádek Středa a z něj okýnko ve sloupečku 4. 1.
2.
3.
4.
5.
6.
7.
Pondělí
ČJ
Mat
Fyz
Progr.
Progr.
Tv
Tv
Úterý
Mat
AJ
AJ
Ele
Ele
-
-
Středa
Mat
ČJ
AJ
Děj
Prakt. cv.
Prakt. cv.
-
Čtvrtek
ČJ
Eko
Eko
ITZ
ITZ
-
-
Pátek
Mat
Fyz
ČJ
Eko
Bio
-
-
2. Tabulka pro výpočet daně z příjmu Jedná se rovněž o rozhodovací tabulku. Podle výše svého příjmu si každý najde kategorii, do které spadá, a podle ní si spočítá svůj základ daně. Základ daně
Daň
Ze základu přesahujícího
od Kč
do Kč
0
121 200
12 %
121 200
218 400
14 544 + 19 %
121 200 Kč
218 400
331 200
33 012 + 25 %
218 400 Kč
331 200
a více
61 212 + 32 %
331 200 Kč
3. Tabulka pro určení logického součinu a součtu dvou logických hodnot Dalším typickým příkladem je tabulka pro určení logického součinu a součtu dvou logických hodnot. Existují-li dvě logické proměnné A a B, může mít každá z nich buď hodnotu 0 (logické NE), nebo 1 (logické ANO). V prvních dvou sloupečcích (A, B) jsou uvedeny všechny kombinace hodnot, které mohou nastat: •
A bude 0 a k tomu B bude také 0;
•
A bude 1 a k tomu B bude 0;
•
A bude 0 a k tomu B bude 1;
•
A bude 1 a k tomu B bude také 1
Rozhodovací tabulka řeší dvě funkce: •
logický součin (A and B) - A „a současně“ B;
•
logický součet (A or B) - A „nebo“ B.
A
B
A
B
0
0
0
0
1
0
0
1
0
1
0
1
1
1
1
1
Vysvětlení pro ty, kdo nejsou obeznámeni s Booleovou algebrou (ostatní mohou tuto část přeskočit). Logický součin může být objasněn na jednoduchém příkladu: Mladík A si domluví schůzku se slečnou B. •
hodnota 0 znamená, že dotyčný (dotyčná) nepřijde;
•
hodnota 1 znamená, že dotyčný (dotyčná) přijde.
Výsledek A and B (A a současně B): •
hodnota 0 znamená, že se schůzka neuskuteční;
•
hodnota 1 znamená, že se schůzka uskuteční.
Z rozhodovací tabulky je pak patrné, že se schůzka uskuteční pouze v případě, že se dostaví oba. Logický součin A and B má hodnotu 1 pouze v případě, že A i B je rovno 1. Logický součet může být objasněn takto: Z jedné země do druhé je zapotřebí doručit důležitou zprávu. Protože cesta je daleká a plná nástrah, panovník pošle raději se stejnou zprávou dva posly (posel A a posel B). •
hodnota 0 znamená, že dotyčný posel nedorazí;
•
hodnota 1 znamená, že dotyčný posel dorazí. 15
Algoritmizace Výsledek A or B (A nebo B): •
hodnota 0 znamená, že se zpráva na místo nedostane;
•
hodnota 1 znamená, že se zpráva na místo dostane.
Z rozhodovací tabulky je patrné, že se zpráva dostane na místo určení, když dorazí aspoň jeden z poslů (nebo oba). Logický součet A or B má tak hodnotu 1 ve všech případech, kde aspoň jedna z hodnot A, B je rovna 1. Následujícím odstavcům by již měli věnovat pozornost všichni. Výhody rozhodovacích tabulek: •
zápis je jednoznačný, velice přehledný a snadno pochopitelný;
•
je velice vhodný v případech, kde může nastat větší počet možností a v rámci každé z nich je pak řešení velice jednoduše popsatelné (tak, aby se vešlo do jedné buňky tabulky). Nevýhody rozhodovacích tabulek:
•
nehodí se pro každý typ úloh;
•
pokud by u některé možnosti algoritmus vyžadoval delší vysvětlování, pak by tabulka ztratila přehlednost a převzala všechny nevýhody slovního zápisu.
Vývojové diagramy Již od začátku této kapitoly jste si jistě všimli, že jsou v ní používány určité značky (ovály, obdélníky, kosočtverce...), jejichž význam je stručně popsán v pasáži Pojmy a prvky použité v textu (str. 5). Jedná se o značky používané právě při tvorbě vývojových diagramů; vzápětí budou objasněny podrobněji. Vývojový diagram je symbolický algoritmický jazyk, který se používá pro názorné zobrazení algoritmu, a je to jedna z nejdokonalejších forem zápisu algoritmů. Používá se zejména při vývoji softwaru: •
jako komunikační prostředek při týmové spolupráci analytiků s programátory;
•
k dokumentačním účelům – vývojový diagram je přehlednější než výpis programu.
Vývojové diagramy se skládají z jednotlivých symbolů, jež jsou mezi sebou spojeny orientovanými hranami - čarami, které jsou označeny šipkou vyjadřující směr postupu algoritmu. Obecně vžitý postup psaní značek je odshora dolů a zleva doprava. V některých případech tento postup nemůže být dodržen (například v cyklech se čára vrací o několik kroků zpět, nebo je potřeba dostat se z konce stránky na začátek z levého sloupce do pravého). V těchto případech je šipka nezbytně nutná. Značky vývojových diagramů Mezní značky Mezní značka představuje vstup z vnějšího prostředí do programu nebo výstup z programu do vnějšího prostředí, např. začátek nebo konec programu. Používá se také pro začátek či konec samostatně zpracované části programu (pro podprogram), má vždy jen jednu orientovanou hranu (vstupní nebo výstupní). Začátek Je-li mezní značka použita na začátku, pak je v ní napsáno Začátek. Do značky nesmí vstupovat žádná hrana a musí z ní vystupovat právě jedna hrana (z dolního okraje značky směrem dolů). Před touto značkou už nesmí být žádná další. Konec Je-li mezní značka použita na konci, pak je v ní napsáno Konec. Do značky musí vstupovat právě jedna hrana (do jejího horního okraje směrem shora dolů) a nesmí z ní vystupovat žádná hrana. Za touto značkou už nesmí být žádná další. Sekvenční bloky Sekvenční bloky se vyskytují uvnitř vývojového diagramu (nesmějí být použity jako první nebo poslední). Označují sekvenční postup algoritmem (je možné se do něho dostat pouze z předchozího prvku a po jeho vykonání lze postoupit pouze na jeden prvek následující). V jejich průběhu nesmí dojít k rozvětvení algoritmu. Značky sekvenčních bloků jsou uvedeny na následující stránce. 16
Algoritmus - proces algoritmizace Sekvenční bloky - značky a popis sekvenčních bloků Vstup nebo Výstup Při běhu programu je nutno komunikovat s počítačem. Je zapotřebí: •
aby se „dovnitř“ dostala data, která program potřebuje ke své činnosti (buď je zadá uživatel z klávesnice, nebo mohou být načtena z datového souboru),
•
aby se nakonec uživatel dozvěděl výsledky zpracování (může si je nechat zobrazit na obrazovce počítače, vytisknout na tiskárně nebo si je nechat uložit do souboru).
Vstup Znázorňuje načtení dat potřebných pro činnost programu. Uvnitř značky je Čti: ... Výstup Znázorňuje zobrazení výstupů programu na zobrazovacím zařízení. Uvnitř značky je Zobraz: ... Jedná se o sekvenční blok, proto musí mít právě jeden vstup a právě jeden výstup. Zpracování Znázorňuje nějakou činnost programu, během níž dochází k transformaci dat (například sečtení dvou čísel, nebo jiná matematická či logická operace). V bloku může být zapsána jedna nebo více instrukcí. Každá z těchto instrukcí však musí být natolik podrobná, že ji lze vykonat najednou (nesmí v sobě skrývat několik dalších operací). Protože Zpracování je rovněž sekvenční blok, musí mít právě jeden vstup a právě jeden výstup. Větvení V některých případech nelze postupovat pouze sekvenčně, ale je potřeba algoritmus rozvětvit. K větvení nemůže docházet nahodile, ale vždy pouze na základě nějaké podmínky. Je-li podmínka splněna, pak program pokračuje jednou cestou (větví), není-li splněna, pokračuje druhou cestou (větví). (Například: Jedete po silnici a uvidíte z ní odbočku do Dolní Lhoty. Určitě neodbočíte nahodile, ale pouze za podmínky, že potřebujete jet do Dolní Lhoty. V opačném případě pokračujete dál.) Rozhodovací blok Slouží k rozvětvení programu na základě podmínky, která je uvedena uvnitř. Je-li podmínka splněna, pak program pokračuje větví označenou znaménkem + (plus), není-li splněna, pak pokračuje větví označenou znaménkem - (minus). Na obrázku je uvedena jedna z možností zobrazení větvení. Není rozhodující, zda větev označená znaménkem + bude vlevo a větev označená znaménkem - vpravo, nebo to bude naopak. Záleží na přehlednosti vývojového diagramu. Pokud v některé větvi bude například více příkazů než v druhé, pak je vhodné kreslit ji na tu stranu, kde je více místa. Další možnost zobrazení rozhodovacího bloku – výstupní větve (hrany) nemusejí vždy vycházet z bočních vrcholů kosočtverce, jedna z nich může vycházet z dolního vrcholu. Také je jedno, zda: •
větev označená + bude vycházet z dolního vrcholu a větev označená z levého, nebo to bude naopak;
• větev označená + bude vycházet z pravého vrcholu a větev označená - zespodu, nebo to bude naopak. Záleží opět na přehlednosti. Podstatné však je, že vstupní hrana musí přicházet do horního vrcholu značky a značka musí mít právě dva výstupy (označené + a -). Poznámka: V některých publikacích se také setkáte s označením větví: •
ano (popř. yes), což je ekvivalent k +;
•
ne (popř. no), což je ekvivalent k - . 17
Algoritmizace Poznámka: V literatuře se někdy můžete setkat s větvením, které má tři výstupní hrany. Ty jsou označeny <, = a >. V podmínce se testuje, zda výraz je menší, roven, nebo větší než zadaná hodnota. Trojité rozvětvení mají jen některé programovací jazyky, zde je používat nebudeme. Další značky Příprava Označuje přípravnou fázi programu, užívá se například pro zahájení cyklu o známém počtu opakování. Stejná značka může být i na konci tohoto typu cyklu, pouze je v ní napsáno Konec cyklu. Podrobnější vysvětlení naleznete v kapitole Cykly ( str. 53). Spojka Umožňuje spojit dvě části vývojového diagramu, které nebylo možné nakreslit souvisle (např. přerušení na konci stránky nebo z důvodu křížících se čar). Spojky na konci přerušení a na začátku pokračování musí být označeny stejnými čísly. Podprogram Znázorňuje samostatnou část programu, která může obsahovat větší množství kroků: • Vyskytuje-li se v algoritmu (a posléze v programu) nějaká jeho část na více místech, pak je vhodné tuto část zpracovat samostatně. Označí se jako jeden blok a ten se pak vloží do výsledného algoritmu na všechna potřebná místa. • Obdobně – vyskytuje-li se hodně často v různých algoritmech stejný postup, je vhodné jej zpracovat samostatně, označit jej jedním blokem a pak jej vložit do všech algoritmů, kde se vyskytuje. Ušetří se tím práce a algoritmus se zpřehlední. Následně při psaní programů se zjednoduší jejich ladění (chyby se odstraňují jen jedenkrát).
Počítačový program Kdybyste se snažili vložit do počítače algoritmus ve tvaru vývojového diagramu (nebo jakéhokoli jiného zápisu, o kterém byla zmínka), nedokázal by si s ním poradit. Ale kdo ví, možná jednou přijde doba, kdy to dokáže ☺. Tento algoritmus musí programátor přepsat do některého programovacího jazyka, program odladit (odstranit chyby) a přeložit jej do strojového kódu. Program je algoritmus zapsaný v jazyce, kterému počítač rozumí a umí z něho vytvořit strojový kód. Program není napsán přímo v „jazyce počítače“, tím je strojový kód. Ale je napsán v jazyce, se kterým si počítač poradí, pokud je vybaven příslušným překladačem. Překladač je program, který umí přeložit program napsaný v programovacím jazyce do strojového kódu. V dnešní době bývá překladač součástí integrovaného vývojového programátorského prostředí. Výhody zápisu ve tvaru programu: •
je to jediná forma, které rozumí člověk (programátor) i počítač (pokud je vybaven příslušným překladačem);
•
tato forma se nedá ničím nahradit ani obejít. Nevýhody programátorského zápisu:
•
rozumí jí pouze programátor, který umí konkrétní programovací jazyk;
•
je málo názorná a přehledná, pro dokumentační činnost se kombinuje např. s vývojovými diagramy.
Další formy zápisu algoritmů Existují ještě další metody zápisu algoritmů, například: •
metody strukturální analýzy (funkční dekompozice, datové modely, diagramy informačních toků);
•
metody objektové analýzy (definice objektů, popis vlastností a metod objektů...).
Tyto metody se používají pro návrh databázových aplikací nebo v objektově orientovaném programování. Tato učebnice jim však nebude věnovat pozornost. 18