Základy algoritmizace a programování Manažerské informační systémy
Algoritmus Popis pracovního postupu, kterým lze řešit určitou skupinu úloh Může být popsán mnoha různými způsoby např. slovním popisem, pomocí matematických vztahů
Proč se učíme algoritmizaci? Znalosti nepoužijeme přímo, ale Učíme se obecně řešit problémy Učíme se logicky myslet Učíme se chápat věci, na které nejsme zvyklí
Cíl cvičení Dovednost řešení problémů s využitím počítače se zaměřením na oblasti hromadného zpracování dat a ekonomických výpočtů
Algoritmus je přesný návod či postup, kterým lze vyřešit daný typ úlohy kuchyňský recept popis cesty vyřízení žádosti sčítání a násobení pod sebou řešení soustavy rovnic
Řízek Naklepej a osol plátek masa Jsi-li vegetarián, použij místo masa zeleninu Obal jej v mouce Vykoupej jej ve vajíčku Obal jej ve strouhance Rozpal olej a vlož do něj obalené maso Smaž dokud není dozlatova usmažený
Vlastnosti algoritmu Obecný (hromadný, univerzální) Konečný Deterministický Opakovatelný Srozumitelný
Algoritmus postup řešení úlohy Popisuje, jak transformovat vstupní údaje na výstupní za přesně stanovených podmínek Příklady vstupem je maso, sůl, mouka, vejce, strouhanka, olej, výstupem je smažený řízek vstupem jsou dvě čísla, výstupem jejich součet vstupem je skupina lidí, výstupem je řada stejných lidí seřazených podle výšky / platu / délky vlasů / vstupem je soustava rovnic, výstupem je řešení
Základní struktury Sekvence (posloupnost) Větvení Cyklus (opakování)
Způsoby zápisu algoritmu Přirozeným jazykem Strukturovaným jazykem Graficky vývojovým diagramem Programovacím jazykem
Příklad algoritmu řidiče Prasklá pneumatika 1. Zastavit 2. Vystoupit 3. Vyměnit kolo 4. Nastoupit 5. Rozjet se
Prasklá pneumatika, pokr. Podrobnější 1. Zastavit 2. Vystoupit a. Otevřít dveře b. Vylézt c. Zavřít dveře 3. Vyměnit kolo a. Vyndat rezervu b. Vyndat hever c. Zvednout auto na hever d. Odšroubovat kolo e. Sundat kolo f. Přišroubovat rezervu g. Spustit auto z heveru h. Uklidit hever i. Uklidit kolo 4. Nastoupit 5. Rozjet se
Prasklá pneumatika, pokr. Ještě podrobnější 1. Zastavit 2. Vystoupit a. Otevřít dveře i. Chytit páčku dveří ii. Zatáhnout za páčku iii. Zatlačit iv. Pustit páčku dveří b. Vylézt c. Zavřít dveře 3. Vyměnit kolo a. Vyndat rezervu b. Vyndat hever c. Zvednout auto na hever d. Odšroubovat kolo e. Sundat kolo f. Přišroubovat rezervu g. Spustit auto z heveru h. Uklidit hever i. Uklidit kolo 4. Nastoupit 5. Rozjet se
Prasklá pneumatika, pokr. Ještě, ještě podrobnější 1. Zastavit 2. Vystoupit a. Otevřít dveře i. Chytit páčku dveří α. Najít páčku dveří β. Roztáhnout prsty levé ruky χ. Změnit polohu levé ruky, aby se dotýkala páčky δ. Sevřít prsty levé ruky ii. Zatáhnout za páčku iii. Zatlačit iv. Pustit páčku dveří b. Vylézt c. Zavřít dveře 3. Vyměnit kolo a. Vyndat rezervu b. Vyndat hever c. Zvednout auto na hever d. Odšroubovat kolo e. Sundat kolo f. Přišroubovat rezervu g. Spustit auto z heveru h. Uklidit hever i. Uklidit kolo 4. Nastoupit 5. Rozjet se
Program Pokud chceme, aby algoritmus vykonával nějaký konkrétní stroj, musíme ho přetvořit v program Program je složen pouze z příkazů, kterým daný stroj rozumí Seznam příkazů, kterým rozumí nějaký stroj a pravidla pro jejich používání jsou programovací jazyk Na chytrosti stroje závisí míra abstrakce programovacího jazyka, jehož příkazy je stroj schopen vykonávat Implementovat složitý programovací jazyk v hardwaru je složité hardware rozumí spíše jednoduchým jazykům = strojovému kódu Psát program ve strojovém kódu je těžké pro člověka programuje se ve vyšším jazyce (Visual Basic), který se pak překládá (transformuje, rozepisuje) do strojového kódu Algoritmus/program by měl být: Správný reagovat správně na všechny možné vstupní stavy dané úlohy Efektivní dosáhnout správného výsledku v rozumném čase
Prasklá pneumatika, pokr. Funguje algoritmus vždy? 1. Zastavit 2. Vystoupit a. Otevřít dveře b. Vylézt c. Zavřít dveře 3. Vyměnit kolo 4. Nastoupit 5. Rozjet se a. Vyndat rezervu b. Vyndat hever c. Zvednout auto na hever d. Odšroubovat kolo e. Sundat kolo f. Přišroubovat rezervu g. Spustit auto z heveru h. Uklidit hever i. Uklidit kolo
Prasklá pneumatika, pokr. Co bezpečnostní pásy? 1. Zastavit 2. Vystoupit a. Otevřít dveře b. Rozepnout bezpečnostní pás c. Vylézt d. Zavřít dveře 3. Vyměnit kolo a. Vyndat rezervu b. Vyndat hever c. Zvednout auto na hever d. Odšroubovat kolo e. Sundat kolo f. Přišroubovat rezervu g. Spustit auto z heveru h. Uklidit hever i. Uklidit kolo 4. Nastoupit 5. Rozjet se
Prasklá pneumatika, pokr. Co když jsme na kopci? 1. Zastavit 2. Zatáhnout ruční brzdu 3. Vystoupit a. Otevřít dveře b. Rozepnout bezpečnostní pás c. Vylézt d. Zavřít dveře 4. Vyměnit kolo a. Vyndat rezervu b. Vyndat hever c. Zvednout auto na hever d. Odšroubovat kolo e. Sundat kolo f. Přišroubovat rezervu g. Spustit auto z heveru h. Uklidit hever i. Uklidit kolo 5. Nastoupit 6. Rozjet se
Prasklá pneumatika, pokr. Objekty Bude algoritmus fungovat v případě, když zastavíme před domem, který má otevřené vstupní dveře? 3. Vystoupit a. Otevřít dveře b. Rozepnout bezpečnostní pás c. Vylézt d. Zavřít dveře V daném kontextu není jasný vlastník objektu, musíme specifikovat komu dveře patří : 3. Vystoupit a. Otevřít dveře auta b. Rozepnout bezpečnostní pás c. Vylézt d. Zavřít dveře auta
Prasklá pneumatika, pokr. Objekty Co když zastavím vedle cizího auta s otevřenými dveřmi? 3. Vystoupit a. Otevřít dveře mého auta b. Rozepnout bezpečnostní pás c. Vylézt d. Zavřít dveře mého auta auto je typ, resp. třída objektu mé auto, stejně jako Petrovo auto jsou konkrétní instance, resp. objekty typu, resp. třídy auto
Objektové programování Např. objekt typu dům Objekt může obsahovat další objekty: Např. objekt dveře a objekty okno Objekt má vlastnosti Např. barva fasády, výška Vlastnosti objektu nemusí být viditelné Např. rok postavení, jméno ulice kde stojí Vlastnost objektu může nabývat pouze některých hodnot určeno typem vlastnosti barva fasády: OK zelená, CHYBA 3,14 výška domu: OK 20 metrů, CHYBA žlutá Čili: barva fasády je typu barva, výška domu je typu číslo v metrech Na objektu může jít provádět operace : Např. přemalovat změna vlastnosti barva fasády Např. přistavět patro změna vlastnosti výška domu, ale také změna vnitřní strukturu objektu Např. zbourat Objekt může reagovat na události
Algoritmus spolujezdce dívej se z okna podívej se, jestli nepraskla pneumatika; pokud ano, upozorni řidiče a po zastavení vyměň kolo kousej si nehty na rukou podívej se zda nezlobí děti; pokud ano, tak je zpacifikuj pokud je uvnitř auta teplo, otevři okénko; až začne být v autě zima, zavři okénko dívej se z okna podívej se, jestli nepraskla pneumatika; pokud ano, upozorni řidiče a po zastavení vyměň kolo
Algoritmus spolujezdce Reakce na události Události: praskla pneumatika upozorni řidiče a po zastavení vyměň kolo děti zlobí uklidni je v autě je teplo otevři okénko v autě je zima zavři okénko Událostmi řízené programování Zjednodušuje psaní programů s objekty
Základy algoritmizace a programování Algoritmus je posloupnost operací, která řeší daný úkol v konečném počtu kroků. je to přesný postup, který je potřeba k vykonání určité činnosti 3
Způsoby zápisu algoritmu Přirozeným jazykem Strukturovaným jazykem Graficky vývojovým diagramem Programovacím jazykem
Programovací jazyky první generace strojový kód druhá generace jazyk symbolických adres třetí generace jazyky vyšší úrovně čtvrtá generace podobné přirozené řeči
Strojový kód 11110010 01110011 1101 001000010000 11110010 01110011 1101 001000011000 11111100 01010010 1101 001000010010 11110000 01000101 1101 001000010011 11110011 01000011 0111 000010010000
Jazyk symbolických adres TestProc proc mov ecx, 10 xor eax, eax ; LoopStart: inc eax dec ecx jnz LoopStart ; eax now equals 10 ret TestProc endp
Jazyk vyšší úrovně program ObvodKruznice; const PI = 3.1415926; var r, o : real; begin write( Zadej polomer kruznice: '); readln(r); if r <= 0 then writeln( CHYBA!!! ) else begin o := 2 * PI * r; writeln( Obvod kruznice o polomeru, r:2:2, je, o:2:2,. ); end; readln; end.
Podobné přirozené řeči VYBER jmeno, prijmeni, telefon ZE zakaznici KDE vek > 30 A mesto = Brno A prijem MEZI 10000 A 20000
Program Program je zápis algoritmu pomocí příkazů programovacího jazyka
Chyby v programech Syntaktické - špatně zapsaný nějaký příkaz. Překlad programu se zastaví a zobrazí hlášení o chybě Logické - program je funkční, ale nedělá co Logické - program je funkční, ale nedělá co má. Může skončit v nekonečném cyklu. Pro ladění se vždy používá několik kontrolních příkladů.
Rozdělení programovacích jazyků Obecné - (C, C++, C#, Objekt Pascal, Visual Basic,.NET Framework, Java) Databázové (MS Fox Pro, Oracle) Pro webové klienty (Java, JavaScript, ActiveX) Specializované (makrojazyky, simulační jazyky)
Překladač a interpret Překladač neboli kompilátor je program, který ze zdrojového kódu vytvoří spustitelný soubor. Vytvoří instrukce pro procesor. Iterpret načítá program v textovém zápisu a okamžitě Iterpret načítá program v textovém zápisu a okamžitě jednotlivé příkazy vykonává. Program tedy není předem přeložený. Používá se například u skriptů ve webových stránkách
Vývojové prostředí Je to komplexní nástroj na tvorbu programů. Obsahuje: překladač pro určený programovací jazyk nástroje na vizuální tvorbu programu hotové komponenty programů nástroje pro ladění a odstraňování chyb
Důležité pojmy Proměnná - je to místo v paměti počítače, ve kterém se nachází určitá hodnota Identifikátor - je název proměnné Datový typ - je to určitý typ proměnné Datový typ - je to určitý typ proměnné char - znak integer - celé číslo real - reálné číslo boolean - logická proměnná
Důležité pojmy Deklarace stanovení proměnných jakého jsou typu. Provádí se vždy na začátku programu. Operátory a standardní funkce Matematické Logické Syntaxe přesné určení, jak se mají jednotlivé příkazy a části programu zapisovat
Strukturované programování Je to soubor doporučení, jak by měl dobře napsaný program vypadat. Tato doporučení vytvářejí jakési mantinely pro programátory. Strukturované programování používá: Proměnné Procedury Funkce
Objektové programování Je to soubor doporučení, jak by měl dobře napsaný program vypadat. Objektové programování používá: Proměnné Procedury Funkce Objekty Objekt obsahuje vlastní data a nástroje (metody). Objekty mezi sebou komunikují tím, že si zasílají zprávy. Při objektovém přístupu k tvorbě programu nezkoumáme způsob funkce programu, ale způsob změn dat. Objektový program je řízem tokem událostí.
Vizuální programování Vizuální programování je dnes většinou objektové a současně strukturované. Spočívá v tom, že velké množství standardně používaných objektů (tlačítka, políčka, práci se soubory) je již připraveno a jen je myší přetahujeme do vytvářeného programu.
Makra Makro je posloupnost příkazů, které potřebujeme při úpravě dokumentu postupně vykonat. Makra zaznamenáváme tzv. makrokamerou, Makra zaznamenáváme tzv. makrokamerou, která je součástí většiny programů.
Algoritmus je posloupnost operací, která řeší daný úkol v konečném počtu kroků. je to přesný postup, který je potřeba k vykonání určité činnosti
Algoritmus po krocích rozepsaný návod k nějaké činnosti 800-825 arabský matematik Muhamad ibn Musá al Chwárizmí, lat. překlad jeho knihy o početních postupech Agoritmi dicit Tak praví Al Chwárizmí. 30. léta 20. století znovuzavedl Alan Turing + navrhnul formální popis algoritmu (tkzv. Turingův stroj) algoritmus = matematický pojem, definice pouze opisem (podobně jako bod, množina)
Algoritmus ALGORITMUS MNOŽINA VSTUPNÍCH DAT transformace množiny vstupních dat na množinu výstupních dat MNOŽINA VÝSTUPNÍCH DAT
Algoritmus dávkové X dialogové zpracování X událostmi řízené zpracování (stav. automat) počáteční údaje (čas 0) ALGORITMUS dílčí výstupy Průběžné vtupní údaje (čas ti>0) transformace množiny vstupních dat na množinu výstupních dat dílčí výstupy
Algoritmus Vlastnosti algoritmu: musí mít začátek a konec (Rezultativnost - konečnost) - algoritmus musí proběhnout v konečném počtu kroků musí být věcně správný musí být jednoznačný (determinovanost - podmíněnost) - všechny operace i jejich návaznosti musí být jednoznačně určeny (definovány) a nic nesmí být náhodné musí být obecný (hromadnost) - algoritmus musí řešit úlohu pro různé vstupní hodnoty musí být opakovatelný (opakovatelnost) - při stejných vstupních hodnotách musíme dostat vždy stejný výsledek musí být srozumitelný
Možnosti zápisu algoritmů Slovní vyjádření Matematické vyjádření Vývojové diagramy Rozhodovací tabulky Počítačové programy Objektová analýza
Slovní vyjádření Používá se pro skupinu lidí, která nemá programátorské vzdělání návody k obsluze, recepty, postup práce Výhody: lze se domluvit i s laikem Nevýhody: málo přehledné nemá nástroje k dodržení vlastností algoritmu
Matematický zápis Používá se tam, kde je možné daný problém popsat matematickým vyjádřením Výhody: je jednoznačný Nevýhody: může být málo podrobný Při neošetření vstupních podmínek nemusí být věcně správný
Vývojové diagramy Je to symbolický, algoritmický jazyk, který se používá pro názorné zobrazení algoritmu. Výhody: jednoznačný komunikační prostředek při týmové práci přehledný má nástroje k dodržení vlastností algoritmu k dokumentačním účelům je přehlednější než výpis programu Nevýhody: laik mu nemusí rozumět
Rozhodovací tabulky Používá se v případě, kdy se v dané úloze vyskytuje několik možností a vlastní řešení je pro každou možnost jednoznačně popsatelné (rozvrh, tabulka logického součinu..) Výhody: jednoznačný a přehledný zápis je vhodný při vštším počtu možností řešení většina uživatelů tabulkám rozumí Nevýhody: nehodí se pro každý typ úloh tabulka může ztratit přehlednost
Počítačový program Používá se pro zápis instrukcí z vytvořeného algoritmu, kterému počítač rozumí a umí z něho vytvořit strojový kód Výhody: forma zápisu, které rozumí člověk i počítač (pokud je vybaven příslušným překladačem) nedá se ničím nahradit ani obejít Nevýhody: zápisu rozumí pouze programátor, který umí daný programovací jazyk výpis může být málo názorný a nepřehledný
Objektová analýza Tato metoda se používá v objektově orientovaném programování Výhody: forma zápisu, které rozumí člověk i počítač (pokud je vybaven příslušným překladačem) nedá se ničím nahradit ani obejít Nevýhody: zápisu rozumí pouze programátor, který umí daný programovací jazyk výpis může být málo názorný a nepřehledný
Skoro algoritmus - příklad Úloha: Sestavit návod na čištění zubů ve formě algoritmu Cíl: Vyčištění zubů daného člověka Prostředky: zdravá osoba (ústa, zuby, pohyblivá ruka, ) zubní kartáček, zubní pasta, sklenička na vodu, umyvadlo
Člověk s nevyčištěnými zuby Algoritmus - příklad Příprava kelímku a čisticího kartáčku ALGORITMUS ČIŠTĚNÍ ZUBŮ Vlastní čištění zubů Uklizení kelímku a kartáčku Člověk s vyčištěnými zuby
Člověk s nevyčištěnými zuby Algoritmus - příklad ALGORITMUS ČIŠTĚNÍ ZUBŮ Příprava kelímku a čisticího kartáčku Vytáhni kartáček a kelímek ze skříňky. Do kelímku nalej pitnou vodu. Na kartáček nanes pastu. Vlastní čištění zubů Uklizení kelímku a kartáčku Krouži kartáčkem postupně po všech zubech, asi 2 minuty. Vypláchni si ústa. Smyj zbytky pasty z kartáčku. Opět krouži 2 min. čistým kartáčkem po zubech. Vypláchni si ústa. Umyj kartáček proudem vody. Vylij vodu z kelímku a vypláchni ho čistou vodou. Ukliď kelímek i kartáček do skříňky. Člověk s vyčištěnými zuby
Člověk s nevyčištěnými zuby Algoritmus - příklad Příprava kelímku a čisticího kartáčku Vlastní čištění zubů Uklizení kelímku a kartáčku ALGORITMUS ČIŠTĚNÍ ZUBŮ Vytáhni kartáček a kelímek ze skříňky. Do kelímku nalej pitnou vodu. Na kartáček nanes pastu. Otevři skříňku. Je tam kelímek? Ne konec Ano pokračuj Pusť kohoutkem vodu. Krouži kartáčkem postupně po všech zubech, asi 2 minuty. Teče? Vypláchni si ústa. Smyj zbytky pasty z kartáčku. Ne konec Opět krouži 2 min. čistým kartáčkem po zubech. Ano pokračuj Vypláchni si ústa. Natoč do ¾ kelímku vodu. Zavři kohoutkem vodu. Umyj kartáček proudem vody. Vylij vodu z kelímku a vypláchni ho čistou vodou. Zavři skříňku. Ukliď kelímek i kartáček do skříňky. Člověk s vyčištěnými zuby
Vlastnosti algoritmu Elementárnost. Skládá se z konečného počtu jednoduchých (elementárních) činností (kroků). Determinovanost. V každém kroku lze rozhodnout, jak se má pokračovat (a jestli nenastal konec). Konečnost. Algoritmus vždy skončí po konečném počtu kroků. Rezultativnost. Vede ke správnému výsledku (k nějakému ). Hromadnost. Použitelný pro celou třídu podobných problémů. Opakovatelnost. Pro stejné vstupy vždy stejný výstup. Souvisí s determinovaností a rezultativností.
Algoritmizace úlohy Způsoby zápisu algoritmů Slovní popis (přirozeným jazykem). Grafické znázornění (např. vývojový diagram). Programovací jazyk (např. C). Obsahuje klíčová slova, operátory, speciální znaky a identifikátory.
Algoritmizace úlohy Procesor: objekt (člověk či stroj), který vykonává algoritmem popisovanou činnost. Druh procesoru různé formulace kroků algoritmu Program: algoritmus zapsaný v nějakém programovacím jazyce.
Algoritmizace úlohy Etapy řešení problému 1. Specifikace (vymezení) problému 2. Analýza problému 3. Sestavení algoritmu 4. Kódování (zápis) algoritmu 5. Testování algoritmu (u programů ladění)
Vývojové diagramy Postup Běžný příkaz Rozhodování Podmíněný příkaz Čtení údajů - Zobrazení výstupu Tisk sestavy - Zpracování souboru
Konec a začátek algoritmu Podprogram Cyklus s určeným počtem opakování Uložení dat do souboru
Vývojové diagramy
Vývojové diagramy - Příklady
SEKVENCE
Větvení
Cyklus