Algoritmizace a programování Ak. rok 2012/2013 vbp 1. ze 44
Vladimír Beneš Petrovický K101 katedra matematiky, statistiky a informačních technologií vedoucí katedry E-mail: vbenes@bivs.cz Telefon: 251 114 534, 731 425 276 Konzultační hodiny: středa 14:00 16:00 Ak. rok 2012/2013 vbp 2. ze 44
Hodinová dotace Prezenční studium 1 semestr 2/2 KZ 6 kreditů Kombinované studium 1 semestr 12/4 KZ 6 kreditů Ak. rok 2012/2013 vbp 3. ze 44
Požadavky ke klasifikovanému zápočtu Prezenční studium Kombinované studium Kompletní vypracování dané úlohy (přihlášení v ISu) Analýza úlohy Algoritmizace Odladěný zdrojový kód programu v jazyce C++ Ak. rok 2012/2013 vbp 4. ze 44
Studijní literatura Literatura základní HEROUT, Pavel. Učebnice jazyka C. České Budějovice : Kopp, 1997. ISBN 80-85828-21-9. BENEŠ, Vladimír. Algoritmizace a programování. Elektronická studijní opora. Praha : BIVŠ, 2011. PRATA, Stephen. Mistrovství v C++. Brno : Computer Press, 2004. ISBN 80-251-0098-7. Literatura doporučená KADLEC, Václav. Učíme se programovat v jazyce C. Praha : Computer Press, 2002. ISBN 80-7226-715-9. MILKOVÁ, E. a kol. Algoritmy, základní konstrukce v příkladech a jejich vizualizace. Hradec Králové : Gaudeamus, 2010. KNUTH, Donald, E. Umění programování.1. díl, Základní algoritmy. Brno : Computer Press, 2008,. ISBN 978-80-251-2025-5. Ak. rok 2012/2013 vbp 5. ze 44
Obsah Algoritmizace Algoritmus Zápis algoritmu Některé základní algoritmy Programování Historie jazyka C/C++ Syntaxe základních příkazů jazyka C++ Programovací prostředí Ladění úlohy Ak. rok 2012/2013 vbp 6. ze 44
I Algoritmizace Ak. rok 2012/2013 vbp 7. ze 44
ALGORITMIZACE Ak. rok 2012/2013 vbp 8. ze 44
Algoritmus Algoritmus je základní matematický pojem. Nelze jej tedy definovat. Musíme se tedy uchýlit pouze k opisu. V případě PROGRAMOVÁNÍ jde o transformaci množiny vstupních dat na množinu výstupních dat. Ak. rok 2012/2013 vbp 9. ze 44
Algoritmus Opisná DEFINICE Je to postup, jak řešit danou úlohu pomocí počítače. Sestává z posloupnosti jednoduchých předem stanovených kroků (ekementárních operací, instrukcí) a vede od vstupních měnitelných údajů až k žádaným výstupním údajům (výsledku). Ak. rok 2012/2013 vbp 10. ze 44
Vlastnosti algoritmu Je ELEMENTÁRNÍ Skládá se z konečného počtu jednoduchých (snadno realizovatelných) činností, které označujeme jako kroky. Ak. rok 2012/2013 vbp 11. ze 44
Vlastnosti algoritmu Je DETERMINOVANÝ Po každém kroku lze určit, zda popisovaný proces skončil. Pokud neskončil, pak musí být dáno, kterým krokem má pokračovat. Ak. rok 2012/2013 vbp 12. ze 44
Vlastnosti algoritmu Je KONEČNÝ Počet opakování jednotlivých kroků je vždy konečný. Algoritmus tedy musí skončit po konečném počtu kroků. Poznámka: příklad s instrukcí 1 GOTO 1 Ak. rok 2012/2013 vbp 13. ze 44
Vlastnosti algoritmu Je REZULTATIVNÍ Vede ke správnému výsledku. Ak. rok 2012/2013 vbp 14. ze 44
Vlastnosti algoritmu Je HROMADNÝ Algoritmus můžeme použít k řešení celé (velké) skupiny (třídy) podobných úloh. Poznámka: např. řešení kvadratické rovnice, soustavy lineárních algebraických rovnic Ak. rok 2012/2013 vbp 15. ze 44
Poznámka 1. Pojem algoritmus se dá formalizovat např. pomocí matematické konstrukce označované jako Turingův stroj procesorová jednotka, tvořená konečným automatem, program ve tvaru pravidel přechodové funkce, pravostranně nekonečné páska pro zápis mezivýsledků. Churchova teze Ke každému algoritmu existuje ekvivalentní Thuringův stroj. Ak. rok 2012/2013 vbp 16. ze 44
Poznámka 2. Pojem algoritmus se dá formalizovat např. pomocí matematické konstrukce označované jako nebo pomocí teorie parciálně rekurzivních funkcí v teorii vyčíslitelnosti se takto označují funkce v jistém smyslu složitější než tzv. primitivně rekurzivní funkce Ak. rok 2012/2013 vbp 17. ze 44
Metoda SHORA DOLŮ a ZDOLA NAHORU 1. Daný problém musíme vyřešit. 2. Známe-li řešení, potřebujeme jej zapsat jako algoritmus 3. Postup řešení rozkládáme na jednodušší operace elementární kroky tj. metoda SHORA DOLŮ Poznámka: řešení kvadratické rovnice (analýza a řešení) Ak. rok 2012/2013 vbp 18. ze 44
Metoda SHORA DOLŮ a ZDOLA NAHORU Kromě metody SHORA DOLŮ se setkáváme i s metodou ZDOLA NAHORU: Postupně z elementárních kroků vytváříme prostředky, které umožní zvládnout daný problém Vytváříme nový procesor tím, že ho učíme nové operace Použijeme vyšší programovací jazyk (procedury, knihovna procedur nebo systém pro vytváření programů (CASE)) Ak. rok 2012/2013 vbp 19. ze 44
Základní složky (konstrukce) algoritmu Posloupnost (sekvence) tvořena jedním nebo několika kroky (provedou se právě jednou v daném pořadí) nemusí jít o kroky elementární dalším zjemňováním se mohou rozpadnout na součásti, které samy tvoří posloupnosti, cykly nebo podmínky Ak. rok 2012/2013 vbp 20. ze 44
Základní složky (konstrukce) algoritmu Cyklus (iterace) část algoritmu, která se opakuje dokud je splněna podmínka opakování cyklus se vždy skládá z podmínky opakování a z těla cyklu (tj. operací, které se opakují) vyhodnocení podmínky může být před provedením (v C while nebo for), resp. po skončení těla cyklu (v C do-while) nebo i uvnitř těla cyklu (podmíněný skok nebo kombinace podmínky a break) Ak. rok 2012/2013 vbp 21. ze 44
Základní složky (konstrukce) algoritmu Podmíněná operace (selekce) představuje vždy větvení algoritmu tvořena podmínkou a 1, 2 nebo více výběrovými složkami pokud je jedna ze složek vybrána, provede se jednou v C příkazy if a switch (v kombinaci s příkazem break) Ak. rok 2012/2013 vbp 22. ze 44
Základní složky (konstrukce) algoritmu Podprogram opakuje-li se určitá část algoritmu na několika místech (může používat různá data) na elementární kroky ji rozložíme pouze jednou (např. narazíme-li na ni poprvé) na ostatních místech se na ni odvoláme jako na dílčí algoritmus nebo podprogram (procedura, resp. funkce) Ak. rok 2012/2013 vbp 23. ze 44
Algoritmus a data struktura vstupních, výstupních, ale i vnitřních dat spoluurčuje strukturu programu posloupnosti datových položek různých druhů odpovídá posloupnost různých příkazů Poznámka: Přirozeným prostředkem pro zpracování rekurzivních datových struktur (stromy nebo seznamy) jsou obvykle rekurzivní algoritmy! Ak. rok 2012/2013 vbp 24. ze 44
Časová a paměťová náročnost algoritmů potřebné množství operační paměti doba pro provedení algoritmu rozsah vstupních údajů celkový počet elementárních operací (instrukcí) Poznámka: Ve skutečnosti zpravidla stačí orientovat se podle vybraných skupin instrukcí, které jsou časově nejnáročnější (if)! Ak. rok 2012/2013 vbp 25. ze 44
Popis algoritmů Jazyk pro popis programů Program Description Language (PDL) slovní popis algoritmu, dnes velmi častý lehce upravený programovací jazyk, např. Pascal (Pseudopascal) Poznámka: Tradičním jazykem pro popis algoritmů býval Algol 60. Slovní popis programu se může stát základem dobrého komentáře k výslednému programu. Ak. rok 2012/2013 vbp 26. ze 44
Popis algoritmů Strukturogramy grafické znázornění algoritmu tvarově i barevně odlišné znázornění (sekvence, iterace, selekce) Poznámka: Základem obdélník; v záhlaví označení algoritmu nebo dílčí operace; uvnitř kroky, které algoritmus tvoří Ak. rok 2012/2013 vbp 27. ze 44
Popis algoritmů Vývojové diagramy klasický prostředek (ČSN 36 4030, ÚNM, Praha 1974) graficky náročné (úpravy hotových VD) Poznámka: Spíše než logickou strukturu programu zdůrazňují druh operací. Ak. rok 2012/2013 vbp 28. ze 44
Vývojové diagramy mezní značka (začátek, resp. konec algoritmu) sekvence předem definovaná činnost (podprogram) selekce (rozhodování) Ak. rok 2012/2013 vbp 29. ze 44
Vývojové diagramy iterace (začátek, resp. konec iteračního cyklu) vstup, resp. výstup dat spojka komentář (poznámka) Ak. rok 2012/2013 vbp 30. ze 44
Vývojové diagramy obrazce (značky) propojeny čarami (svisle, vodorovně) implicitní směr shora dolů, zprava doleva, jinak šipky Ak. rok 2012/2013 vbp 31. ze 44
PŘÍKLAD Výpočet kořenů (reálných i komplexních) kvadratické rovnice ax 2 + bx + c = 0, kde a 0 Vstupní data: a, b, c Výstupní data: x 1, x 2 Ak. rok 2012/2013 vbp 32. ze 44
PŘÍKLAD Analýza úlohy Zápis algoritmu (VD) Zdrojový kód v jazyce C++ Odladění programu (testování) Ak. rok 2012/2013 vbp 33. ze 44
Datové struktury (Konstanta) Proměnná pojmenované místo v paměti počítače vytvoření na základě deklarace identifikátor (symbolická adresa) typ (datový typ) Ak. rok 2012/2013 vbp 34. ze 44
Datové struktury Proměnná - druhy proměnných Globální proměnné vytvoří se při spuštění programu existuje po celou dobu běhu programu Ak. rok 2012/2013 vbp 35. ze 44
Datové struktury Proměnná - druhy proměnných Lokální proměnné deklarované v procedurách, resp. funkcích vznikají voláním podprogramu zanikají při ukončení podprogramu při rekurzivním volání se vytvoří zvláštní instance lokálních proměnných pro každou aktivaci Ak. rok 2012/2013 vbp 36. ze 44
Datové struktury Proměnná - druhy proměnných Dynamické proměnné vznikají a zanikají za běhu programu dle potřeby na základě příkazů prostor pro ně čerpá program z volné paměti existence dynamických proměnných není vázána na začátek, resp. konec žádného podprogramu Ak. rok 2012/2013 vbp 37. ze 44
Datové struktury Pole posloupnost proměnných stejného typu (homogenní skupina) v deklaraci pole určujeme identifikátor pole jako celku typ pole (jeho složek (prvků)) počet složek (prvků) pole jednotlivé prvky určujeme pomocí indexů Ak. rok 2012/2013 vbp 38. ze 44
Datové struktury Pole jednorozměrná pole (vektory) 1 index dvourozměrná pole (matice) 2 indexy třírozměrná pole (kubické matice) 3 indexy více indexů Ak. rok 2012/2013 vbp 39. ze 44
Datové struktury Záznam (struktura) nehomogenní skupina proměnných (složek) chápaných jako celek složky záznamu jsou v paměti uloženy za sebou (zpravidla v pořadí jako v deklaraci) práce se složkou záznamu pomocí kvalifikace, tj. jméno záznamu a jméno složky společně (jméno složky je relativní adresou vzhledem k počátku proměnné typu záznam) Ak. rok 2012/2013 vbp 40. ze 44
Datové struktury Objekt v definici objektového typu specifikujeme atributy (datové složky) a metody (funkční a procedurální složky) proměnná objektového typu je instance Ak. rok 2012/2013 vbp 41. ze 44
Datové struktury Seznam (list) datová struktura posloupnost složek složky uspořádány podle klíče (hodnota dat nebo hodnota funkce vypočítaná na základě těchto dat) složky nemusí ležet v paměti za sebou (ukazuje na ně ukazatel (pointer), resp. spojka (link)) seznam má hlavu (head) a ohon (tail) seznam je dynamická struktura může být jednosměrný, resp. obousměrný Ak. rok 2012/2013 vbp 42. ze 44
Datové struktury Strom B-strom (b-tree) Zásobník (stack) LIFO (Last In, First Out) Fronta Tabulka Graf Množina Ak. rok 2012/2013 vbp 43. ze 44
Děkuji za pozornost Ak. rok 2012/2013 vbp 44. ze 44