Rekurze. Jan Hnilica Počítačové modelování 12

Rozměr: px
Začít zobrazení ze stránky:

Download "Rekurze. Jan Hnilica Počítačové modelování 12"

Transkript

1 Rekurze Jan Hnilica Počítačové modelování 12 1

2 Rekurzivní charakter úlohy Výpočet faktoriálu faktoriál : n! = n (n - 1) (n - 2) (0! je definován jako 1) můžeme si všimnout, že výpočet n! obsahuje vnořené výpočty dalších faktoriálů: 6! = ! = ! =... pro n 1 můžeme napsat: n! = n (n - 1)! Rekurzivní úloha řešení úlohy obsahuje řešení dílčích podúloh stejného charakteru podobný rekurzivní chrakter bychom nalezli v řadě úloh - ciferný součet: CS(n) = n % 10 + CS(n / 10) // dokud n 0 - celočíselná mocnina Mocnina(n, exp) = n Mocnina(n, exp - 1) // dokud exp > 0 - průchod lineárním seznamem atd... Jan Hnilica Počítačové modelování 12 2

3 Rekurzivní funkce jazyk C (a řada dalších jazyků) umožňuje vytvářet tzv. rekurzivní funkce rekurzivní funkce = funkce, která ve svém těle volá sebe samu Rekurzivní funkce pro výpočet faktoriálu: vyjdeme z rekurzivní definice: n! = 1 // pro n == 0 = n (n - 1)! // pro n > 0 kterou ve funkci opíšeme : int Faktorial(int n) if (n < 2) return 1; return n * Faktorial(n - 1); Důležité: funkce má definovanou ukončovací podmínku, při jejímž splnění se další rekurzivní volání už neprovede při rekurzivním volání se mění parametry volané funkce, vždy dochází ke zjednodušení (zmenšení) úlohy Jan Hnilica Počítačové modelování 12 3

4 Co se děje při rekurzivním volání funkce totéž co u normálního volání funkcí, tzn. při volání funkce je na systémovém zásobníku vytvořen záznam, obsahující lokální proměnné volané funkce, návratovou adresu výsledku atd... volající funkce zastaví provádění kódu a čeká, až volaná funkce dokončí svou činnost poté co volaná funkce skončí, pokračuje volající funkce ve svém kódu při rekurzivním volání volající funkce zavolá svou rekurzivní odnož a čeká, až ta dokončí svoji práci volaná rekurzivní odnož postupuje úplně stejně, také volá další odnož a čeká, takto se postupuje dál, dokud čerstvě volaná funkce nenarazí na ukončovací podmínku najednou je rozpracováno více úloh, které všechny postupují podle téhož kódu při návratu nejdříve skončí funkce, volaná jako poslední, ta vrací řízení předposledně volané funkci... nejpozději skončí ta funkce, která byla volána jako první každá funkce má na zásobníku vlastní záznam (vlastní lokální proměnné atd.) jednotlivé funkce nemají přístup k lokálním proměnným jiných funkcí, můžou ale sdílet proměnné předávané odkazem (nebo globální proměnné) Jan Hnilica Počítačové modelování 12 4

5 F (4) čeká F (3) čeká F (2) čeká Co se děje při rekurzivním volání funkce Faktorial(4) čas = 4 Faktorial(3) = 3 Faktorial(2) = 2 Faktorial(1) 1 24 F(3) končí 6 F(2) končí 2 F(1) končí F(4) končí Poznámka: Nákres ilustruje fakt, že funkce, která byla volána jako první, dokončí svou práci jako poslední a naopak! (systém zásobníku) Jan Hnilica Počítačové modelování 12 5

6 Ilustrace rekurzivních volání void Pozpatku() char znak = getchar(); if (znak!= '\n') Pozpatku(); putchar(znak); 1. funkce načte znak na vstupu 2. načtený znak je - konec řádku => funkce končí - něco jiného => funkce volá sebe samu a až poté, co je vráceno řízení, vypíše načtený znak (později volané funkce mezitím načetly a vypsaly vstupní znaky až do konce řádku) výsledkem je otočení řetězce zadaného na vstupu: vstup: abcd výstup: bcda Jan Hnilica Počítačové modelování 12 6

7 Příklady jednoduchých rekurzivních funkcí Euklidův algoritmus pro výpočet největšího společného dělitele (NSD) jsou zadána dvě celá čísla A a B, úkolem je nalézt jejich NSD - největší číslo, které beze zbytku dělí jak A, tak B pro výpočet NSD se nabízí několik postupů 1. postupné zkoušení všech možných dělitelů 2. vypočítat prvočíselné rozklady A a B, NSD je jejich největší společná část např. 126 = = NSD (126, 78) = 6 3. Euklidův algoritmus: pokud A == B NSD(A, B) = A pokud A > B NSD(A, B) = NSD(A - B, B) pokud B > A NSD(A, B) = NSD(A, B - A) NSD(126, 78) = NSD(48, 78) = NSD(48, 30) = NSD(18, 30) = NSD(18, 12) = = NSD(6, 12) = NSD (6, 6) = 6 Jan Hnilica Počítačové modelování 12 7

8 Příklady jednoduchých rekurzivních funkcí Euklidův algoritmus pro výpočet největšího společného dělitele (NSD) rekurzivní předpis algoritmu: pokud A == B NSD(A, B) = A pokud A > B NSD(A, B) = NSD(A - B, B) pokud B > A NSD(A, B) = NSD(A, B - A) snadno přepíšeme na rekurzivní funkci: int NSD(int a, int b) if (a == b) return a; if (a > b) return NSD(a - b, b); else return NSD(a, b - a); Jan Hnilica Počítačové modelování 12 8

9 Příklady jednoduchých rekurzivních funkcí Průchod lineárním seznamem uvažujme jednoduchý LS sestavený z prvků: typedef struct prvek char znak; struct prvek * dalsi; Prvek; průchod seznamem (spojený např. s výpisem prvků) lze napsat takto: void VypisSeznam(Prvek * S) if (S!= NULL) printf("%c ", S->znak); VypisSeznam(S->dalsi); Jan Hnilica Počítačové modelování 12 9

10 Použití rekurze rekurze se obvykle nepoužívá k řešení úloh, které jdou snadno vyřešit cyklem všechny dosud uvedené funkce jdou snadno napsat i bez rekurze Euklidův NSD: int NSD(int a, int b) while (a!= b) if (a > b) a = a - b; else b = b - a; return a; Faktoriál: int Faktorial(int n) int f = 1; for (int i = n; i > 1; i--) f = f * i; return f; Jan Hnilica Počítačové modelování 12 10

11 Použití rekurze je nutné si uvědomit, že volání rekurzivních funkcí sebou nese určité náklady na čas a paměť (vytvoření proměnných na zásobníku, návratová adresa, skok do funkce, návrat z funkce...) lze-li úlohu jednoduše řešit bez použití rekurze, je takové řešení efektivnější v ne-rekurzivních algoritmech se většinou také snáze hledají chyby rekurze se obvykle používá v těchto případech: úlohy typu "vygeneruj všechny možnosti" prohledávání do hloubky (backtracking) algoritmy "rozděl a panuj" Jan Hnilica Počítačové modelování 12 11

12 Kombinatorické úlohy (generování všech možností) pro nácvik rekurze se dobře hodí úlohy na generování základních kombinatorických struktur, zároveň jde také o úlohy, kde je rekurze přirozeným a jednoduchým řešením problému, který by šel iterací řešit jen velmi těžko nejprve připomenutí základních pojmů: - máme n-prvkovou množinu, v našem případě čísla 1, 2,.., n - z této množiny budeme provádět k-prvkové výběry (k n), přičemž rozlišujeme: variace - ve výběru záleží na pořadí prvků, tzn. (1, 2, 3) je jiná variace než (1, 3, 2) kombinace - ve výběru na pořadí prvků nezáleží, tzn. (1, 2, 3) a (1, 3, 2) jsou tytéž kombinace u variací i kombinací dále rozlišujeme varianty a) s opakováním - prvky ve výběru se mohou opakovat (např. 1, 1, 2, 3) b) bez opakování - prvky se opakovat nemohou permutace - jsou variace bez opakování pro n = = k - jinak řečeno jde o záměny pořadí původní množiny prvků Jan Hnilica Počítačové modelování 12 12

13 Kombinatorické úlohy (generování všech možností) Příklad: n = 4, k = 2, provádíme tedy 2-prvkové výběry z množiny 1, 2, 3, 4 variace s opakováním (1,1) (1,2) (1,3) (1,4) (2,1) (2,2) (2,3) (2,4) (3,1) (3,2) (3,3) (3,4) (4,1) (4,2) (4,3) (4,4) variace bez opakování (1,2) (1,3) (1,4) (2,1) (2,3) (2,4) (3,1) (3,2) (3,4) (4,1) (4,2) (4,3) kombinace s opakováním (1,1) (1,2) (1,3) (1,4) (2,2) (2,3) (2,4) (3,3) (3,4) (4,4) kombinace bez opakování (1,2) (1,3) (1,4) (2,3) (2,4) (3, 4) Jan Hnilica Počítačové modelování 12 13

14 Kombinatorické úlohy (generování všech možností) Variace s opakováním úloha: vygenerovat všechny k-prvkové variace z množiny čísel 1, 2,..., n postup: na každou z k pozic postupně umístíme všechny hodnoty 1... n úloha řešitelná pomocí vnoření k cyklů, ale pouze za předpokladu, že k a n jsou předem pevně zadány: for (int c1 = 1; c1 <= n; c1++) for (int c2 = 1; c2 <= n; c2++) for (int c3 = 1; c3 <= n; c3++)... for (int ck = 1; ck <= n; ck++) printf("%i %i %i...%i", c1, c2, c3,..., ck); pokud jsou k a n vstupními parametry programu, nelze vnořené cykly použít (není předem známo, kolik jich do kódu napsat a do jaké meze mají probíhat) Jan Hnilica Počítačové modelování 12 14

15 Kombinatorické úlohy (generování všech možností) Variace s opakováním rekurzivní funkce řeší problém jednoduše parametry funkce: n, k... parametry variace variace...pole délky k, do kterého ukládáme výsledek index... pozice v poli variace, na kterou právě zapisujeme void VariaceSO(int n, int k, int variace[], int index) if (index == k) // hotová variace výpis a konec VypisPole(variace, k); else for (int i = 1; i <= n; i++) // postupně použijeme všechna čísla variace[index] = i; // umístíme číslo na danou pozici VariaceSO(n, k, variace, index + 1); // necháme vygenerovat zbytek rekurzivně volaná funkce stejným způsobem zpracuje další políčko variace analýza funkce je na další straně Jan Hnilica Počítačové modelování 12 15

16 Kombinatorické úlohy (generování všech možností) Variace s opakováním analýza funkce funkce obhospodařuje vždy jedno políčko vytvářené variace (s indexem index) o o o o v cyklu od 1 do n (tedy přes všechny přípustné hodnoty) do tohoto políčka zapíše aktuální hodnotu a zavolá rekurzivní funkci (svou vlastní kopii) kopie tak dostane ke zpracování pole, kde je políčko index už vyplněné a sama bude stejným způsobem vyplňovat další políčko (proto ji voláme s parametrem index + 1) a sama bude také volat své rekurzivní kopie rekurzivní volání končí ve chvíli, kdy volaná kopie dostane ke zpracování vyplněnou variaci (index == k), kterou jenom vypíše a vrátí řízení řízení se tak vrací k čekajícím funkcím, které pokračují ve svých cyklech a do příslušných polí vyplňují další čísla v pořadí funkci v programu voláme s parametrem index = 0 (začínáme s prázdnou variací) VariaceSO(n, k, variace, 0); Technická poznámka: pole variace je do funkcí předáváno odkazem (jako vždy v jazyce C, u polí si funkce nevyrábí lokální kopii, ale pracují přímo s předaným polem, změny v poli se tak projeví i mimo funkci) všechny rekurzivní exempláře tedy pracují nad tím samým polem v paměti. Jan Hnilica Počítačové modelování 12 16

17 Kombinatorické úlohy (generování všech možností) Variace s opakováním analýza funkce průběh volání pro n = 3, k = 2, tvoříme tedy 2-prvkové variace z množiny 1, 2, 3 v závorkách funkce je uveden pouze parametr index (červeně), zelené číslo v kroužku udává pořadí, v jakém byla funkce volána, zároveň je znázorněn stav pole variace 1 VO(0) VO(1) VO(2) VO(2) VO(2) výpis výpis výpis 2 6 VO(1) VO(2) výpis VO(1) VO(2) výpis VO(2) výpis VO(2) 8 VO(2) 9 výpis výpis VO(2) výpis Jan Hnilica Počítačové modelování 12 17

18 Kombinatorické úlohy (generování všech možností) Variace bez opakování řešíme obdobně jako variace s opakováním, ale před zapsáním čísla i na j-tou pozici je potřeba zjistit, jestli číslo i už není zapsáno na jedné z předchozích pozic [0]..[j - 1] to lze provést několika způsoby a) před zapsáním čísla prohledat doposud vygenerovanou část (od 0 do index - 1) b) jako parametr funkce přidat pomocné pole příznaků (0/1) signalizujících, jestli dané číslo ve variaci je či není, zápis čísla do variace pak může vypadat takto: // zápis čísel do variace for (int i = 1; i <= n; i++) if (!pouzite[i]) // pokud číslo ve variaci zatím není variace[index] = i; // zapíšeme ho pouzite[i] = 1; // oznacime ho jako použité VariaceBO(n, k, index + 1, pouzite, variace); // vygenerujeme zbytek pouzite[i] = 0; // číslo před návratem nahoru uvolníme pro další variace Jan Hnilica Počítačové modelování 12 18

19 Kombinatorické úlohy (generování všech možností) Kombinace s opakováním řešíme podobně jako variace, ale aby nedošlo k vygenerování stejných kombinací (lišících se pouze pořadím prvků), generujeme pouze neklesající (či nerostoucí) posloupnosti při zápisu čísla do kombinace tedy musíme zjistit minimální (či maximální) hodnotu, kterou na danou pozici můžeme zapsat (prohledat dosud zapsanou část kombinace, předávat minimum jako parametr funkce...) Kombinace bez opakování stejné jako kombinace s opakováním, ale generujeme pouze ostře rostoucí (či klesající) posloupnosti Jan Hnilica Počítačové modelování 12 19

20 Generování všech možností Palindromy palindrom = slovo, které se čte z obou stran stejně (např. madam) úloha: máme zadaný řetězec, cílem je vygenerovat všechny palindromy, které lze získat vyškrtáním některých znaků řetězce telepatie => epe telepatie => tat telepatie => telet... Řešení rekurzivní generování všech pod-řetězců, testování na palindromicitu, výpis palindromů pro řetězec délky n je 2 n možných pod-řetězců (každý ze znaků v pod-řetězci buďto je a nebo není) generování pod-řetězců: - použijeme pole příznaků, udávajících jestli je znak v aktuálním pod-řetězci obsažen - každý znak postupně použijeme (příznak = 1) nebo nepoužijeme (příznak = 0) a zavoláme tutéž funkci, která takto ošetří další znak v pořadí - vždy po nastavení celé n-tice příznaků pod-řetězec otestujeme Jan Hnilica Počítačové modelování 12 20

21 Kdy rekurzi nepoužívat Fibonacciho posloupnost je nekonečná posloupnost přirozených čísel F i (pro i = 0, 1, ), kde platí F i = i pro i = 0, 1 F i = F i 1 + F i 2 pro i > 1 prvními dvěma členy jsou 0 a 1, každý další člen pak získáme jako součet dvou předchozích: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, Úloha: napišme funkci, která spočítá n-tý člen Fibonacciho posloupnosti rekurzivní definice F i = F i 1 + F i 2 přímo svádí k napsání rekurzivní funkce, která by mohla vypadat takto: int Fibonacci(int n) if (n <= 1) return n; return Fibonacci(n - 1) + Fibonacci(n - 2); Jan Hnilica Počítačové modelování 12 21

22 Kdy rekurzi nepoužívat Fibonacciho posloupnost funkce z předchozí strany počítá správně, ale pomalu, zkuste n > 40 (pozor, do 4-bytového int se vejde maximálně F 46, do unsigned int pak F 47 ) důvodem je opakované počítání stejných funkčních hodnot F 5 F 4 F 3 F 3 F 2 F 2 F 1 F 2 F 1 F 1 F 0 F 1 F 0 Obrázek ukazuje větvení rekurzivních volání při výpočtu F 5. Funkce F 2 je během výpočtu volána 3-krát, funkce F 1 dokonce 5-krát. Při výpočtu vyšších členů posloupnosti bude počet opakovaných volání stejných funkcí dramaticky narůstat. F 1 F 0 Jan Hnilica Počítačové modelování 12 22

23 Kdy rekurzi nepoužívat Fibonacciho posloupnost časová složitost rekurzivního algoritmu je O(2 n ) - při volání F i (i > 1) se výpočet vždy rozdělí na dvě větve - větvení skončí když jsou volány funkce F0 a F1, což při výpočtu F n nastane v n-tém zanoření řešení 1: použít pomocné pole a zaznamenávat si do něj již spočtené hodnoty, při výpočtu F i se nejprve podívat, jestli už hodnota nebyla spočtena => O(n) rešení 2: počítat od spoda a úlohu tak vyřešit prostým cyklem => O(n) int Fibonacci(int n) if (n <= 1) return n; int f0 = 0, f1 = 1, fn; for (int i = 2; i <= n; i++) fn = f0 + f1; f0 = f1; f1 = fn; return fn; (a ušetříme rekurzivní volání) Jan Hnilica Počítačové modelování 12 23

24 Poznámky Kdy rekurzi používat? pokud nevede k extrémním časovým nárokům algoritmu pokud rekurzivní funkce významně zjednoduší zápis algoritmu pokud ne-rekurzivní řešení úlohy neznáme Rekurzivní algoritmus bez rekurzivní funkce rekurzivní algoritmy využívají systémového zásobníku, ale datovou strukturu zásobník si můžeme naprogramovat sami program pracuje pomocí běžného cyklu, ze zásobníku vždy odebere ke zpracování dílčí úlohu a uloží do něj nové úlohy zniklé rekurzivním dělením odebrané úlohy, algoritmus končí vyprázdněním zásobníku (pracnější na naprogramování, ale efektivnější vyhneme se volání funkcí) Nepřímá rekurze rekurzivní volání může být skryto - funkce A volá ve svém těle funkci B, která zase volá funkci A Jan Hnilica Počítačové modelování 12 24

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1 Rekurze V programování ve dvou hladinách: - rekurzivní algoritmus (řešení úlohy je definováno pomocí řešení podúloh stejného charakteru) - rekurzivní volání procedury nebo funkce (volá sama sebe přímo

Více

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr Funkce pokročilé možnosti Úvod do programování 2 Tomáš Kühr Funkce co už víme u Nebo alespoň máme vědět... J u Co je to funkce? u Co jsou to parametry funkce? u Co je to deklarace a definice funkce? K

Více

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer 4. Rekurze BI-EP1 Efektivní programování 1 ZS 2011/2012 Ing. Martin Kačer, Ph.D. 2010-11 Martin Kačer Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze

Více

Rekurze. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Rekurze. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12. Rekurze doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Rekurze 161 / 344 Osnova přednášky

Více

Lineární spojový seznam (úvod do dynamických datových struktur)

Lineární spojový seznam (úvod do dynamických datových struktur) Lineární spojový seznam (úvod do dynamických datových struktur) Jan Hnilica Počítačové modelování 11 1 Dynamické datové struktury Definice dynamické struktury jsou vytvářeny za běhu programu z dynamicky

Více

Rekurzivní algoritmy

Rekurzivní algoritmy Rekurzivní algoritmy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA) ZS

Více

Prohledávání do šířky = algoritmus vlny

Prohledávání do šířky = algoritmus vlny Prohledávání do šířky = algoritmus vlny - souběžně zkoušet všechny možné varianty pokračování výpočtu, dokud nenajdeme řešení úlohy průchod stromem všech možných cest výpočtu do šířky, po vrstvách (v každé

Více

Struktura programu v době běhu

Struktura programu v době běhu Struktura programu v době běhu Miroslav Beneš Dušan Kolář Struktura programu v době běhu Vztah mezi zdrojovým programem a činností přeloženého programu reprezentace dat správa paměti aktivace podprogramů

Více

Funkce, intuitivní chápání složitosti

Funkce, intuitivní chápání složitosti Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Funkce, intuitivní

Více

Implementace LL(1) překladů

Implementace LL(1) překladů Překladače, přednáška č. 6 Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 30. října 2007 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku

Více

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů Začínáme vážně programovat Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů Podmínky a cykly Dokončení stručného přehledu řídících struktur jazyka C. Složený příkaz, blok Pascalské

Více

Pointery II. Jan Hnilica Počítačové modelování 17

Pointery II. Jan Hnilica Počítačové modelování 17 Pointery II 1 Pointery a pole Dosavadní způsob práce s poli zahrnoval: definici pole jakožto kolekce proměnných (prvků) jednoho typu, umístěných v paměti za sebou int pole[10]; práci s jednotlivými prvky

Více

Je n O(n 2 )? Je n 2 O(n)? Je 3n 5 +2n Θ(n 5 )? Je n 1000 O(2 n )? Je 2 n O(n 2000 )? Cvičení s kartami aneb jak rychle roste exponenciála.

Je n O(n 2 )? Je n 2 O(n)? Je 3n 5 +2n Θ(n 5 )? Je n 1000 O(2 n )? Je 2 n O(n 2000 )? Cvičení s kartami aneb jak rychle roste exponenciála. Příklady: Je n O(n 2 )? Je n 2 O(n)? Je 3n 5 +2n 3 +1000 Θ(n 5 )? Je n 1000 O(2 n )? Je 2 n O(n 2000 )? Cvičení s kartami aneb jak rychle roste exponenciála. Další pojmy složitosti Složitost v nejlepším

Více

Rozklad problému na podproblémy

Rozklad problému na podproblémy 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ů zavedeme abstraktní příkazy s pomocí abstraktních

Více

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace Programování: základní konstrukce, příklady, aplikace IB111 Programování a algoritmizace 2011 Připomenutí z minule, ze cvičení proměnné, výrazy, operace řízení výpočtu: if, for, while funkce příklady:

Více

Binární soubory (datové, typované)

Binární soubory (datové, typované) Binární soubory (datové, typované) - na rozdíl od textových souborů data uložena binárně (ve vnitřním tvaru jako v proměnných programu) není čitelné pro člověka - všechny záznamy téhož typu (může být i

Více

Stromy. Jan Hnilica Počítačové modelování 14

Stromy. Jan Hnilica Počítačové modelování 14 Stromy Jan Hnilica Počítačové modelování 14 1 Základní pojmy strom = dynamická datová struktura, složená z vrcholů (uzlů, prvků) propojených hranami hrany chápeme jako orientované, tzn. vedou z uzlu A

Více

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 1/41 Základní příkazy Všechny příkazy se píšou malými písmeny! Za většinou příkazů musí být středník (;)! 2/41 Základní příkazy

Více

Úvod do programování 10. hodina

Úvod do programování 10. hodina Úvod do programování 10. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Umíme z minulé hodiny Syntax Dvojrozměrné pole

Více

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu: Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury

Více

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem ČVUT FEL X36PAA - Problémy a algoritmy 3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem Jméno: Marek Handl Datum: 1. 1. 2009 Cvičení: Pondělí 9:00 Zadání Naprogramujte

Více

5 Rekurze a zásobník. Rekurzivní volání metody

5 Rekurze a zásobník. Rekurzivní volání metody 5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení

Více

Úvod do programování. Lekce 5

Úvod do programování. Lekce 5 I N V E S T I C E D O R O Z V O J E V Z D Ě L Á V Á N Í Inovace a zvýšení atraktivity studia optiky reg. č.: CZ.1.07/2.2.00/07.0289 Úvod do programování Lekce 5 Tento projekt je spolufinancován Evropským

Více

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Dynamické programování Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Rozděl a panuj (divide-and-conquer) Rozděl (Divide): Rozděl problém na několik podproblémů tak, aby tyto podproblémy odpovídaly původnímu

Více

Dynamické programování

Dynamické programování Dynamické programování prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA)

Více

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu } 5. Operátor čárka, - slouží k jistému určení pořadí vykonání dvou příkazů - oddělím-li čárkou dva příkazy, je jisté, že ten první bude vykonán dříve než příkaz druhý. Např.: i = 5; j = 8; - po překladu

Více

KOMBINATORIKA (4.ročník I.pololetí DE, 2.ročník I.pololetí NS)

KOMBINATORIKA (4.ročník I.pololetí DE, 2.ročník I.pololetí NS) KOMBINATORIKA (4.ročník I.pololetí DE,.ročník I.pololetí NS) Kombinatorika je část matematiky, zabývající se uspořádáváním daných prvků podle jistých pravidel do určitých skupin a výpočtem množství těchto

Více

1. Implementace funkce počet vrcholů. Předmět: Algoritmizace praktické aplikace (3ALGA)

1. Implementace funkce počet vrcholů. Předmět: Algoritmizace praktické aplikace (3ALGA) Předmět: Algoritmizace praktické aplikace (3ALGA) Vytvořil: Jan Brzeska Zadání: Vytvoření funkcí na stromech (reprezentace stromu směrníky). Zadané funkce: 1. Počet vrcholů 2. Počet listů 3. Součet 4.

Více

2 Datové typy v jazyce C

2 Datové typy v jazyce C 1 Procedurální programování a strukturované programování Charakteristické pro procedurální programování je organizace programu, který řeší daný problém, do bloků (procedur, funkcí, subrutin). Původně jednolitý,

Více

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

Pole a Funkce. Úvod do programování 1 Tomáš Kühr Pole a Funkce Úvod do programování 1 Tomáš Kühr (Jednorozměrné) pole u Datová struktura u Lineární u Homogenní = prvky stejného datového typu u Statická = předem určený počet prvků u Pole umožňuje pohodlně

Více

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy Stromy úvod Stromy Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy Neorientovaný strom Orientovaný strom Kořenový orientovaný

Více

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Funkce, podmíněný příkaz if-else, příkaz cyklu for Funkce, podmíněný příkaz if-else, příkaz cyklu for Definice funkce Funkce je pojmenovaná část programu, kterou lze dále zavolat v jiné části programu. V Pythonu je definována klíčovým slovem def. Za tímto

Více

6 Příkazy řízení toku

6 Příkazy řízení toku 6 Příkazy řízení toku Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost příkazům pro řízení toku programu. Pro všechny tyto základní

Více

Definice funkcí a procedur. Mnoho operací provozujeme opakovaně, proto je hloupé programovat je při každém použití znovu.

Definice funkcí a procedur. Mnoho operací provozujeme opakovaně, proto je hloupé programovat je při každém použití znovu. Definice funkcí a procedur Mnoho operací provozujeme opakovaně, proto je hloupé programovat je při každém použití znovu. Definice funkcí a procedur Mnoho operací provozujeme opakovaně, proto je hloupé

Více

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C Hanojské věže - 3 kolíky A, B, C - na A je N disků různé velikosti, seřazené od největšího (dole) k nejmenšímu (nahoře) - kolíky B a C jsou prázdné - úkol: přenést všechny disky z A na B, mohou se odkládat

Více

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N Struktura (union) - struktura a union jsou složené typy, které "v sobě" mohou obsahovat více proměnných - struktura obsahuje v každém okamžiku všechny své proměnné, union obsahuje (=je "aktivní") pouze

Více

6. Příkazy a řídící struktury v Javě

6. Příkazy a řídící struktury v Javě 6. Příkazy a řídící struktury v Javě Příkazy v Javě Příkazy v Javě Řídicí příkazy (větvení, cykly) Přiřazovací příkaz = Řízení toku programu (větvení, cykly) Volání metody Návrat z metody - příkaz return

Více

Řídicí struktury. alg3 1

Řídicí struktury. alg3 1 Řídicí struktury Řídicí struktura je programová konstrukce, která se skládá z dílčích příkazů a předepisuje pro ně způsob provedení Tři druhy řídicích struktur: posloupnost, předepisující postupné provedení

Více

Logo2 operace, rekurze, větvení výpočtu

Logo2 operace, rekurze, větvení výpočtu Operace Logo2 operace, rekurze, větvení výpočtu Je naše vlastní operace, jejím výsledkem je nějaká hodnota. Na určení tohoto výsledku musíme použít základní příkaz jazyka Imagine logo. A tím je výsledek.

Více

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Metody přidělování paměti Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Důležitá hlediska jazykových konstrukcí: Dynamické typy Dynamické

Více

Pro kontrolu správného formátu hodnoty N použijeme metodu try-catch.

Pro kontrolu správného formátu hodnoty N použijeme metodu try-catch. 1. ŘEŠENÉ PŘÍKLADY 1.2 PŘÍKLAD 24-2-8-2_DOKONALÉ ČÍSLO Napište program, který má na vstupu přirozené číslo N > 1. Výstupem je informace o tom, zda toto číslo je/není dokonalé. (Dokonalé číslo je takové

Více

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write(\nPrumerna teplota je {0}, tprumer); Pole (array) Motivace Častá úloha práce s větším množstvím dat stejného typu o Př.: průměrná teplota za týden a odchylka od průměru v jednotlivých dnech Console.Write("Zadej T pro.den: "); double t = Double.Parse(Console.ReadLine());

Více

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012 Obecná informatika Přednášející Putovních přednášek Matematicko-fyzikální fakulta Univerzity Karlovy v Praze Podzim 2012 Přednášející Putovních přednášek (MFF UK) Obecná informatika Podzim 2012 1 / 18

Více

Úvod do programování - Java. Cvičení č.4

Úvod do programování - Java. Cvičení č.4 Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení

Více

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Vyhledávání 242 / 433 Osnova přednášky

Více

2. úkol MI-PAA. Jan Jůna (junajan) 3.11.2013

2. úkol MI-PAA. Jan Jůna (junajan) 3.11.2013 2. úkol MI-PAA Jan Jůna (junajan) 3.11.2013 Specifikaci úlohy Problém batohu je jedním z nejjednodušších NP-těžkých problémů. V literatuře najdeme množství jeho variant, které mají obecně různé nároky

Více

Prohledávání do šířky a do hloubky. Jan Hnilica Počítačové modelování 15

Prohledávání do šířky a do hloubky. Jan Hnilica Počítačové modelování 15 Prohledávání do šířky a do hloubky Jan Hnilica Počítačové modelování 15 1 Prohledávací algoritmy Úkol postupně systematicky prohledat vymezený stavový prostor Stavový prostor (SP) možné stavy a varianty

Více

Úvod do informatiky. Miroslav Kolařík

Úvod do informatiky. Miroslav Kolařík Úvod do informatiky přednáška desátá Miroslav Kolařík Zpracováno dle R. Bělohlávek, V. Vychodil: Diskrétní matematika 2, http://phoenix.inf.upol.cz/esf/ucebni/dm2.pdf P. Martinek: Základy teoretické informatiky,

Více

DSA, První krok: máme dokázat, že pro left = right vrátí volání f(array, elem, left, right)

DSA, První krok: máme dokázat, že pro left = right vrátí volání f(array, elem, left, right) Indukcí dokažte následující výrok: pokud lef t a right jsou parametry funkce f a platí left right, pak volání f(array, left, right) vrátí minimální hodnotu z hodnot všech prvků v poli array na indexech

Více

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole Příkaz switch Příkaz switch provede příslušnou skupinu příkazů na základě hodnoty proměnné (celočíselné

Více

5. přednáška - Rozklad problému na podproblémy

5. přednáška - Rozklad problému na podproblémy 5. přednáška - Rozklad problému na podproblémy Obsah přednášky: Rozklad problému na podproblémy. Rekurze. Algoritmizace (Y36ALG), Šumperk - 5. přednáška 1 Rozklad problému na podproblémy Postupný návrh

Více

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

ZPRO v C Ing. Vít Hanousek. verze 0.3 verze 0.3 Hello World Nejjednoduší program ukazující vypsání textu. #include using namespace std; int main(void) { cout

Více

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Metody přidělování paměti Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Důležitá hlediska jazykových konstrukcí: Dynamické typy Dynamické

Více

Lekce 01 Úvod do algoritmizace

Lekce 01 Úvod do algoritmizace Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů Lekce 01 Úvod do algoritmizace Tento projekt CZ.1.07/1.3.12/04.0006 je spolufinancován Evropským sociálním

Více

Poslední nenulová číslice faktoriálu

Poslední nenulová číslice faktoriálu Poslední nenulová číslice faktoriálu Kateřina Bambušková BAM015, I206 Abstrakt V tomto článku je popsán a vyřešen problém s určením poslední nenulové číslice faktoriálu přirozeného čísla N. Celý princip

Více

- jak udělat konstantu long int: L long velka = 78L;

- jak udělat konstantu long int: L long velka = 78L; Konstanty (konstatní hodnoty) Např.: - desítkové: 25, 45, 567, 45.678 - osmičkové: 045, 023, 03 vždy začínají 0 - šestnáctkové: 0x12, 0xF2, 0Xcd, 0xff, 0xFF - jak udělat konstantu long int: 245566553L

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky Vyučovací hodina 1vyučovací hodina: Opakování z minulé hodiny Nová látka Procvičení nové látky Shrnutí 5 min 20 min 15 min 5 min 2vyučovací hodiny: Opakování z minulé hodiny Nová látka Procvičení nové

Více

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek 9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek 1/24 Editační prostření Kód programu lze editovat v jakémkoli textovém editoru. 2/24 Editační prostření Kód

Více

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

Více

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2 PI JE JEDNODUCHÝ IMPERATIVNÍ PROGRAMOVACÍ JAZYK OBSAHUJE PODPORU ANOTACÍ NEOBSAHUJE NĚKTERÉ TYPICKÉ KONSTRUKTY PROGRAMOVACÍCH JAZYKŮ JAKO JSOU REFERENCE, UKAZATELE, GLOBÁLNÍ PROMĚNNÉ PODOBÁ SE JAZYKU C

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Deváté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Gabriela Nečasová, inecasova@fit.vutbr.cz

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Sedmé počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 2018/2019,

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Třídy v C++ Třídy jsou uživatelsky definované typy podobné strukturám v C, kromě datových položek (proměnných) však mohou obsahovat i funkce

Více

Algoritmus pro generování normálních magických čtverců

Algoritmus pro generování normálních magických čtverců 1.1 Úvod Algoritmus pro generování normálních magických čtverců Naprogramoval jsem v Matlabu funkci, která dokáže vypočítat magický čtverec libovolného přípustného rozměru. Za pomocí tří algoritmů, které

Více

Programování v C++ 1, 1. cvičení

Programování v C++ 1, 1. cvičení Programování v C++ 1, 1. cvičení opakování látky ze základů programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí procvičených

Více

Standardní algoritmy vyhledávací.

Standardní algoritmy vyhledávací. Standardní algoritmy vyhledávací. Vyhledávací algoritmy v C++ nám umožňují vyhledávat prvky v datových kontejnerech podle různých kritérií. Také se podíváme na vyhledávání metodou půlením intervalu (binární

Více

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Algoritmus pro hledání nejkratší cesty orientovaným grafem 1.1 Úvod Algoritmus pro hledání nejkratší cesty orientovaným grafem Naprogramoval jsem v Matlabu funkci, která dokáže určit nejkratší cestu v orientovaném grafu mezi libovolnými dvěma vrcholy. Nastudoval

Více

Programování v jazyce C a C++

Programování v jazyce C a C++ Programování v jazyce C a C++ Richter 1 Petyovský 2 1. března 2015 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno 2 Ing. Petyovský Petr, UAMT FEKT VUT Brno C++ Stručná charakteristika Nesdíĺı normu

Více

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2 Euklidův algoritmus Doprovodný materiál pro cvičení Programování I. NPRM044 Autor: Markéta Popelová Datum: 31.10.2010 Euklidův algoritmus verze 1.0 Zadání: Určete největšího společného dělitele dvou zadaných

Více

8 Třídy, objekty, metody, předávání argumentů metod

8 Třídy, objekty, metody, předávání argumentů metod 8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním

Více

Da D to t v o é v ty t py IB111: Datové typy

Da D to t v o é v ty t py IB111: Datové typy Datové typy IB111: Datové typy Data a algoritmizace jaká data potřebuji pro vyřešení problému? jak budu data reprezentovat? jaké operaci s nimi potřebuji provádět? Navržení práce s daty je velice důležité

Více

Programy a algoritmy pracující s čísly. IB111 Úvod do programování skrze Python

Programy a algoritmy pracující s čísly. IB111 Úvod do programování skrze Python Programy a algoritmy pracující s čísly IB111 Úvod do programování skrze Python 2013 1 / 60 Připomenutí z minule proměnné, výrazy, operace řízení výpočtu: if, for, while funkce příklady: faktoriál, binární

Více

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod. Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání

Více

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr Koncepce (větších) programů Základy programování 2 Tomáš Kühr Parametry a návratová hodnota main Již víme, že main je funkce A také tušíme, že je trochu jiná než ostatní funkce v programu Funkce main je

Více

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu Ukazatel a dynamické datové struktury v prostředí DELPHI Důležitým termínem a konstrukčním programovým prvkem je typ UKAZATEL. Je to vlastně

Více

Více o konstruktorech a destruktorech

Více o konstruktorech a destruktorech Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení

Více

Časová a prostorová složitost algoritmů

Časová a prostorová složitost algoritmů .. Časová a prostorová složitost algoritmů Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Hodnocení algoritmů Programovací techniky Časová a prostorová

Více

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava Implementace LL(1) překladů Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 6. ledna 2012 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Základy programování Úloha: Eratosthenovo síto Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Obsah 1 Zadání úkolu: 3 1.1 Zadání:............................... 3 1.2 Neformální zápis:.........................

Více

M - Kvadratické rovnice a kvadratické nerovnice

M - Kvadratické rovnice a kvadratické nerovnice M - Kvadratické rovnice a kvadratické nerovnice Určeno jako učební tet pro studenty dálkového studia. VARIACE 1 Tento dokument byl kompletně vytvořen, sestaven a vytištěn v programu dosystem - EduBase.

Více

Programování v C++, 2. cvičení

Programování v C++, 2. cvičení Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule

Více

Základní datové struktury

Základní datové struktury Základní datové struktury Martin Trnečka Katedra informatiky, Přírodovědecká fakulta Univerzita Palackého v Olomouci 4. listopadu 2013 Martin Trnečka (UPOL) Algoritmická matematika 1 4. listopadu 2013

Více

Datové struktury 2: Rozptylovací tabulky

Datové struktury 2: Rozptylovací tabulky Datové struktury 2: Rozptylovací tabulky prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy

Více

BI-EP1 Efektivní programování 1

BI-EP1 Efektivní programování 1 BI-EP1 Efektivní programování 1 ZS 2011/2012 Ing. Martin Kačer, Ph.D. 2010-11 Martin Kačer Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze Evropský

Více

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; } Pole Kdybychom v jazyce C++chtěli načíst větší počet čísel nebo znaků a všechny bylo by nutné všechny tyto hodnoty nadále uchovávat v paměti počítače, tak by bylo potřeba v paměti počítače alokovat stejný

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Páté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 5. týden

Více

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) Strom / tree uzel, vrchol / node, vertex hrana / edge vnitřní uzel

Více

Rozklad problému na podproblémy, rekurze

Rozklad problému na podproblémy, rekurze Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Rozklad problému na podproblémy, rekurze BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky Miroslav Balík Fakulta informačních

Více

Rozklad problému na podproblémy, rekurze

Rozklad problému na podproblémy, rekurze Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Rozklad problému

Více

Logické programování I

Logické programování I Logické programování I PROLOG Program popisuje "svět" Prologu = databáze faktů a pravidel (tzv. klauzulí). fakta: predikát(arg1, arg2,...argn). cíle:?- predikát(arg1, arg2,...argn). pravidla: hlava :-

Více

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v DSL manuál Ing. Jan Hranáč 27. října 2010 V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v současné době krátký) seznam vestavěných funkcí systému. 1 Vytvoření nového dobrodružství Nejprve

Více

17. Projekt Trojúhelníky

17. Projekt Trojúhelníky Projekt Trojúhelníky strana 165 17. Projekt Trojúhelníky 17.1. Základní popis, zadání úkolu Pracujeme na projektu Trojúhelníky, který je ke stažení na java.vse.cz. Aplikace je napsána s textovým uživatelským

Více

ALGORITMIZACE A PROGRAMOVÁNÍ

ALGORITMIZACE A PROGRAMOVÁNÍ Metodický list č. 1 Algoritmus a jeho implementace počítačovým programem Základním cílem tohoto tematického celku je vysvětlení pojmů algoritmus a programová implementace algoritmu. Dále je cílem seznámení

Více

Algoritmy a datové struktury

Algoritmy a datové struktury Algoritmy a datové struktury 1 / 34 Obsah přednášky Základní řídící struktury posloupnost příkazů podmínka cyklus s podmínkou na začátku cyklus s podmínkou na konci cyklus s pevným počtem opakování Jednoduchá

Více

Operační systémy. Cvičení 4: Programování v C pod Unixem

Operační systémy. Cvičení 4: Programování v C pod Unixem Operační systémy Cvičení 4: Programování v C pod Unixem 1 Obsah cvičení Řídící struktury Funkce Dynamická alokace paměti Ladění programu Kde najít další informace Poznámka: uvedené příklady jsou dostupné

Více

C# konzole Podíl dvou čísel, podmínka IF

C# konzole Podíl dvou čísel, podmínka IF C# konzole Podíl dvou čísel, podmínka IF Tematická oblast Datum vytvoření 2013 Ročník 3 Stručný obsah Způsob využití Autor Kód Internetové technologie, programování Výpočet podílu v konzolové aplikaci

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Deváté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 2016/2017

Více