Skripta Výpočetní systémy III Praha 2000

Slides:



Advertisements
Podobné prezentace
CIT Paměti Díl X.
Advertisements

J. Pokorný 1 DOTAZOVACÍ JAZYKY slajdy přednášce DBI006 J. Pokorný MFF UK
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
ŘÍDÍCÍ STRUKTURY - PODMÍNKY
Vlastní skript může být umístěn: v hlavičce stránky v těle stránky
Dynamické dokumenty na straně klienta Informatika pro ekonomy II.
HYPERTEXT PREPROCESSOR. PROGRAMOVÁNÍ. DEFINICE POJMŮ Problém Problém nevyřešený, nežádoucí stav obvykle vyžaduje nějaké řešení Neřešitelný problém Neřešitelný.
Algoritmy – struktura a zápis
Algoritmizace Vývojové diagramy.
Cvičení Úloha 1: Rozhodněte zda posloupnost znaků v poli délky n tvoří palindrom (slovo, které je stejné při čtení zprava i zleva). Př.: [a,l,e,l,a] [a,n,n,a]
Aplikace teorie grafů Základní pojmy teorie grafů
PA081 Programování numerických výpočtů
ALGO – Algoritmizace 1. cvičení
PROGRAM PRO VÝUKU T ČLÁNKU
Alg51 Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy –zadaný problém rozložíme na podproblémy –pro řešení podproblémů.
Teorie zpracování dat Ukázková písemka. Kapitola 4 Je dána tabulka Zam (login, jmeno, plat, funkce), implementovaná je v SŘBD používajícím indexové soubory.
Analýzy administrativních procesů. Analýzy ve 2 krocích Analýza dokumentů Analýza administrativních procesů.
Algoritmizace 9. Ročník.
Metody řazení s lineární časovou složitostí
Vývojové diagramy a základy algoritmizace
Základní číselné množiny
Algoritmizace a programování
Získávání informací Získání informací o reálném systému
Základy informatiky přednášky Efektivní kódy.
SÍŤOVÁ ANALÝZA.
Informatika I 3. přednáška
Jazyk vývojových diagramů
Řadicí algoritmy autor: Tadeáš Berkman.
Seminář – Základy programování
Algoritmizace.
25. ALGORITMIZACE A PROGRAMOVÁNÍ
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
Algoritmus po krocích rozepsaný návod k nějaké činnosti
Informatika I 2. přednáška
TI 7.1 NEJKRATŠÍ CESTY Nejkratší cesty - kap. 6. TI 7.2 Nejkratší cesty z jednoho uzlu Seznámíme se s následujícími pojmy: w-vzdálenost (vzdálenost na.
Algoritmizace a základy programování
ALGO – Algoritmizace 2. cvičení
Sémantická analýza Jakub Yaghob
Jazyk vývojových diagramů
Obchodní akademie, Náchod, Denisovo nábřeží 673
Algoritmizace a programování Třídící algoritmy - 12
Simulační modely a programové vybavení. Vývoj simulačních programů  Původně pouze strojový kód –Příliš dlouhé, náročné na programátora, obtížné hledání.
JavaScript Podmínky, cykly a pole.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
Tento výukový materiál vznikl v rámci Operačního programu Vzdělávání pro konkurenceschopnost 1. KŠPA Kladno, s. r. o., Holandská 2531, Kladno,
Od zadání úlohy k programu Výpočetní systémy I 8. přednáška.
Dokumentace informačního systému
MATICE ODPOVĚDNOSTI Matice odpovědnosti představuje jasné a konkrétní vymezení kompetencí osob z týmu za konkrétní projektové činnosti (úkoly), např. koordinaci.
Algoritmizace a programování Vývojové diagramy - 03
Konečné automaty Vít Fábera.
doc. RNDr. Zdeněk Botek, CSc.
Algoritmus a jeho vlastnosti
Gymnázium, Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Hodonín Úvod do programování.
Automaty a gramatiky.
Mlhavost Fuzzy logika, fuzzy množiny, fuzzy čísla
JUI přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc.
Příkazy cyklů. Co je to cyklus Jako cyklus označujeme opakované vykonávání určitého bloku příkazů Jako cyklus označujeme opakované vykonávání určitého.
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 1 / 15Doc. Josef Kolář (ČVUT)NP-úplné problémyGRA, LS 2012/13, Lekce 13 1 / 14 NP-ÚPLNÉ.
Úvod do programování Vyučující: Mgr. Vítězslav Jersák
Základy programování mikropočítačů První program v jazyce symbolických adres.
Algoritmizace a programování Algoritmy 1 - Úvod. Základní pojmy Počítačový program Počítačový program zápis zdrojového kódu, kterému rozumí počítač zápis.
KURZ ALGORITMIZACE A PROGRAMOVÁNÍ V JAZYCE C Lekce č. 2: Základní pojmy Bc. Radek Libovický.
NÁZEV ŠKOLY:SOŠ Net Office, spol. s r.o. Orlová Lutyně
Základní pojmy v automatizační technice
Překladače 5. Syntaktická analýza
Vytváření dokumentace algoritmů
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while.
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
Algoritmizace a datové struktury (14ASD)
Transkript prezentace:

Skripta Výpočetní systémy III Praha 2000 Algoritmy a programy Skripta Výpočetní systémy III Praha 2000

Jak automatizovat výpočet? ALGORITMUS 1. Stanovit (rozmyslet) přesně předem postup 2. Během opakovaného provádění postupu již nepřemýšlet a postupovat mechanicky. přesná definice vyžaduje sestavit matematický model počítače (výpočtu) – Konečný automat, zásobníkový automat, Turingův stroj, … Výpočetní systémy I - přednáška č.5

Nejobtížněji je ověřitelná resultativnost postupu „Naivní“ (nepřesná) definice (nepužitelná pro přesné matematické důkazy) Přesně popsaný POSTUP s vlastnostmi: Diskrétní = složený z jednotlivých jednoduchých kroků Deterministický (určitý) = po každém kroku je jasné, který krok následuje nebo zda se končí Resultativní (finitní, konečný) = po provedení konečného počtu kroků musí postup končit Hromadný = použitelný pro celou třídu úloh (různá vstupní data) Správný = výsledek splňuje dané podmínky Nejobtížněji je ověřitelná resultativnost postupu Výpočetní systémy I - přednáška č.5

algoritmus zapsaný formálně, srozumitelně pro počítač Program = algoritmus zapsaný formálně, srozumitelně pro počítač Jednotlivé elementární kroky mohou být: Instrukce operačního kódu počítače Příkazy nějakého programovacího jazyka Již hotové úseky kódu nebo podprogramy

? NE Lze každý problém řešit algoritmem? Existuji principiálně algoritmicky neřešitelné problémy U jiných problémů algoritmus neznáme Lze o daném postupu vždy rozhodnout, zda je algoritmem? V některých případech neumíme ověřit, zda je postup resultativní (konečný). Konečnost nelze ověřit algoritmicky

Pokud algoritmus známe, je již již „vyhráno“? NE Algoritmus může vyžadovat tak velké množství kroků, že i na velmi rychlém počítači je nereálné jej provést v přijatelném čase (časová složitost) Algoritmus může vyžadovat neúnosně mnoho paměťových míst (prostorová složitost) Algoritmus může pracovat se zaokrouhlovacími chybami tak „nešťastně“, že pohltí platné cifry (numerická nestabilita)

Jak ověřit algoritmus? Důkaz korektnosti: Parciální (částečná) korektnost: Pokud vstupy splňují nějakou podmínku, musí vstupy spolu s výstupy splňovat nějakou podmínku. Zachování této podmínky se sleduje krok po kroku během provádění algoritmu Resultativnost: Ověří se, že postup někdy skončí. Zpravidla tak, že neexistují nekonečné klesající posloupnosti přirozených čísel. Obecný návod k ověření neexistuje.

Testování na zkušebních datech Ověří vždy pouze nesprávnost algoritmu (pro vyvrácení správnosti stačí jediný protipříklad) Nikdy nelze testováním na zkušebních datech plně prověřit správnost. Vždy lze jen snížit pravděpodobnost chyb Testovací data je třeba volit vhodně (projít všechny cesty v programu aspoň jednou verzí vstupních dat, brát hodnoty blízké mezí přípustnosti, …)

Jak znázornit graficky algoritmus? Univerzální, avšak ne bezproblémový prostředek: VÝVOJOVÉ DIAGRAMY (někdy též bloková schémata, grafy řízení) Znázorňují časový postup provádění kroků algoritmu pomocí orientovaného grafu s jediným výchozím uzlem (začátek postupu) a jediným koncovým uzlem (konec postupu). Jednotlivé uzly (bloky)jsou spojeny šipkami (orientované hrany grafu)

Typy uzlů ve vývojových diagramech

Rozhodovacích bloků je vždy stejný počet jako slučovacích bloků Někdy se výkonné bloky nezakreslují. Příslušnou výkonnou akci representuje pouze hrana grafu Nejjednodušší grafy řízení mají 0 nebo 1 rozhodování

TYP UZLU graf počet indg outdg Počátek 1 Konec Výkonný n Rozhodovací Konec Výkonný n Rozhodovací (predikátový) m 2 Slučovací z k

Podmínka korektnosti grafu řízení Každý uzel musí ležet aspoň na jedné cestě od počátečního uzlu k uzlu koncovému (musí být dosažitelný) Vývojové diagramy lze sestavit i velmi komplikované a mimořádně obtížně srozumitelné. To je jejich hlavní nebezpečí a nevýhoda!!

Algoritmy je třeba navrhovat a realizovat co nejjednodušší Důvody: Méně chyb Snadná srozumitelnost pro ostatní a tím i snadné provádění změn (údržby z důvodu oprav chyb, změny prostředí, rozšiřování funkcí) Obvykle i rychlejší program a méně nároků na paměť

Principy strukturovaného programování Hierarchický rozklad složité úlohy na jednodušší (postup shora dolů – „top-down“) – v případě potřeby v několika – mnoha úrovních) Při rozkladu složitější úlohy na jednodušší je možné používat pouze následující konstrukce: sekvence = řazení akcí za sebou selekce (výběr) = rozhodnutí podle podmínky zda jedna nebo druhá akce (if P then A else B) iterace (opakování = cyklus) opakování dané činnosti, dokud je splněna nějaká podmínka (while P do A) nebo dokud daná podmínka nenastane (repeat A while Q) Jiné způsoby rozkladu složité úlohy na jednodušší přípustné nejsou

DEFINICE STRUKTUROVANÉHO ALGORITMU (rekurzivní) Každý jednoduchý krok je strukturovaný algoritmus Sekvence dvou strukturovaných algoritmů je strukturovaný algoritmus Selekce dvou strukturovaných algoritmů je strukturovaný algoritmus Iterace strukturovaného algoritmu je strukturovaný algoritmus Jiné algoritmy než ty, které mohou vzniknout užitím bodů 1., 2., 3. a 4. již strukturované nejsou (průnik všech tříd algoritmů splňujících 1.,2.,3.,4.)

? Lze každý problém, která umíme řešit nějakým algoritmem řešit i strukturovaným algoritmem? ANO Dokonce se nic podstatného neztratí. Lze dokázat, že toho lze vždy dosáhnout přidáním jediné pomocné proměnné. Strukturovaný algoritmus (program) je přehlednější, jednodušší a obvykle i efektivnější. Zkušený a odpovědný programátor navrhuje algoritmy a programy strukturovaně

Čeho se vyvarovat – příklad nestrukturované konstrukce

Nestrukturovaná konstrukce, kterou lze jako jedinou připustit – předčasný výskok z cyklu (tak zvané dobře navržené algoritmy - BJ programy)

Strukturogramy (struktogramy)

+nelze sestavit nestrukturovaný algoritmus, Výhody a nevýhody strukturogramů oproti vývojovým diagramům +nelze sestavit nestrukturovaný algoritmus, lze postupně zjemňovat návrh, lze pojmenovávat celky, lze se vždy soustředit na jednoduchou úvahu (jednu úroveň) lze algoritmus odvozovat ze strukturu dat - způsob zakreslování není normalizován, spojnice nezaznamenají časovou následnost, ale rozklad úlohy (to může být nenázorné a nezvyklé) Snaha zachovat výhody a minimalizovat nevýhody vede ke plošným strukturogramům

Sekvence v plošném strukturogramu Akce 1 Akce 2

Selekce v plošném strukturogramu podmínka ANO NE Akce 1 Akce 2

Iterace s akcí ve zpětné větvi (do while) v plošném strukturogramu Podmínka opakování Akce Akce

Iterace a akcí v dopředné větvi (repeat until) v plošném strukturogramu podmínka opakování Akce

Jak algoritmus navrhnout?   Příklad Úkol: Je dáno pole celých čísel dané délky N. Každé číslo je uloženo v jednom slově. Slova jsou adresovatelná. Adresa prvého prvku pole je A. Vypočtěte součet těchto čísel a uložte jej na adresu S (případně jej zobrazte).  Úvaha: Pole bude identifikováno indexem od 1 do N. P bude adresa předcházející prvému prvku P = A – 1, takže prvek P[i], kde i je pořadové číslo prvku v poli, získáme modifikací P obsahem indexregistru IND v kterém bude i.

Princip řešení – algoritmus odpovídá vždy datům Přípravná fáze: Vynulujeme střadač, v kterém se bude součet hromadit. Nastavíme indexregistr na hodnotu 1 Vlastní zpracování (tělo algoritmu): Poli v datech odpovídá cyklus (iterace) v programu, iterace začíná pro prvý prvek pole, končí zpracováním posledního. Po zpracování každého prvku je nutné zvýšit index o jedničku Závěr: Střadač je třeba uložit, případně zobrazit Možné modifikace algoritmu: Začínat indexem N, končit indexem 1. To umožňuje zkrátit kód, je-li k dispozici instrukce snížení indexregistru o 1, spojená se skokem Instrukce LOOP

Modifikace úlohy Není předem známa délka pole. Pole končí až koncovou značkou (reservovaný symbol EOF, nepřípustná hodnota dat). Data kromě toho mohou být na vnější paměti. Místo zvětšení indexu máme pak k dispozici příkaz čti číslo. Problém s úpravou algoritmu tkví v tom, že před přečtením záznamu nevíme, zda to bude platný záznam nebo koncová značka. Proto: Zásada čtení s předstihem (do zásoby): Prvý záznam přečti před začátkem zpracování souboru (v přípravné fázi). Další záznam vždy okamžitě poté, co zpracování předchozího záznamu skončilo a již jej nepotřebujeme.

Z hodnot v daném poli či proudu Výběr maxima (minima) Z hodnot v daném poli či proudu Algoritmus je podobný Možnost: Do pomocné adresy kandidát dáme během přípravné fáze prvý (či poslední) prvek v poli. Cyklus zkrátíme o jeden krok. V každém kroku porovnáváme právě vyšetřovaný prvek s kandidátem. Je-li větší, provedeme výměnu. Možnost: V přípravě dáme na adresu kandidát hodnotu, která „určitě nevyhraje“. Cyklus provádíme přes celé pole. Možné modifikace úlohy: Nejen vítěz, ale prvé dva, tři, … Je-li téže hodnoty dosaženo vícekrát, všechna její umístění

Jiná úloha – logická struktura zpracovávaných dat je složitější, strukturu zpracování z ní lze však snadno odvodit Zadání: Je dán text, připravený v textovém editoru. Na začátku jsou řídicí znaky. Vlastní text začíná písmenem. V textu jsou písmenka a oddělovače (mezery, znaky přechodu na nový řádek, novou stránku, tabelátory …). Vše končí zarážkou – koncovým znakem. Určete délku textu pro výpočet honoráře (AA). Pro ni se počítá jakkoliv dlouhá skupina oddě-lovačů, které následují bezprostředně za sebou, jako jediný znak. Vypočtěte dále celkový počet slov v textu a průměrný počet znaků ve slově.

Jaká je struktura dat této úlohy? 1. Úroveň: Řídicí znaky na začátku (ty budeme muset v pří-pravě přeskočit). Pak následuje vlastní text (záznam  sekvence). Na závěr výpočet průměru, zobrazení výsledků. 2. Úroveň: Opakuje se vždy skupina: slovo a poté mezery, které následují. Tak dlouho, dokud nepřijde koncový znak. (proud – pole či soubor v datech  iterace –cyklus). 3. Úroveň: Ve skupině je vždy slovo, následované skupinou mezer (záznam  sekvence v programu). 4. Úroveň: Obě skupiny jsou proudy. Slovo je opakování „písmen“, skupina mezer je opakováním oddělovačů. Z toho již snadno získáme strukturu algoritmu. Je shodná se strukturou dat. Na závěr průměry a zobrazení. Kde se budou zvětšovat počítadla započítávaných znaků? Kde zvětšovat počítadla slov? Jak ošetřit podmínky cyklů (nezapomenout na možnost EOF hned za slovem!)? Jak se změní úvaha, pokud budeme chtít počítat i věty (pro zjednodušení pomocí počtu teček v textu)?