Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

M2160 – Úvod do programování II

Podobné prezentace


Prezentace na téma: "M2160 – Úvod do programování II"— Transkript prezentace:

1 M2160 – Úvod do programování II
RNDr. Jaroslav PELIKÁN, Ph.D. katedra počítačových systémů a komunikací Fakulta informatiky Masarykovy univerzity Botanická 68a, BRNO Kanc.: A209,  : +420 –

2 Cíl předmětu Seznámit studenty s pokročilými technika-mi používanými při návrhu algoritmů a ná-sledné tvorbě programů Na konci tohoto kurzu student bude: znát možnosti využití rekurze umět pracovat s řetězci umět pracovat s daty uloženými v souborech ovládat práci s dynamickými datovými strukturami znát základní principy objektově orientovaného programování 21/11/2017

3 Organizace předmětu Předmět M2160 má hodinovou dotaci 2/2, tj. 2 hodiny přednáška a 2 hodiny cvičení Rozvrh hodin: 1 přednáška: středa 16:00 – 17:50 (C511) 1 cvičební skupina: středa 14:00 – 15:50 (A215) Předmět je ukončen kolokviem 21/11/2017

4 Požadavky ke kolokviu Zápočet:
„úspěšné“ napsání průběžných písemek splnění všech domácích úkolů (v termínu) maximálně dvě neomluvené neúčasti na cvičení Zápočet musí být zapsán na ISu nejpozději 12 hodin před začátkem kolokvia Kolokvium probíhá ve dvou částech: vypracování programu (na počítači): 90 minut diskuse nad řešeným problémem + další otázky 21/11/2017

5 Osnova (1) Rekurze Řetězce Datový typ struktura
Pojmenované datové typy Datový typ union Práce se soubory: textové soubory binární soubory Dynamické proměnné 21/11/2017

6 Osnova (2) Dynamické datové struktury:
zásobník fronta binární vyhledávací strom Předávání parametrů z příkazové řádky OS Složitost algoritmů Úvod do objektově orientovaného programo-vání – jazyk C# Tvorba aplikací s grafickým uživatelským rozhraním (GUI) 21/11/2017

7 Literatura (1) Pelikán, Jaroslav: Prezentace k přednáškám z předmětu M2160 Úvod do programování II – Herout, Pavel: Učebnice jazyka C, KOPP, České Budějovice 1994 Kernighan, Brian W. – Ritchie, Dennis M.: Programovací jazyk C, Computer Press, Brno 2006 Harbison, Samuel P. – Steele, Guy L. Jr.: Referenční příručka jazyka C, SCIENCE 1996 21/11/2017

8 Literatura (2) Sharp, John: Microsoft Visual C# 2010, Com-puter Press 2010, ISBN: Petzold, Charles: Programování Microsoft Windows Forms v jazyce C#, Computer Press 2006, ISBN: Nathan, Adam – Lehenbauer, Daniel: Windows Presentation Foundation Unleashed, Sams Publishing 2007, ISBN: 21/11/2017

9 Rekurze (1) Schopnost objektů definovat se pomocí sebe sama
Jazyk C umožňuje definovat tzv. rekurzivní funkce Říkáme, že funkce je rekurzivní (je defino-vána rekurzivně), jestliže se použití její de-finice vyskytuje uvnitř definice samotné 21/11/2017

10 Rekurze (2) Základní typy rekurze: přímá: nepřímá: lineární: stromová:
funkce volá sama sebe nepřímá: funkce volá jinou funkci, která potom volá opět funkci výchozí lineární: funkce se v jednom průchodu vyvolá jen jednou stromová: funkce se v jednom průchodu vyvolá vícekrát 21/11/2017

11 Rekurze (3) Výpočet faktoriálu čísla n:
lze využít vztahu: 0! = 1 n! = n.(n–1).(n–2) = n.(n – 1)! pro n > 0 jedná se o nepříliš vhodné použití rekurze zápis algoritmu pomocí rekurze nebude jedno-dušší než zápis bez ní výsledný program bude pomalejší (způsobeno režií při vyvolávání funkce) 21/11/2017

12 Rekurze (4) Výpočet NSD čísel m, n: NSD (m,0) = m
NSD (m,n) = NSD (n, m mod n) pro n > 0 tento postup redukuje problém nalezení NSD (m, n) na problém nalezení NSD (n, m mod n), kde 0 Ł m mod n < n tento proces musí po konečném počtu kroků vést k NSD (a, b), kde b = 0 vykazuje stejný problém (je pomalejší) jako rekurzivní výpočet faktoriálu 21/11/2017

13 Rekurze (5) Při použití rekurze je nutné vždy dávat po-zor, aby počet rekurzivních vyvolání funkce (tzv. hloubka rekurze) nebyl příliš vysoký, nebo dokonce nekonečný Je tedy nutné, aby v definici rekurzivní fun-kce byla vždy správně uvedena tzv. ukončo-vací podmínka 21/11/2017

14 Rekurze (6) Fibonacciho posloupnost: fib1 = fib2 = 1
fibn+2 = fibn+1+ fibn pro n > 0 použití rekurze je naprosto nevhodné protože pro n >1 počet volání roste exponenciálně 21/11/2017

15 Rekurze (7) Pravidlo: Platí:
je-li možné jednoduše použít iterace (zápisu pomocí cyklu), pak se rekurzi vyhneme rekurzi použijeme v případě, že daný problém je definován rekurzivně Platí: každý iterativní algoritmus lze napsat rekurziv-ně a naopak 21/11/2017

16 Rekurze (8) Problém Hanoiská věž:
Odkud Kam Pom Tento problém lze vhodně řešit pomocí rekurze (stromové) 21/11/2017

17 Rekurze (9) Při použití nepřímé rekurze je nutné, aby jedna z funkcí byla volána dříve než je uvedena její definice V takovém případě musíme ještě dříve než použijme vyvolání dosud nedefinované funkce provést zápis jejího prototypu 21/11/2017

18 Rekurze (10) void funkceG(double a, int b); void funkceF(int x) {
} void funkceG(double a, int b) funkceF(8); 21/11/2017

19 Hilbertovy křivky (1) Hi – Hilbertova křivka i-tého řádu
H1 H H3 Hi – Hilbertova křivka i-tého řádu Hi+1 dostaneme kompozicí čtyř křivek Hi po-loviční velikosti, jejich pootočením a spoje-ním třemi úsečkami 21/11/2017

20 Hilbertovy křivky (2) Označme čtyři části křivky Hi (Hilbertovy křivky nižšího řádu Hi-1) symboly A, B, C, D a spojující přímky šipkou odpovídajícího směru Dostáváme rekurzivní schéma: A: D ¬ A ­ A ® B B: C Ż B ® B ­ A C: B ® C Ż C ¬ D D: A ­ D ¬ D Ż C 21/11/2017


Stáhnout ppt "M2160 – Úvod do programování II"

Podobné prezentace


Reklamy Google