Kurzy s programováním na FAI

Slides:



Advertisements
Podobné prezentace
Základy ukládání dat v počítači
Advertisements

Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Přednáška č. 3 Normalizace dat, Datová a funkční analýza
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.
ALGO – Algoritmizace 1. cvičení
ENVIRONMENTÁLNÍ INFORMATIKA A REPORTING
Základy informatiky přednášky Kódování.
Varianty Turingova stroje Výpočet funkcí pomocí TS
Algoritmizace 9. Ročník.
Algoritmizace a programování
Hana Kotinová Struktura a cíl práce Metody předzpracování dat Systémy předzpracování dat Historie vývoje DPT Jak program pracuje Budoucnost.
Seminář – Základy programování
Algoritmizace.
Informatika a práce s počítačem
25. ALGORITMIZACE A PROGRAMOVÁNÍ
Analýza informačního systému
Algoritmus po krocích rozepsaný návod k nějaké činnosti
Church-Turingova teze Univerzální Turingův stroj Diagonalizace
Algoritmizace a základy programování
Základy algoritmizace a programování
Úvod do algoritmizace Obsah: Algoritmus, algoritmizace
Sémantická analýza Jakub Yaghob
Příklady jazyků Příklad 1: G=({S}, {0,1}, P, S)
Gramatiky a jazyky Přednáška z předmětu Řízení v komplexních systémech
Systémy pro podporu managementu 2
Obchodní akademie, Náchod, Denisovo nábřeží 673
Informatika pro ekonomy II přednáška 10
Modelování a simulace MAS_02
Cvičení.
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,
Vztah bezkontextových jazyků a ZA
Dokumentace informačního systému
Regulární výrazy Regulární výrazy představují další možnost popisu regulárních jazyků (právě od nich dostaly své jméno). Definice: Množina všech regulárních.
ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ FAKULTA STROJNÍ ÚSTAV PŘÍSTROJOVÉ A ŘÍDICÍ TECHNIKY ODBOR AUTOMATICKÉHO ŘÍZENÍ A INŽENÝRSKÉ INFORMATIKY Aplikace objektově.
Systémy pro podporu managementu 2 Inteligentní systémy pro podporu rozhodování 1 (DSS a znalostní systémy)
Algoritmizace a programování Vývojové diagramy - 03
Konečné automaty Vít Fábera.
Formální modely výpočtu Tomáš Vaníček Katedra inženýrské informatiky Stavební fakulta ČVUT Thákurova 7, Praha 6 Dejvice, b407
Algoritmizace a programování Algoritmizace – základní pojmy - 01
Databázové modelování
doc. RNDr. Zdeněk Botek, CSc.
Gymnázium, Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Hodonín Úvod do programování.
Rozpoznávání v řetězcích
Karel Vlček, Modelování a simulace Karel Vlček,
Turingův stroj.
Úvod do teorie konečných automatů
Automaty a gramatiky.
Úvod do logiky (presentace 2) Naivní teorie množin, relace a funkce
Konečné automaty a vyhledávání
Analýza informačního systému. Podrobně zdokumentovaný cílový stav Paramentry spojené s provozem systému – Cena – Přínosy – Náklady a úspory – …
doc. RNDr. Zdeněk Botek, CSc.
Název školyStřední odborná škola a Gymnázium Staré Město Číslo projektuCZ.1.07/1.5.00/ AutorIng. Ivana Brhelová Název šablonyIII/2.
Ú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.
Tým 32, varianta b/4/I.  Jakub Kadlubiec  Roman Pijáček  Petr Pliska  Jan Štourač  Václav Tunka (vedoucí)
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ě
Financováno z ESF a státního rozpočtu ČR.
Algoritmizace – základní pojmy
Základní pojmy v automatizační technice
Soubor Soubor v informatice označuje pojmenovanou sadu dat uloženou na nějakém datovém médiu, se kterou lze pracovat nástroji operačního systému jako.
Informatika pro ekonomy přednáška 8
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.
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
Analýza informačního systému
Definiční obory. Množiny řešení. Intervaly.
Algoritmizace a datové struktury (14ASD)
Transkript prezentace:

Kurzy s programováním na FAI 1. ročník: Základy programování Algoritmizace úloh Programování v C 2. ročník: OOP (C++) 3. ročník: Mikropočítače (ANSI C a ASM) Technologie WWW Počítačová grafika 4. ročník: Systémové Programování Paralelní procesy a programování Programování RT Aplikací

Algoritmus Algoritmus je postup řešení určité úlohy. Ne každý postup je ale algoritmem! Algoritmus musí splňovat následující vlastnosti: je konečný = musí skončit po provedení konečného počtu kroků je elementární = je specifikován jako posloupnost elementárních, pro daný prováděcí stroj jednoznačně definovaných operací je rezultativní = vede ke správnému výsledku je determinovaný = po každém kroku lze zjistit, zda již algoritmus skončil, a pokud neskončil, jak má dále pokračovat Pojem algoritmu lze formalizovat (plně matematicky definovat) např. pomocí tzv. Turingova stroje nebo pomocí teorie parciálně rekurzivních funkcí v praxi se pro specifikaci algoritmů nebo jejich částí používají jednodušší konstrukce - např. vývojové nebo stavové diagramy, konečné automaty, tabulky zpráv, zápis v pseudojazyce, nebo přímo zápis v programovacím jazyce (implementace)

Stojíš u správných dveří? Algoritmus Příklad: zamykání dveří prováděcí stroj = člověk je to algoritmus ? jakou má vadu? Nápověda: Je algoritmus elementární? Kdy skončí? Vede ke správnému výsledku? správné dveře, špatná strana !? svazek klíčů… Nakreslete správnou verzi! (zadání viz cvičení) Hledej klíč Našel jsi? Jdi do dalšího pokoje Stojíš u správných dveří? Hodí se klíč do zámku? Zamkni N A Jdi k další dveřím

Metody návrhu algoritmů Metoda shora dolů Nejčastěji používaná metoda návrhu algoritmů Postup návrhu = navrhnout algoritmus s použitím neelementárních kroků, tyto jednotlivé kroky pak upřesňovat pomocí „podprogramů“ až na úroveň elementárních operací Metoda zdola nahoru Postup: nejdříve navrhneme „podprogramy“, z nich složíme výsledný algoritmus Nebezpečí – ztráta času návrhem pod-algoritmů, které se nakonec ukáží jako zbytečné Metody založené na umělé inteligenci Metody umělé inteligence se snaží přinutit stroj, aby myslel jako člověk Člověk většinou nejedná podle žádných předem daných algoritmů – pokud např. hledá klíč od domu, zvolí takový postup, který podle jeho zkušeností a schopností vede nejrychleji k cíli. Zná vstupní data (obraz klíče, rozložení místností v domě a pravděpodobnost výskytu klíče na obvyklých místech) a požadovaný výstup (nalezení místa, kde je klíč). Dovede si poradit s chybovými stavy (uklouznutí na schodech). Nebezpečí – ani inteligentní člověk většinou neřeší problém optimálně

Možnosti zápisu algoritmů Programovací jazyk Výhody: specifikace v programovacím jazyce je vždy úplná, jednoznačná a bezesporná. Funkci algoritmu je možno okamžitě ověřit spuštěním nebo laděním Nevýhody: Nesrozumitelnost. Pro porozumění algoritmu je nutná znalost daného programovacího jazyka! V případech, kde je potřeba konzultovat algoritmus se zákazníkem – objednavatelem – programu, je nelze programovací jazyk použít! Složitější algoritmy zapsané v programovacím jazyce jsou nepřehledné. I v době objektového programování stále platí – „jeden obrázek řekne víc než pět stran textu”! Většina programovacích jazyků nemá formální základ – nelze je použít pro formální verifikaci (matematický důkaz) zapsaného algoritmu

Možnosti zápisu algoritmů Přirozený jazyk Výhoda: srozumitelnost Nevýhody: přirozený jazyk nemá formální základ, přesný význam (semantika) jeho částí není nikde specifikována, je nejednoznačný (např. formulace „rozbij stan“ má 2 zcela opačné významy), složitější specifikace jsou nepřehledné Vývojové diagramy velmi populární v 60-tých letech Grafická podoba symbolů a jejich význam je popsán normou ISO 5807/ČSN 36 9011 Výhoda: přehlednost Nevýhody: nejsou nijak formalizovány uživatel může v diagramu použít libovolné, neformálně popsané kroky – situace je tedy podobná jako u přirozeného jazyka. Neumožňují graficky zachytit vnořené řídící struktury ani objekty Vývojové diagramy se dnes používají pouze pro specifikaci jednoduchých algoritmů a ve výuce

Možnosti zápisu algoritmů Strukurogramy – na rozdíl od vývojových diagramů umožňují zachytit strukturu algoritmu včetně vnoření řídících bloků. V podstatě jsou kompromisem mezi strukturovaným programovacím jazykem a přirozeným jazykem. Příklad: Strukturogram hledání klíče od domu Zamykání dveří Dokud nenajdeš klíč nebo neprojdeš celý dům Hledej klíč v pokoji X Našel jsi klíč? Ano Ne X:=X+1 zamkni Dokud nenajdeš klíč nebo neprojdeš celý pokoj Hledej předmět ve tvaru klíče na pozici Y Y:=Y+1 RETURN

Možnosti zápisu algoritmů Jacksonovy diagramy Michael Jackson navrhl tyto diagramy v rámci jeho metodologie strukturované analýzy a designu nazvané „Jackson System Development“ (JSD). Používá 2 typy diagramů: Entity Structure Diagrams – Entita je objekt, který v systému hraje nějakou roli. Například „člověk“. Action jsou akce, které může provádět (např. „hledání klíče“, „zamci dvere“ Network Diagrams – znázorňují jednotlivé procesy systému, datové proudy (D) a stavové vektory (SV)

Možnosti zápisu algoritmů Nassi-Shneidermanovy Diagramy – další zajímavý typ diagramů typu „flowchart“. Skládají se z následujících grafických prvků: Výsledný diagram pak vypadá třeba takto:

Možnosti zápisu algoritmů DataFlow Diagramy: Dále Jacobsonovy OOSE diagramy, Boochovy diagramy, ROOM diagramy, Rumbaughovy diagramy, Shlaer-mellorovy diagramy, UML…

Možnosti zápisu algoritmů Konečné automaty Konečný automat je jednoduchý, ale účinný nástroj, pomocí kterého můžete lépe a radostněji specifikovat určité třídy algoritmů (např pro zpracování textu). Konečný automat je abstrakce s formálně definovanou sémantikou, díky níž je např. možno použít pro ověření funkce vámi navrženého algoritmu některé metody automatické verifikace. „Co to tedy vlastně je“? Na obrázku níže máte příklad jednoduchého Mealyho konečného automatu s výstupem: 1 / ’L’ 1 / ’S’ suda licha 0 / ’L’ 0 / ’S’ Kolečka „suda“ a „licha“ jsou stavy automatu. Šipka zleva do stavu „suda“ znamená, že se jedná o počáteční stav. Ostatní šipky znázorňují přechodovou funkci neboli přechody z jednoho stavu do druhého, výrazy nad šipkami pak uřčují podmínku, ze které se přechod stane, a výstupní symbol, který přitom vygenerován na výstup. Např. šipka ze stavu 1/ ‘L’ znamená, že při příjmu symbolu „1“ ve stavu „suda“ přejde automat do stavu „licha“ a na výstup vygeneruje znak ‘L’

Možnosti zápisu algoritmů Konečné automaty Konečný automat je pětice KA = (Q, Σ, O, δ, ) kde Q je konečná, neprázdná, množina stavů Σ je konečná neprázdná množina vstupních prvků - symbolů (vstupní abeceda) O je konečná neprázdná množina výstupních symbolů (výstupní abeceda) δ (přechodová funkce) je zobrazení δ: Q  Σ  Q. Přechod je opět určen stavem ve kterém se automat nachází a symbolem, který je čten na vstupu  (výstupní funkce) je zobrazení Q  Σ  O (Mealy) nebo Q  O (Moore)

Možnosti zápisu algoritmů Konečné automaty Jednoduchý automat, který kontroluje paritu ve vstupním souboru binárních čísel – pokud je parita sudá, generuje na výstup znak ‘S’, pokud je lichá, znak ‘L’: 1 / ’L’ 1 / ’S’ suda licha 0 / ’L’ 0 / ’S’ Implementace v C: enum {suda, licha} stav; while((c=getchar())!=EOF) swich (stav) { case suda: if (c==’1’) {putchar(’L’); stav=licha;} else if (c==’0’) putchar(’S’); break; case licha: if (c==’1’) {putchar(’S’); stav=suda;} else if (c==’0’) putchar(’L’); }

Možnosti zápisu algoritmů Konečné automaty - Akceptor Automat typu akceptor – nemá výstupní abecedu O ani výstupní funkci . Definuje se jako pětice A = (Q, Σ, δ, q0, F), kde: Q je konečná, neprázdná, množina stavů Σ je konečná neprázdná množina vstupních symbolů (vstupní abeceda) δ (přechodová funkce) je zobrazení δ: Q  Σ  Q . Přechod je určen stavem ve kterém se automat nachází a symbolem, který přichází na vstup ( nebo který je čten na vstupu) q0 je počáteční (iniciální) stav (q0  Q) F je množina koncových stavů (F  Q)

Možnosti zápisu algoritmů Konečné automaty - Akceptor Automat typu akceptor je v podstatě pouze zjednodušeným obecným automatem – negeneruje na výstupu žádné textové řetězce, jeho výstupem je pouze konečný stav, ve kterém skončí analýza vstupního řetězce akceptor se používá např. ke kontrole správnosti syntaxe akceptor je v programátorské praxi často používaným typem automatu. Najdeme jej například v první úrovni každého překladače – tam se mu říká „lexikální analyzér“. Příklad: rozlišení identifikátoru a celočíselné konstanty v textovém souboru (identifikátor musí začínat písmenem nebo podtržítkem a pokračuje libovolným řetězcem písmen a číslic)

Možnosti zápisu algoritmů Konečné automaty – Akceptor - příklad Implementace v C: enum {start, isID, isINT, id, int, error, eof} stav; stav lexAnalyzer(FILE * soubor) { while ((c=fgetc(soubor))!=EOF) switch (stav) { case start: if (isalpha(c) || c=='_') stav=isID; else if (isdigit(c)) stav=isINT; break; case isID: if (isspace(c)) return id; else if (!(isspace(c) || isalphanum(c) || c=='_')) return error; case isINT: else (!isdigit(c)) return error; } if (c==EOF) return eof; pismeno, ‘_’ start isID? isINT? cislice ID! INT! Error whitespace [^cislice] pismeno | ‘_’ | cislice [^pismeno | ‘_’ | cislice | whitespace]

Turingův stroj ∆ a b c d .. Turingův stroj je pětice (Q,A,d,q,F), kde: - Q je konečná množina stavů (vnitřní abeceda) - A je (vnější) abeceda (konečná množina písmen) - q je počáteční stav (prvek množiny Q) - F je množina koncových stavů (podmnožina množiny Q) - d je přechodová posloupnost (Q-F) x (A+{free}) -> Q x (A+{free}) x {L,N,R} (free je speciální znak určujíci prázdné políčko na pásce).   Práce Turingova stroje Na pásce je v jednotlivých políčkách napsán řetězec znaků (ostatní políčka jsou prázdná, tj. obsahují znak free). K jednomu políčku pásky je přilozena čtecí/zapisovací hlava. Podle čteného písmene a vnitřního stavu se řídící jednotka "rozhodne", jaké písmeno na pásku napíše, do jakého dalšího vnitřního stavu přejde a zda se čtecí hlava posune o jedno políčko vlevo, vpravo nebo zůstane na místě (to je dáno "instrukcemi" přechodové posloupnosti). Práce Turingova stroje končí ve chvíli, kdy nelze použít žádnou další instrukci (tj., když je řidící jednotka v koncovém stavu). ∆ a b c d ..

Složitost algoritmu Pojem „složitost“ algoritmu zahrnuje nejen časovou, ale také paměťovou náročnost algoritmu. Tímto problémem se zabývá jeden celý obor informatiky „Vyčíslitelnost a složitost“. Protože doba provádění i paměťové požadavky stejného algoritmu, implementovaného na různých strojích/překladačích může být díky různým HW/SW optimalizacím velmi různá, používá se ke zjišťování složitosti obecných algoritmů modelů výpočetních systémů. Nejčastěji používanými modely jsou: RAM – Random Access Machine – počítač se definovanou sadou instrukcí, nekonečně velkou pamětí a vstupně/výstupní páskovou jednotkou Turingův stroj (výpočetní prostředek s největší výpočetní mocností) Protože přesný algebraický výpočet složitosti pomocí implementace algoritmu např. na stroji RAM je velmi složitý už i u jednoduchých problémů, používají se pro srovnávání algoritmů častěji tzv. aproximatické odhady složitosti.

Aproximatické odhady složitosti Nepočítáme přesný počet taktů na provedení všech instrukcí, zaměříme se pouze na nejnáročnější operace, kterým přidělíme čas provedení=1, ostatní operace nás nezajímají-jejich čas provedení=0. Pak se pokusíme spočítat nejlepší a nejhorší případ doby běhu algoritmu pro různá vstupní data Příklady: třídění InsertSort Počet přesunů: 2 5 4 3 2 1 Počet přesunů: 3 4 5 3 2 1 3 4 5 2 1 Počet přesunů: 4 2 3 4 5 1 Počet přesunů: 5 Celkem: