Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
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
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.