Algoritmy. BI-PA1 Programování a Algoritmizace 1. Miroslav Baĺık, Ladislav Vagner a Josef Vogel
|
|
- Renata Vaňková
- před 5 lety
- Počet zobrazení:
Transkript
1 Algoritmy BI-PA1 Programování a Algoritmizace 1 Miroslav Baĺık, Ladislav Vagner a Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních technologíı České vysoké učení technické v Praze xvagner@fit.cvut.cz, vogeljos@fit.cvut.cz 3., 5. a 6. října 2017
2 PA1 - Přednášky 1 Úvod, algoritmy 2 Proměnné, základní vstup a výstup 3 Výrazy 4 Větvení, cykly 5 Funkce 6 Pole, řetězce 7 Struktury, ukazatele #1 8 Ukazatele #2 9 Složitost algoritmů 10 Rekurze 11 Spojové seznamy 12 Stromy, soubory 13 Moduly, ADT M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 2/55
3 Přehled Algoritmy úvod. Algoritmy vlastnosti, příklady. Programovací jazyky úvod. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 3/55
4 Algoritmus Definice: Algoritmus je konečná posloupnost operací vedoucí k vyřešení určité třídy problémů. Algoritmus je tvořen seznamem jednoznačně definovaných příkazů. Algoritmus zajišt uje, že očekávané výsledky budou dosaženy pro jakákoli přípustná vstupní data. Výsledky musí být nalezeny po konečném počtu kroků. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 4/55
5 Algoritmus vlastnosti Hromadnost algoritmy jsou určeny pro řešení celé třídy problémů, nikoli pouze pro jediný konkrétní problém. Konkrétní problém (instance problému) je zadána pomocí vstupních dat. Determinovanost každý krok algoritmu je jednoznačně definován. Nemůže zde být nic náhodného. Opakování výpočtu pro stejná vstupní data musí vést ke stejným výsledkům. Resultativnost Každá přípustná vstupní data vedou k požadovaným výsledkům. Konečnost Pro každá přípustná vstupní data se po konečném počtu kroků dojde k výsledkům. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 5/55
6 Algoritmus vlastnosti (pokračování) Vstup Konkrétní instance problému je dána vstupními daty. Výstup Požadované výsledky jsou tvořeny výstupními daty. Složitost obvykle nás zajímají algoritmy, které jsou efektivní z hlediska: rychlosti (doba výpočtu), pamět ového prostoru (velikost potřebné paměti). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 6/55
7 Jak popsat algoritmus Přirozený jazyk. Vývojový diagram (flowchart). Struktogram (Nassi-Shneidermann diagram). Pseudokód. Programovací jazyk (např. C/C++/Java... ). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 7/55
8 Problém #1 planeta Země a myš Předpokládejme, že naše Země je dokonalá koule. Je těsně omotána okolo rovníku zcela nepružnou mašĺı. Když tuto mašli prodloužíme o jeden metr a natáhneme ji rovnoměrně vysoko nad rovník, vznikne jistá mezera. Je třeba určit, zda se pod mašĺı protáhne myš. Dále uvažme obdobný problém pro Měsíc. (obraz Země - NASA) M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 8/55
9 Řešení #1 (naivní) Řešení pro Zemi: 1 Chytím myš (musí být živá, bude prolézat). 2 Seženu dlouhou mašli. 3 Omotám ji těsně okolo rovníku. 4 Přidám jeden metr. 5 Natáhnu mašli rovnoměrně vysoko nad rovník. 6 Vhodně motivovanou myš požádám, aby zkusila prolézt. 7 Zapíšu výsledek. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 9/55
10 Řešení #1 (naivní) - pokračování Modifikace pro Měsíc: 1 Seženu grant. 2 Koupím vesmírnou lod, skafandr pro sebe a myš. 3 Pokračuji jako na Zemi. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 10/55
11 Řešení #1 vyhodnocení Skončí? Algoritmus musí skončit v konečném počtu kroků. Tento počet kroků může být značně velký (to závisí na velikosti problému a na jeho složitosti), ale musí být konečný pro každá přípustná vstupní data. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 11/55
12 Řešení #1 vyhodnocení Skončí? Algoritmus musí skončit v konečném počtu kroků. Tento počet kroků může být značně velký (to závisí na velikosti problému a na jeho složitosti), ale musí být konečný pro každá přípustná vstupní data. Ano, náš algoritmus skončí. Je deterministický? Každý krok algoritmu musí být jednoznačně a přesně definován; v každé situaci musí být naprosto zřejmé, co a jak se má provést, jak má provádění algoritmu pokračovat. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 11/55
13 Řešení #1 vyhodnocení Skončí? Algoritmus musí skončit v konečném počtu kroků. Tento počet kroků může být značně velký (to závisí na velikosti problému a na jeho složitosti), ale musí být konečný pro každá přípustná vstupní data. Ano, náš algoritmus skončí. Je deterministický? Každý krok algoritmu musí být jednoznačně a přesně definován; v každé situaci musí být naprosto zřejmé, co a jak se má provést, jak má provádění algoritmu pokračovat. Náš algoritmus je deterministický, s jistými omezeními. Nemůžeme zajistit deterministické chování myši. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 11/55
14 Řešení #1 vyhodnocení (pokračování) Je univerzální? Algoritmy jsou navrhovány nikoli pro řešení jediného problému, ale musí řešit celou třídu problémů. Např. nedává smysl vytvářet algoritmus pro výpočet 7 4, ale algoritmus pro násobení dvou zadaných celých čísel. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 12/55
15 Řešení #1 vyhodnocení (pokračování) Je univerzální? Algoritmy jsou navrhovány nikoli pro řešení jediného problému, ale musí řešit celou třídu problémů. Např. nedává smysl vytvářet algoritmus pro výpočet 7 4, ale algoritmus pro násobení dvou zadaných celých čísel. Náš algoritmus je univerzální, muže být použit pro různé vesmírné objekty a různé živočichy. Akceptuje nějaké vstupy? Algoritmy obvykle vyžadují nějaký vstup pro popis instance problému. Tyto vstupy jsou zpracovány na začátku nebo v průběhu provedení algoritmu. Vstupní hodnoty jsou omezeny na určitou množinu povolených vstupů. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 12/55
16 Řešení #1 vyhodnocení (pokračování) Je univerzální? Algoritmy jsou navrhovány nikoli pro řešení jediného problému, ale musí řešit celou třídu problémů. Např. nedává smysl vytvářet algoritmus pro výpočet 7 4, ale algoritmus pro násobení dvou zadaných celých čísel. Náš algoritmus je univerzální, muže být použit pro různé vesmírné objekty a různé živočichy. Akceptuje nějaké vstupy? Algoritmy obvykle vyžadují nějaký vstup pro popis instance problému. Tyto vstupy jsou zpracovány na začátku nebo v průběhu provedení algoritmu. Vstupní hodnoty jsou omezeny na určitou množinu povolených vstupů. Ano, náš algoritmus řeší daný problém pro libovolnou myš, Zemi i Měsíc (je dán poloměr). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 12/55
17 Řešení #1 vyhodnocení (pokračování) Poskytuje výsledky? Algoritmus bez výsledků není moc užitečný. Alespoň nějaký výsledek je požadován, např. zda problém byl vyřešen. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 13/55
18 Řešení #1 vyhodnocení (pokračování) Poskytuje výsledky? Algoritmus bez výsledků není moc užitečný. Alespoň nějaký výsledek je požadován, např. zda problém byl vyřešen. Ano, náš algoritmus má výsledek - odpověd ano či ne. Je efektivní? Algoritmy mohou být neefektivní, pokud provádějí kroky, jež nejsou nezbytné. Neefektivnost může být jakkoli vysoká. Např. algoritmus pro Měsíc může být použit i pro Zemi (grant, skafandr,... ). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 13/55
19 Řešení #1 vyhodnocení (pokračování) Poskytuje výsledky? Algoritmus bez výsledků není moc užitečný. Alespoň nějaký výsledek je požadován, např. zda problém byl vyřešen. Ano, náš algoritmus má výsledek - odpověd ano či ne. Je efektivní? Algoritmy mohou být neefektivní, pokud provádějí kroky, jež nejsou nezbytné. Neefektivnost může být jakkoli vysoká. Např. algoritmus pro Měsíc může být použit i pro Zemi (grant, skafandr,... ). Náš algoritmus nepatří mezi efektivní. Dokonce i verze pro Zemi je neefektivní. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 13/55
20 Řešení #2 (vylepšené) 1 Zjistíme poloměr vesmírného objektu, necht to je r [metr]. 2 Změřme myš, necht její výška je h [metr]. 3 Vypočteme obvod vesmírného objektu: c = 2πr [metr]. 4 Vypočteme poloměr prodloužené mašle: r b = c+1 2π [metr]. 5 Otestujme, zda r + h r b. Když je nerovnost splněna, je odpověd ano (myš podleze pod mašĺı), jinak je odpověd ne. Není třeba modifikace pro Měsíc, ani pro jiné vesmírné objekty. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 14/55
21 Vsuvka otestujte své odhady Předpokládejme stejný problém pro: Měsíc (poloměr 1737 km), Zemi (poloměr 6378 km), Slunce (poloměr km), Mléčnou dráhu (poloměr přibližně km). a předpokládejme tyto živočichy: mravenec (3 mm), myš (3 cm), kotě (10 cm), pes (50 cm). kůň (2 m). Pro které kombinace bude výsledek ano? M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 15/55
22 Vsuvka otestujte své odhady objekt mravenec myš kotě pes kůň Měsíc M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 16/55
23 Vsuvka otestujte své odhady objekt mravenec myš kotě pes kůň Měsíc ano M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 16/55
24 Vsuvka otestujte své odhady objekt mravenec myš kotě pes kůň Měsíc ano ano M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 16/55
25 Vsuvka otestujte své odhady objekt mravenec myš kotě pes kůň Měsíc ano ano ano M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 16/55
26 Vsuvka otestujte své odhady objekt mravenec myš kotě pes kůň Měsíc ano ano ano ne ne Země M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 16/55
27 Vsuvka otestujte své odhady objekt mravenec myš kotě pes kůň Měsíc ano ano ano ne ne Země ano M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 16/55
28 Vsuvka otestujte své odhady objekt mravenec myš kotě pes kůň Měsíc ano ano ano ne ne Země ano ano M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 16/55
29 Vsuvka otestujte své odhady objekt mravenec myš kotě pes kůň Měsíc ano ano ano ne ne Země ano ano ano M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 16/55
30 Vsuvka otestujte své odhady objekt mravenec myš kotě pes kůň Měsíc ano ano ano ne ne Země ano ano ano ne ne Slunce M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 16/55
31 Vsuvka otestujte své odhady objekt mravenec myš kotě pes kůň Měsíc ano ano ano ne ne Země ano ano ano ne ne Slunce ano M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 16/55
32 Vsuvka otestujte své odhady objekt mravenec myš kotě pes kůň Měsíc ano ano ano ne ne Země ano ano ano ne ne Slunce ano ano M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 16/55
33 Vsuvka otestujte své odhady objekt mravenec myš kotě pes kůň Měsíc ano ano ano ne ne Země ano ano ano ne ne Slunce ano ano ano M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 16/55
34 Vsuvka otestujte své odhady objekt mravenec myš kotě pes kůň Měsíc ano ano ano ne ne Země ano ano ano ne ne Slunce ano ano ano ne ne Mléčná dráha M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 16/55
35 Vsuvka otestujte své odhady objekt mravenec myš kotě pes kůň Měsíc ano ano ano ne ne Země ano ano ano ne ne Slunce ano ano ano ne ne Mléčná dráha ano M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 16/55
36 Vsuvka otestujte své odhady objekt mravenec myš kotě pes kůň Měsíc ano ano ano ne ne Země ano ano ano ne ne Slunce ano ano ano ne ne Mléčná dráha ano ano M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 16/55
37 Vsuvka otestujte své odhady objekt mravenec myš kotě pes kůň Měsíc ano ano ano ne ne Země ano ano ano ne ne Slunce ano ano ano ne ne Mléčná dráha ano ano ano M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 16/55
38 Vsuvka otestujte své odhady objekt mravenec myš kotě pes kůň Měsíc ano ano ano ne ne Země ano ano ano ne ne Slunce ano ano ano ne ne Mléčná dráha ano ano ano ne ne Výsledek je stejný pro jakýkoli poloměr objektu. Je tedy poloměr objektu nutný pro výpočet? M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 16/55
39 Řešení #3 (ještě více vylepšené) V řešení #2, jsme potřebovali porovnat: r + h r b t.j. h r b r kde r b r = 2πr + 1 2π r = r + 1 2π r = 1 2π [metr] Tedy, vše co jsme potřebujeme porovnat: h s 1 2π. Všimněte si, že finální formule neobsahuje vůbec poloměr objektu r. Tedy poloměr objektu je nepotřebný vstupní údaj, který pouze komplikuje a zdržuje výpočet. Podleze každý živočich, jehož výška je menší než 1 2π m 16 cm. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 17/55
40 Řešení #3 (ještě více vylepšené) 1 Změřme živočicha, necht je jeho výška h [metr]. 2 Otestujme, zda h 1 2π. Když nerovnost platí, je výsledek ano (živočich může podlézt pod mašĺı), neplatí-li nerovnost, je výsledek ne. Není třeba žádná modifikace pro jiné objekty. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 18/55
41 Problém #2 GCD Je třeba najít největší společný dělitel dvou přirozených čísel (Greatest Common Divisor - GCD). GCD čísel x a y je přirozené číslo z, pro které platí: x = z k, k je nějaké přirozené číslo, y = z l, l je nějaké přirozené číslo, z je největší číslo, pro které obě předchozí podmínky platí. Např. největší společný dělitel čísel 6 a 15 je 3. Největší společný dělitel se uplatní například při krácení zlomků. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 19/55
42 GCD řešení Problémem je najít největší společný dělitel (GCD) dvou daných přirozených čísel. Vstup: přirozená čísla x a y. Výstup: gcd(x, y). Metoda: 1 Když x < y, nastav d na hodnotu x, jinak nastav d na hodnotu y. 2 Opakuj krok (3) dokud d není dělitelem obou čísel x a y. 3 Zmenši d o 1. 4 Hodnota d je výsledek. Poznámka 1: x, y a d jsou proměnné, jejichž hodnoty jsou uloženy na určitých pamět ových místech. Tyto hodnoty se mohou během výpočtu měnit. Poznámka 2: uvedený algoritmus není efektivní, na prosemináři se seznámíme s algoritmy efektivnějšími. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 20/55
43 GCD postup výpočtu Najdi GCD čísel 15 a 6. krok x y d 15 6 počáteční hodnoty (1) (2) d není dělitelem x, další krok (3) M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 21/55
44 GCD postup výpočtu Najdi GCD čísel 15 a 6. krok x y d 15 6 počáteční hodnoty (1) (2) d není dělitelem x, další krok (3) (3) (2) d není dělitelem y, další krok (3) M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 21/55
45 GCD postup výpočtu Najdi GCD čísel 15 a 6. krok x y d 15 6 počáteční hodnoty (1) (2) d není dělitelem x, další krok (3) (3) (2) d není dělitelem y, další krok (3) (3) (2) d není dělitelem ani x, ani y, další krok (3) M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 21/55
46 GCD postup výpočtu Najdi GCD čísel 15 a 6. krok x y d 15 6 počáteční hodnoty (1) (2) d není dělitelem x, další krok (3) (3) (2) d není dělitelem y, další krok (3) (3) (2) d není dělitelem ani x, ani y, další krok (3) (3) (2) d je dělitelem obou čísel x a y, další krok (4) M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 21/55
47 GCD postup výpočtu Najdi GCD čísel 15 a 6. krok x y d 15 6 počáteční hodnoty (1) (2) d není dělitelem x, další krok (3) (3) (2) d není dělitelem y, další krok (3) (3) (2) d není dělitelem ani x, ani y, další krok (3) (3) (2) d je dělitelem obou čísel x a y, další krok (4) (4) d = 3 je výsledek M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 21/55
48 GCD algoritmus Vývojový diagram Start + - x < y d := x d := y - d is a divisor of both x and y + d := d - 1 gcd := d M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 22/55
49 GCD algoritmus Struktogram GCD(x,y) yes x < y no d := x d := y repeat until d is a divisor of both x and y d := d - 1 gcd := d M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 23/55
50 GCD algoritmus Pseudokód GCD(x,y): if ( x < y ) then d := x else d := y while ( d "is not a divisor of" x or d "is not a divisor of" y ) do d := d - 1 GCD := d M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 24/55
51 GCD algoritmus Pseudokód GCD(x,y): if ( x < y ) then d := x else d := y while ( d "is not a divisor of" x or d "is not a divisor of" y ) do d := d - 1 GCD := d Poznámka: podmínka v cyklu se změnila, využíváme De Morganova vztahu: (A B) = A B M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 24/55
52 GCD algoritmus Programovací jazyk int gcd ( int x, int y ) { int d; if ( x < y ) d = x; else d = y; while ( x % d!= 0 y % d!= 0 ) d --; return d; } M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 25/55
53 Problém #3 št astné číslo Št astné číslo je takové kladné celé číslo n, pro které se následujícím postupem dostaneme k hodnotě 1: 1 jednotlivé cifry čísla n umocníme na druhou a sečteme, 2 získáme číslo n 1, 3 pokud n 1 = 1, bylo číslo n št astné, v opačném případě postup opakujeme pro n 1. 4 pokud se postup zacykĺı (dostaneme se k číslu, které jsme již zpracovávali), číslo n není št astné. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 26/55
54 Problém #3 št astné číslo Št astné číslo je takové kladné celé číslo n, pro které se následujícím postupem dostaneme k hodnotě 1: 1 jednotlivé cifry čísla n umocníme na druhou a sečteme, 2 získáme číslo n 1, 3 pokud n 1 = 1, bylo číslo n št astné, v opačném případě postup opakujeme pro n 1. 4 pokud se postup zacykĺı (dostaneme se k číslu, které jsme již zpracovávali), číslo n není št astné. Příklad št astného čísla: = = = M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 26/55
55 Št astné číslo Příklad nešt astného čísla: = = = = = = = = = = 4 16 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 27/55
56 Št astné číslo Dvojková soustava je št astná soustava. Proč? M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 28/55
57 Št astné číslo Dvojková soustava je št astná soustava. Proč? Proto jsou počítače št astné. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 28/55
58 Št astné číslo Dvojková soustava je št astná soustava. Proč? Proto jsou počítače št astné. Proto jsou lidé od počítačů št astní. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 28/55
59 Št astné číslo Dvojková soustava je št astná soustava. Proč? Proto jsou počítače št astné. Proto jsou lidé od počítačů št astní. Dokažte. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 28/55
60 Št astné číslo algoritmus ishappy ( n ): done := false while not done c := sumdigitsquare (n) if c = 1 then done := true else n := c ishappy := done M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 29/55
61 Št astné číslo algoritmus ishappy ( n ): done := false while not done c := sumdigitsquare (n) if c = 1 then done := true else n := c ishappy := done Co se stane pro nešt astná čísla? M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 29/55
62 Št astné číslo algoritmus, oprava ishappy ( n ): done := false while not done c := sumdigitsquare (n) if c = 1 then flag := true done := true else if haveseen (c) then flag := false done := true else n := c ishappy := flag M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 30/55
63 Št astné číslo algoritmus, oprava ishappy ( n ): done := false while not done c := sumdigitsquare (n) if c = 1 then flag := true done := true else if haveseen (c) then flag := false done := true else n := c ishappy := flag Co je sumdigitsquare a haveseen? M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 30/55
64 Št astné číslo abstrakce Při návrhu složitějších algoritmů nemusíme vyřešit všechny detaily na jednom místě. Často si pomáháme abstrakcí, kdy detaily řešení nějakého dílčího problému skryjeme (black box) a odkazujeme se na něj vhodným jménem. Odkazované dílčí algoritmy pak popíšeme samostatně. Pokud je rozdělení rozumné, algoritmy jsou kratší a srozumitelnější. Tento princip se uplatňuje i v programování (funkce, procedury, moduly,... ). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 31/55
65 Št astné číslo sumdigitsquare sumdigitsquare ( n ): c := countdigits ( n ) sum := 0 i := 0 repeat c times digit := (n / 10 ^ i) mod 10 sum := sum + digit * digit i := i + 1 sumdigitsquare := sum M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 32/55
66 Št astné číslo countdigits countdigits ( n ): if n < 10 then digits := 1 else if n < 100 then digits := 2 else if countdigits := digits M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 33/55
67 Št astné číslo countdigits countdigits ( n ): if n < 10 then digits := 1 else if n < 100 then digits := 2 else if countdigits := digits Pracné, není obecné, kolik je maximum? M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 33/55
68 Št astné číslo countdigits countdigits ( n ): countdigits := log10 (n) M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 34/55
69 Št astné číslo countdigits countdigits ( n ): countdigits := log10 (n) Skoro, ale např. pro 12 dostaneme 1 cifru. Zaokrouhlovat nahoru nebo dolů? M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 34/55
70 Št astné číslo countdigits countdigits ( n ): countdigits := floor ( log10 (n) ) + 1 M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 35/55
71 Št astné číslo countdigits countdigits ( n ): countdigits := floor ( log10 (n) ) + 1 Logaritmus bývá počítán nepřesně (aproximace pomocí řad). Nešlo by se mu vyhnout? M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 35/55
72 Št astné číslo countdigits countdigits ( n ): digits := 0 while n > 0 digits := digits + 1 n := floor ( n / 10 ) countdigits := digits M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 36/55
73 Št astné číslo countdigits countdigits ( n ): digits := 0 while n > 0 digits := digits + 1 n := floor ( n / 10 ) countdigits := digits Nefunguje správně pro n = 0, ale v problému uvažujeme pouze kladná čísla. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 36/55
74 Št astné číslo countdigits countdigits ( n ): digits := 0 while n > 0 digits := digits + 1 n := floor ( n / 10 ) countdigits := digits Nefunguje správně pro n = 0, ale v problému uvažujeme pouze kladná čísla. Když už stejně iterujeme přes všechny cifry, nešlo by sloučit sumdigitsquare a countdigits? M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 36/55
75 Št astné číslo sumdigitsquare, optimalizace sumdigitsquare ( n ): sum := 0 while n > 0 sum := sum + ( n mod 10 ) * ( n mod 10 ) n := floor ( n / 10 ) sumdigitsquare := sum M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 37/55
76 Št astné číslo haveseen Jak ukládat čísla, která již algoritmus prošel? M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 38/55
77 Št astné číslo haveseen Jak ukládat čísla, která již algoritmus prošel? Seznam (pole): seznam musíme prohledávat při testování přítomnosti prvku, seznam musíme rozšiřovat při vkládání prvku, musíme kontrolovat duplicity při vkládání. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 38/55
78 Št astné číslo haveseen Jak ukládat čísla, která již algoritmus prošel? Seznam (pole): seznam musíme prohledávat při testování přítomnosti prvku, seznam musíme rozšiřovat při vkládání prvku, musíme kontrolovat duplicity při vkládání. Množina: abstrakce, která lépe popisuje požadované chování v algoritmu, operace vkládání a testu přítomnosti jsou množině vlastní. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 38/55
79 Št astné číslo algoritmus se množinou ishappy ( n ): done := false seenset := while not done c := sumdigitsquare (n) if c = 1 then flag := true done := true else if c seenset then flag := false done := true else n := c seenset := seenset { c } ishappy := flag M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 39/55
80 Št astné číslo optimalizace Pokud testujeme, zda n je št astné číslo v desítkové soustavě, pak mohou nastat tyto situace: algoritmus dosáhne hodnoty 1 (číslo je št astné), algoritmus skončí v cyklu 4, 16, 37, 58, 89, 145, 42, 20, 4,... Nemůže nastat situace, kdy algoritmus pro nešt astné číslo skončí v jiném cyklu. Vysvětlení a důkaz je např. na Wikipedii, heslo Happy number. Algoritmu tedy stačí testovat hodnotu 1 (št astné) a 4 (nešt astné). Nemusí se zabývat množinou čísel, která již prošel. Pokud bychom testovali št astná čísla v jiné číselné soustavě (základ rozdílný od 10), tato optimalizace by se nedala použít. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 40/55
81 Št astné číslo finální algoritmus ishappy ( n ): done := false while not done c := sumdigitsquare (n) if c = 1 then flag := true done := true else if c = 4 then flag := false done := true else n := c ishappy := flag M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 41/55
82 Programovací jazyky Programovací jazyky jsou navrženy tak, aby: popsaly výpočetní kroky algoritmů, byly ve formě srozumitelné člověku a současně byly ve formě srozumitelné stroji (počítači). Formální jazyky jsou vytvořeny uměle. Na rozdíl od přirozených jazyků (angličtina, čeština,... ), mají formální jazyky: velmi přesnou gramatiku, žádné nebo jen málo výjimek z obecných pravidel, jen málo jazykových konstruktů (deklarace, příkaz, cyklus, podmínka,... ), potenciálně neomezenou sílu v kombinaci těchto konstruktů. Formální jazyky jsou obvykle založeny na angličtině (s výjimkou APL, který je založen na Klingonštině :-) ). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 42/55
83 Programovací jazyky (pokračování) Programovací jazyky nízké úrovně (assembler, strojový kód): velmi jednoduchá struktura, navržená pro konkrétní typ počítače, jednoduché operace (jako přesun obsahu buňky paměti do registru, sečtení obsahu dvou registrů,... ), obtížný pro člověka (zdlouhavý kód i pro jednoduché problémy), náchylný k chybám programátora. Programovací jazyky vysoké úrovně (C, C++, Java, Pascal, Ada,... ): navržené pro člověka, programy jsou kratší, jednodušeji srozumitelné, oddělují programátora od strojově specifických detailů (organizace paměti, instrukční množina, velikost slova,... ), programy nemohou být přímo použity, musí být nejdříve přeloženy do strojového kódu. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 43/55
84 Programovací jazyky (pokračování) Imperativní jazyky (procedurální programovací styl): program je sekvence příkazů zpracovávaných v pořadí shora dolů, pro změnu tohoto pořadí slouží cykly a větvení, volání podprogramu mění pořadí zpracování slouží pro vícenásobné použití stejného kódu), návrat z ukončeného podprogramu na příkaz za jeho voláním. Neimperativní jazyky: funkcionální programovací styl, deklarativní programovací styl, více o neimperativních programovacích jazycích později v jiných předmětech (např. BI-PPA). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 44/55
85 Programovací jazyky (pokračování) Imperativní jazyky z pohledu programátora: program zpracovává datové objekty různých typů, datové objekty jsou uloženy v proměnných nebo konstantách, proměnné a konstanty jsou reprezentovány svými jmény (jedinečnými identifikátory), program se skládá z deklarací a příkazů, deklarace definuje význam identifikátoru (proměnná, funkce, konstanta,... ). příkaz slouží pro vykonání nějaké akce s datovými objekty (např. mění jeho hodnotu) nebo mění pořadí provádění příkazů. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 45/55
86 Programovací jazyky (pokračování) Programovací jazyk: Syntaxe formální způsob, jak psát program: množina pravidel, která definují omezení individuálních konstrukcí a jejich kombinací, obvykle implementována jako gramatika, syntaktické diagramy, BNF Backus-Naurova forma (Backus-Naur form). Sémantika význam jednotlivých syntaktických konstrukcí: obvykle popsaná v textové podobě. M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 46/55
87 Syntaktické diagramy identifier character character character digit 'A' 'B' 'C' 'Z' digit '0' '1' '2' '9' M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 47/55
88 BNF Backus-Naurova forma identifier ::= character { digit character } character ::= A B C D... X Y Z digit ::= Legenda: {x} žádný nebo více výskytů x, x y bud x nebo y, [x] x je nepovinné (žádný nebo jeden výskyt). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 48/55
89 Interpretace programu input data source code compiler computer internal form interpret computer output data M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 49/55
90 Kompilace programu do strojového kódu input data source code compiler computer our program in a machine code computer output data M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 50/55
91 Programovací jazyk C Programovací jazyk C bude použit pro vývoj, implementaci a testování programů v BI-PA1. Programovací jazyk C++ (objektově orientovaná verze jazyka C) bude použita v BI-PA2. Krátká historie jazyka C: 1972 D. Ritchie, Bell Laboratories (AT&T), PDP operační systém UNIX je napsán v jazyku C B. Kernighan, D. Ritchie: The C programming language (K&R C) 1982 ANSI working group X3J ANSI X (ANSI C, C89) 1990 adoptováno do ISO/IEC 9899: nová ISO norma: ISO 9899:1999 (C99) 2011 nová ISO norma: ISO 9899:2011 (C11, nezaměňovat s C++ 11) M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 51/55
92 Otcové jazyka C Brian Wilson Kernighan Denis MacAlistair Ritchie Kenneth Thompson M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 52/55
93 Programovací jazyk C Výhody jazyka C: programovací jazyk vyšší úrovně, umožňuje i programování nízké úrovně (manipulaci s adresami, ukazatele), optimalizující kompilátory produkují vysoce efektivní strojový kód, programy jsou portabilní mezi různými platformami (pokud nejsou použity platformně závislé triky), syntaxe C je užita mnoha jinými programovacími jazyky (C++, Java, Perl, C#, Javascript,... ). Nevýhody jazyka C: diskutabilní bezpečnostní politika vše je ponecháno na programátorovi, žádné běhové kontroly (indexy v poĺıch, validní ukazatele). M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 53/55
94 První program v jazyku C #include <stdio.h> int main ( int argc, char * argv[] ) { printf ( "Hello world!\n" ); return 0; } M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 54/55
95 Otázky a odpovědi Otázky... M. Baĺık, L. Vagner a J. Vogel, ČVUT FIT Algoritmy, BI-PA1 55/55
BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky
Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Algoritmy BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky Miroslav Balík Fakulta informačních technologií České vysoké
VíceBI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky
Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Algoritmy BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky Miroslav Balík Fakulta informačních technologií České vysoké
VíceProgramování a algoritmizace 1 2012-2013
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 Algoritmy Kdo je
Více2. lekce Algoritmus, cyklus Miroslav Jílek
2. lekce Algoritmus, cyklus Miroslav Jílek 1/36 Algoritmus 2/36 Algoritmus je konečná posloupnost operací, která dává řešení skupiny problémů 3/36 Algoritmus je konečná posloupnost operací, která dává
VíceAlgoritmizace. Cíle předmětu
Cíle předmětu Algoritmizace naučit se sestavovat algoritmy řešení jednoduchých problémů a zapisovat je v jazyku Java Organizace předmětu přednášky (učast nepovinná, ale doporučená) cvičení střídavě u tabule
VíceSeminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr
Seminář z IVT Algoritmizace Slovanské gymnázium Olomouc Tomáš Kühr Algoritmizace - o čem to je? Zatím jsme se zabývali především tím, jak určitý postup zapsat v konkrétním programovacím jazyce (např. C#)
VíceProgramovací jazyk Pascal
Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce
VíceAlgoritmizace a programování
Algoritmizace a programování Jazyk C řízení běhu programu České vysoké učení technické Fakulta elektrotechnická Ver.1.10 J. Zděnek 2015 Šest zákonů programování 1. V každém programu je alespoň jedna chyba
VíceAlgoritmy. BI-PA1 Programování a Algoritmizace I. Ladislav Vagner
Algoritmy BI-PA1 Programování a Algoritmizace I. Ladislav Vagner Katedra teoretické informatiky Fakulta informačních technologíı ČVUT v Praze xvagner@fit.cvut.cz 3. října 2016 a 4. října 2016 Kontakt místnost
VíceAlgoritmizace a programování
Algoritmizace a programování Jazyk C řízení běhu programu České vysoké učení technické Fakulta elektrotechnická Ver.1.10 J. Zděnek 2015 Šest zákonů programování 1. V každém programu je alespoň jedna chyba
VíceLekce 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íceVlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost
Programování Algoritmus návod na vykonání činnosti, který nás od (měnitelných) vstupních dat přivede v konečném čase k výsledku přesně definovaná konečná posloupnost činností vedoucích k výsledku (postup,
VíceProgramovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)
Programovací jazyky Programovací jazyky nižší assembler (jazyk symbolických instrukcí) vyšší imperativní (procedurální) Pascal, C/C++, Java, Basic, Python, php neimperativní (neprocedurální) Lisp, Prolog
VíceProgram a životní cyklus programu
Program a životní cyklus programu Program algoritmus zapsaný formálně, srozumitelně pro počítač program se skládá z elementárních kroků Elementární kroky mohou být: instrukce operačního kódu počítače příkazy
VíceObsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program
Denotační sémantika programovacího jazyka doc. Dr. Ing. Miroslav Beneš katedra informatiky, A-1007 59 732 4213 Obsah přednášky Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup
VíceAlgoritmizace. 1. Úvod. Algoritmus
1. Úvod Algoritmizace V dnešní době již počítače pronikly snad do všech oblastí lidské činnosti, využívají se k řešení nejrůznějších úkolů. Postup, který je v počítači prováděn nějakým programem se nazývá
VíceAlgoritmizace prostorových úloh
INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Algoritmus Daniela Szturcová Tento
Více3 Co je algoritmus? 2 3.1 Trocha historie... 2 3.2 Definice algoritmu... 3 3.3 Vlastnosti algoritmu... 3
Obsah Obsah 1 Program přednášek 1 2 Podmínky zápočtu 2 3 Co je algoritmus? 2 3.1 Trocha historie............................ 2 3.2 Definice algoritmu.......................... 3 3.3 Vlastnosti algoritmu.........................
VíceÚvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií
1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední
VíceAlgoritmizace a programování
Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu
VíceAlgoritmizace- úvod. Ing. Tomáš Otáhal
Algoritmizace- úvod Ing. Tomáš táhal Historie 9. století perský matematik a astronom Mohammed Al-Chorezím v latinském přepise příjmení= algoritmus Nejstarší algoritmus Euklides řecký matematik, 4. století
VíceVÝ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íceAlgoritmizace. Algoritmizace (Y36ALG), Šumperk - 1. přednáška 1
Algoritmizace Cíl předmětu - naučit se sestavovat algorimy řešení základních problémů a zapisovat je v jazyku Java. Jádrem předmětu jsou data, typy, výrazy a příkazy demonstrované v programovacím jazyce
VíceVýukový materiál zpracován v rámci projektu EU peníze školám
Výukový materiál zpracován v rámci projektu EU peníze školám Registrační číslo projektu: CZ. 1.07/1.5.00/34.0637 Šablona III/2 Název VY_32_INOVACE_39_Algoritmizace_teorie Název školy Základní škola a Střední
VícePříkazy if, while, do-while, for, switch
Příkazy if, while, do-while, for, switch BI-PA1 Programování a Algoritmizace 1 Ladislav Vagner, Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních technologíı
VíceDTP Základy programování Úvod do předmětu
DTP Základy programování 01 - Úvod do předmětu Úvod Co již umíte? Plán předmětu Studijní materiály Způsob ukončení předmětu Základní pojmy I. Řešený problém: Řešeným nebo zpracovávaným problémem je konkrétní
VícePascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7
Pascal Katedra aplikované kybernetiky Ing. Miroslav Vavroušek Verze 7 Proměnné Proměnná uchovává nějakou informaci potřebnou pro práci programu. Má ve svém oboru platnosti unikátní jméno. (Připadne, musí
VíceProgramovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)
Programovací jazyky Programovací jazyky nižší assembler (jazyk symbolických instrukcí) vyšší imperativní (procedurální) Pascal, C/C++, Java, Basic, Python, php neimperativní (neprocedurální) Lisp, Prolog
VíceAlgoritmizace prostorových úloh
INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Algoritmus Daniela Szturcová Tento
VíceIB111 Programování a algoritmizace. Programovací jazyky
IB111 Programování a algoritmizace Programovací jazyky Programovací jazyky Programovací jazyk Prostředek pro zápis algoritmů, jež mohou být provedeny na počítači Program Zápis algoritmu v programovacím
Více11. Přehled prog. jazyků
Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 11 1 Základy algoritmizace 11. Přehled prog. jazyků doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze
VíceImplementace 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íceDynamické 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íceOperač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íceMATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ
MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ 1) PROGRAM, ZDROJOVÝ KÓD, PŘEKLAD PROGRAMU 3 2) HISTORIE TVORBY PROGRAMŮ 3 3) SYNTAXE A SÉMANTIKA 3 4) SPECIFIKACE
VíceZáklady algoritmizace
Algoritmus Toto je sice na první pohled pravdivá, ale při bližším prozkoumání nepřesná definice. Například některé matematické postupy by této definici vyhovovaly, ale nejsou algoritmy. Přesné znění definice
VíceFunkce, procedury, složitost
Funkce, procedury, složitost BI-PA1 Programování a Algoritmizace 1 Miroslav Baĺık, Ladislav Vagner a Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních technologíı
VíceAlgoritmus. Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu.
Algoritmus Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu. Klíčové pojmy: Algoritmus, vlastnosti algoritmu, tvorba algoritmu, vývojový diagram, strukturogram Algoritmus
VíceDatové 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íceAlgoritmizace. Obrázek 1: Přeložení programu překladačem
Algoritmizace V každém okamžiku ví procesor počítače přesně, co má vykonat. Pojmem procesor se v souvislosti s algoritmy označuje objekt (např. stroj i člověk), který vykonává činnost popisovanou algoritmem.
Více6 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íceVISUAL BASIC. Přehled témat
VISUAL BASIC Přehled témat 1 ÚVOD DO PROGRAMOVÁNÍ Co je to program? Kuchařský předpis, scénář k filmu,... Program posloupnost instrukcí Běh programu: postupné plnění instrukcí zpracovávání vstupních dat
VíceIUJCE 07/08 Přednáška č. 1
Úvod do předmětu Literatura Záznamy přednášek a vaše poznámky Harbison, S. P., Steele, G. L.: Referenční příručka jazyka C Herout, P.: Učebnice jazyka C Kernighan, B. W., Ritchie, D. M.: The C Programming
VíceVyuč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íceAlgoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.
Algoritmus Algoritmus je schematický postup pro řešení určitého druhu problémů, který je prováděn pomocí konečného množství přesně definovaných kroků. nebo Algoritmus lze definovat jako jednoznačně určenou
VíceÚvod do programování
Úvod do programování Základní literatura Töpfer, P.: Algoritmy a programovací techniky, Prometheus, Praha učebnice algoritmů, nikoli jazyka pokrývá velkou část probíraných algoritmů Satrapa, P.: Pascal
VíceMaturitní otázky z předmětu PROGRAMOVÁNÍ
Wichterlovo gymnázium, Ostrava-Poruba, příspěvková organizace Maturitní otázky z předmětu PROGRAMOVÁNÍ 1. Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti
Více1 Základních pojmy z oblasti programování, vyšší programovací jazyky, programovací paradigmata
1 Základních pojmy z oblasti programování, vyšší programovací jazyky, programovací paradigmata Studijní cíl Tento první blok celého kurzu zaměřen na zvládnutí základních pojmů z oblasti programování a
VíceZáklady algoritmizace a programování
Základy algoritmizace a programování Přednáška 1 Olga Majlingová Katedra matematiky, ČVUT v Praze 21. září 2009 Obsah Úvodní informace 1 Úvodní informace 2 3 4 Organizace předmětu Přednášky 1. 5. Základní
VíceVÝ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íce1. 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Ú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Č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íce1. 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íceGymnázium a Střední odborná škola, Rokycany, Mládežníků 1115
Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115 Číslo projektu: CZ.1.07/1.5.00/34.0410 Číslo šablony: 1 Název materiálu: Ročník: Identifikace materiálu: Jméno autora: Předmět: Tématický celek:
VíceProgramovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)
Programovací jazyk - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi) Odlišnosti implementace od normy - odchylky např.: nepovinná hlavička programu odlišná
VíceIB111 Úvod do programování skrze Python Přednáška 13
IB111 Úvod do programování skrze Python Přednáška 13 Programovací jazyky Nikola Beneš 14. prosinec 2016 IB111 přednáška 13: programovací jazyky 14. prosinec 2016 1 / 21 Osnova dnešní přednášky Programovací
VíceAbstraktní datové typy, moduly
Abstraktní datové typy, moduly BI-PA1 Programování a Algoritmizace 1 Miroslav Baĺık, Ladislav Vagner a Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních
VícePoslední 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íceZákladní datové struktury III: Stromy, haldy
Základní datové struktury III: Stromy, haldy 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í
VíceMasarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace
Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace Číslo projektu Číslo materiálu Autor Průřezové téma Předmět CZ.1.07/1.5.00/34.0565 VY_32_INOVACE_284_Programovací_jazyky
VíceIB015 Neimperativní programování. Organizace a motivace kurzu, programovací jazyk Haskell. Jiří Barnat
IB015 Neimperativní programování Organizace a motivace kurzu, programovací jazyk Haskell Jiří Barnat Sekce IB015 Neimperativní programování 01 str. 2/36 Organizace kurzu Cíle kurzu IB015 Neimperativní
VíceVÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Čí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ícePROGRAMOVACÍ JAZYKY A PŘEKLADAČE PŘEKLADY TYPICKÝCH JAZYKOVÝCH KONSTRUKCÍ PROGRAMOVACÍCH JAZYKŮ.
PROGRAMOVACÍ JAZYKY A PŘEKLADAČE PŘEKLADY TYPICKÝCH JAZYKOVÝCH KONSTRUKCÍ PROGRAMOVACÍCH JAZYKŮ. 2011 Jan Janoušek BI-PJP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Dva základní
VíceDekompozice problému, rekurze
Dekompozice problému, rekurze BI-PA1 Programování a Algoritmizace 1 Ladislav Vagner, Josef Vogel Katedra teoretické informatiky a Katedra softwarového inženýrství Fakulta informačních technologíı České
VíceÚvod. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík,2016
Úvod Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Karel Richta, Martin Hořeňovský, Aleš Hrabalík,2016 Přednášky byly připraveny i s pomocí materiálů, které vyrobili Ladislav Vágner a Pavel Strnad
VíceANOTACE vytvořených/inovovaných materiálů
ANOTACE vytvořených/inovovaných materiálů Číslo projektu Číslo a název šablony klíčové aktivity Tematická oblast Formát Druh učebního materiálu Druh interaktivity CZ.1.07/1.5.00/34.0722 III/2 Inovace a
Více3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti
Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti 3. přednáška nalezení největšího prvku, druhého nejvyššího prvku, algoritmus shozeného praporku. Algoritmizace
VíceJazyk C++, některá rozšíření oproti C
Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 1/22 Jazyk C++, některá rozšíření oproti C Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra
VíceVyhledá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íceMichal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
VíceUnbounded Model Checking
Unbounded Model Checking Stefan Ratschan Katedra číslicového návrhu Fakulta informačních technologíı České vysoké učení technické v Praze 25. října 2011 Evropský sociální fond Praha & EU: Investujeme do
VíceRekurzivní 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Ří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íceZáklady algoritmizace a programování
Základy algoritmizace a programování Přednáška 1 Olga Majlingová Katedra matematiky, ČVUT v Praze 19. září 2011 Obsah Úvodní informace 1 Úvodní informace 2 3 4 Doporučená literatura web: http://marian.fsik.cvut.cz/zapg
VíceAlgoritmy a algoritmizace
Otázka 21 Algoritmy a algoritmizace Počítačové programy (neboli software) umožňují počítačům, aby přestaly být pouhou stavebnicí elektronických a jiných součástek a staly se pomocníkem v mnoha lidských
VíceProgramová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íceAlgoritmizace řazení Bubble Sort
Algoritmizace řazení Bubble Sort Cílem této kapitoly je seznámit studenta s třídícím algoritmem Bubble Sort, popíšeme zde tuto metodu a porovnáme s jinými algoritmy. Klíčové pojmy: Třídění, Bubble Sort,
VíceMaturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software.
Maturitní témata IKT, školní rok 2017/18 1 Struktura osobního počítače Von Neumannova architektura: zakreslete, vysvětlete její smysl a popište, jakým způsobem se od ní běžné počítače odchylují. Osobní
VíceNPRG030 Programování I RNDr.Tomáš Holan, Ph.D. 4.patro, č
NPRG030 Programování I RNDr.Tomáš Holan, Ph.D. 4.patro, č.404 http://ksvi.mff.cuni.cz/~holan/ Tomas.Holan@mff.cuni.cz NPRG030 Programování I, 2014/15 1 / 37 6. 10. 2014 11:42:59 NPRG030 Programování I,
VíceKonečný automat. Jan Kybic.
Konečný automat Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2017 1 / 33 Konečný automat finite state machine Konečný automat = výpočetní model, primitivní počítač Řídící jednotka s
Více1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1
1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1 1. Prvocisla: Kratky ukazkovy priklad na demonstraci baliku WEB. Nasledujici program slouzi pouze jako ukazka nekterych moznosti a sluzeb,
VíceOperátory pro maticové operace (operace s celými maticemi) * násobení maticové Pro čísla platí: 2*2
* násobení maticové Pro čísla platí: Pro matice - násobení inverzní maticí inv inverzní matice A -1 k dané matici A je taková matice, která po vynásobení s původní maticí dá jednotkovou matici. Inverzní
VíceStromy, haldy, prioritní fronty
Stromy, haldy, prioritní fronty prof. Ing. Pavel Tvrdík CSc. Katedra počítačů FEL České vysoké učení technické DSA, ZS 2008/9, Přednáška 6 http://service.felk.cvut.cz/courses/x36dsa/ prof. Pavel Tvrdík
VíceV 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íceKTE / ZPE Informační technologie
4 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň Největší
Vícetype Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;
Vícerozměrné pole type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik; M[2,3] := 3145; - počet indexů není omezen (v praxi obvykle nejvýše tři) - více indexů pomalejší přístup k prvku (počítá
Více2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5
Obsah Obsah 1 Řídicí struktury 1 2 Podmínka 1 2.1 Podmínka typu case......................... 2 3 Příkaz skoku 3 4 Cykly 4 4.1 Cyklus s podmínkou na začátku................... 4 4.2 Cyklus s podmínkou
VíceJak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické
Jak v Javě primitivní datové typy a jejich reprezentace BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické Obsah Celočíselný datový typ Reálný datový typ Logický datový typ, typ Boolean
VícePředměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013
Předměty Algoritmizace a programování Seminář z programování Verze pro akademický rok 2012/2013 Verze pro akademický rok 2012/2013 1 Přednášky Jiřina Královcová MTI, přízemí budovy A Tel: 48 53 53 521
VíceMartin Hejtmánek hejtmmar@fjfi.cvut.cz http://kmlinux.fjfi.cvut.cz/ hejtmmar
Základy programování Martin Hejtmánek hejtmmar@fjfi.cvut.cz http://kmlinux.fjfi.cvut.cz/ hejtmmar Počítačový kurs Univerzity třetího věku na FJFI ČVUT Pokročilý 21. května 2009 Dnešní přednáška 1 Počátky
VíceStefan Ratschan. Fakulta informačních technologíı. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti
Logika pro každodenní přežití Stefan Ratschan Katedra číslicového návrhu Fakulta informačních technologíı České vysoké učení technické v Praze Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti
VíceFunkce, 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íceProgramovací jazyk C++ Hodina 1
Programovací jazyk C++ Hodina 1 Používané překladače Bloodshed Dev C++ http://www.bloodshed.net/devcpp.html CodeBlocks http://www.codeblocks.org pokud nemáte již nainstalovaný překladač, stáhněte si instalátor
VícePřekladač a jeho struktura
Překladač a jeho struktura Překladače, přednáška č. 1 Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz http://fpf.slu.cz/ vav10ui Poslední aktualizace: 23. září 2008 Definice
Více1 Základy algoritmizace a programování. 1.1 Algoritmus. 1.1.1 Možnosti zápisu algoritmů. Základy algoritmizace a programování
1 Základy algoritmizace a programování 1.1 Algoritmus Algoritmus je posloupnost operací, která řeší daný úkol v konečném počtu kroků. Je to přesný postup, který je potřeba k vykonání určité činnosti. Jinak
Více1 Strukturované programování
Projekt OP VK Inovace studijních oborů zajišťovaných katedrami PřF UHK Registrační číslo: CZ.1.07/2.2.00/28.0118 1 Cíl Seznámení s principy strukturovaného programování, s blokovou strukturou programů,
VíceMIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY
MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY Stručný úvod do programování v jazyce C 1.díl České vysoké učení technické Fakulta elektrotechnická A1B14MIS Mikroprocesory pro výkonové systémy 06 Ver.1.10 J. Zděnek,
Více2 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íceKoncepce (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