BI-EP1 Efektivní programování 1

Podobné dokumenty
2. Mřížky / Záplavové vyplňování

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

1. Úvodní informace. BI-EP1 Efektivní programování Martin Kačer

6. Základy výpočetní geometrie

Nápovědy k numerickému myšlení TSP MU

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

BI-EP2 Efektivní programování 2

5. Dynamické programování

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I

ZŠ ÚnO, Bratří Čapků 1332

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

MATA Př 3. Číselné soustavy. Desítková soustava (dekadická) základ 10, číslice 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

ÚLOHY S POLYGONEM. Polygon řetězec úseček, poslední bod je totožný s prvním. 6 bodů: X1, Y1 až X6,Y6 Y1=X6, Y1=Y6 STANOVENÍ PLOCHY JEDNOHO POLYGONU

. je zlomkem. Ten je smysluplný pro jakýkoli jmenovatel různý od nuly. Musí tedy platit = 0

Datové struktury. alg12 1

Komisionální přezkoušení 1T (druhé pololetí) 2 x. 1) Z dané rovnice vypočtěte neznámou x:. 2) Určete, pro která x R není daný výraz definován:

5. Na množině R řeš rovnici: 5 x 2 2 x Urči všechna reálná čísla n vyhovující nerovnostem: 3 5

CVIČNÝ TEST 15. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

Mocniny. Nyní si ukážeme jak je to s umocňováním záporných čísel.

Pracovní listy - programování (algoritmy v jazyce Visual Basic) Algoritmus

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

ZŠ ÚnO, Bratří Čapků 1332

TOKY V SÍTÍCH II. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Algoritmy I, složitost

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Algoritmy a datové struktury

= - rovnost dvou výrazů, za x můžeme dosazovat různá čísla, tím měníme

Poslední nenulová číslice faktoriálu

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

3 KTE / ZPE Informační technologie

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

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

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Největší společný dělitel

Dynamické programování

Opravná zkouška 2SD (celý rok)

6 Příkazy řízení toku

Předmět: MATEMATIKA Ročník: PRVNÍ Měsíc: učivo:. ZÁŘÍ ŘÍJEN LISTOPAD PROSINEC

Rozklad problému na podproblémy

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

Programování v jazyce JavaScript

Jazyk C# a platforma.net

Programování v Pythonu

6. Lineární (ne)rovnice s odmocninou

Lineární funkce, rovnice a nerovnice 4 lineární nerovnice

8. Rekurze. doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

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

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

Cykly a pole

NP-ÚPLNÉ PROBLÉMY. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Programování I. Martin Pergel, 10. října Martin Pergel, Programování I

Spojové struktury. Spojová struktura (linked structure):

Řešení úloh z TSP MU SADY S 1

Základní datové struktury III: Stromy, haldy

Programování I. Martin Pergel,

2.4.3 Kreslení grafů funkcí metodou napodobení výpočtu II

CVIČNÝ TEST 36. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

Principy objektově orientovaného programování

Popisná statistika. Komentované řešení pomocí MS Excel

Souřadnicové prostory

Gymnázium Jiřího Ortena, Kutná Hora

Dynamické datové struktury III.

Přednáška 3. Rekurze 1

Rekurzivní algoritmy

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

Architektury počítačů

Sčítání a odčítání Jsou-li oba sčítanci kladní, znaménko výsledku je = + 444

GEODETICKÉ VÝPOČTY I.

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

16. Goniometrické rovnice

První kapitola úvod do problematiky

prostřednictvím ICT Téma didaktického materiálu RNDr. Václava Šrůtková

Rozklad problému na podproblémy, rekurze

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Kapitola 4. Tato kapitole se zabývá analýzou vnitřních sil na rovinných nosnících. Nejprve je provedena. Každý prut v rovině má 3 volnosti (kap.1).

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

ANOTACE vytvořených/inovovaných materiálů

Řídicí struktury. alg3 1

Měsíc: učivo:. PROSINEC Numerace do 7, rozklad čísla 1 7. Sčítání a odčítání v oboru do 7, slovní úlohy.

Svobodná chebská škola, základní škola a gymnázium s.r.o. Dělitelnost Rozklad na součin prvočísel. Dušan Astaloš

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

x 0; x = x (s kladným číslem nic nedělá)

KTE / ZPE Informační technologie

ZŠ ÚnO, Bratří Čapků 1332

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

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

Mgr. Tomáš Kotler. I. Cvičný test 2 II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

Aritmetika s didaktikou I.

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

Univerzita Karlova v Praze Pedagogická fakulta

ZLOMKY A RACIONÁLNÍ ČÍSLA. Pojem zlomku. Zlomek zápis části celku. a b. a je část, b je celek, zlomková čára

Seriál II.II Vektory. Výfučtení: Vektory

Přehled učiva matematiky 7. ročník ZŠ

6. Tahy / Kostry / Nejkratší cesty

ZŠ ÚnO, Bratří Čapků 1332

GEODETICKÉ VÝPOČTY I.

Cykly. Základy programování 1 Martin Kauer (Tomáš Kühr)

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

2.3.1 Rovnice v součinovém tvaru

Transkript:

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ý sociální fond Praha & EU: Investujeme do vaší budoucnosti

Výpočet plochy mnohoúhelníku Zadán postupně obvod Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 2

Udržuji svislou souřadnici Při pohybu vpravo přičtu, co je pod stranou Při pohybu vlevo odečtu Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 3

Udržuji svislou souřadnici Při pohybu vpravo přičtu, co je pod stranou Při pohybu vlevo odečtu Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 4

Udržuji svislou souřadnici Při pohybu vpravo přičtu, co je pod stranou Při pohybu vlevo odečtu Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 5

Udržuji svislou souřadnici Při pohybu vpravo přičtu, co je pod stranou Při pohybu vlevo odečtu Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 6

Udržuji svislou souřadnici Při pohybu vpravo přičtu, co je pod stranou Při pohybu vlevo odečtu Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 7

Udržuji svislou souřadnici Při pohybu vpravo přičtu, co je pod stranou Při pohybu vlevo odečtu Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 8

Udržuji svislou souřadnici Při pohybu vpravo přičtu, co je pod stranou Při pohybu vlevo odečtu Co opačný směr? Na konci vyjde záporné Jen otočím znaménko Co záporné souřadnice? Nevadí! Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 9

Kontrola párování závorek Číst od začátku a ukládat na zásobník Při jakékoli nesrovnalosti hlásit chybu Na konci musí být zásobník prázdný Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 10

for (;;) { c = getchar(); switch (c) { case '(': c2 = getchar(); if (c2 == '*') return 5; ungetc(c2, stdin); return 1; case '*': c2 = getchar(); if (c2 == ')') return -5; ungetc(c2, stdin); break; case ')': return -1; case '[': return 2; case ']': return -2; case '{': return 3; case '}': return -3; case '<': return 4; case '>': return -4; case '\n': return 0; } } Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 11

Oddělení zpracování vstupu a kontroly závorek Zjednodušuje situaci, omezuje opakování kódu Zmenšuje prostor pro chyby top = 0; correct = 1; while ((par = nextpar())) { if (par > 0) { stack[top++] = par; } else { if (top == 0) correct = 0; else if (stack[--top]!= -par) correct = 0; } } if (top > 0) correct = 0; Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 12

Reprezentace čísel prvočíselným rozkladem 23 = 23 1 24 = 2 3. 3 1 25 = 5 2 26 = 2 1. 13 1 27 = 3 3 Součin je pak součtem exponentů 23. 24. 25. 26. 27 = 2 3+1. 3 1+3. 5 2. 13 1. 23 1 Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 13

Počet nul = počet násobků deseti, tj. 2 a 5 6000 = 2. 3. 10 3 = 2 4. 3. 5 3 Menší z exponentů u dvojky a pětky 3 nuly Pozorování: V případě faktoriálu je dvojek vždycky víc než pětek! Dvojka každé druhé (sudé) číslo přidá alespoň jednu Pětka obsahuje ji každé páté číslo Stačí počítat mocninu pětky Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 14

Sečteme mocniny pětky všech čísel od jedné do N 12! = 12. 11. 10. 9. 8. 7. 6. 5. 4. 3. 2. 1 Každé páté číslo přidá jednu Ale pozor! Každé 25. číslo přidá 5 2 Každé 125. číslo přidá 5 3 atd. Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 15

int x = nextint(), res = 0; for (int f = 5; f <= x; f *= 5) res += x/f; System.out.println(res); Ano, to je opravdu CELÉ řešení Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 16

Najít maximální souvislý trojúhelník Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 17

Možná se nám budou lépe představovat čtverečky Nepřipomíná to něco? Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 18

Pro každý čtvereček si pamatujeme, jaký maximální čtverec v něm může končit Lze to zjistit z předchozích čtverečků?!!! 3 3 Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 19

Princip je stejný 2 2!! Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 20

Princip je stejný Jen práce s indexy je trochu tricky 1 2 3 4 5 6 7 8 9 1 1,1 1,3 1,5 1,7 1,9 1,2 1,4 1,6 1,8 2 2,2 2,4 2,6 2,8 2,3 2,5 2,7 3 3,3 3,5 3,7 3,4 3,6 4 4,4 4,6 4,5 5 5,5 Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 21

Použijeme opět zarážku na nulté pozici a kolem kraje for (int i = 1; i <= n; ++i) for (int j = i; j <= n*2 - i; j += 2) { if (!triangle[i][j]) max[i][j] = 0; else if (!triangle[i-1][j]) max[i][j] = 1; else max[i][j] = Math.min(max[i-1][j-1], max[i-1][j+1]) + 1; if (max[i][j] > best) best = max[i][j]; i-1, j-1 } i-1, j i, j i-1, j+1 Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 22

Nezapomeneme na obrácené trojúhelníky! for (int i = n-1; i >= 1; --i) for (int j = i+1; j <= n*2 - i; j += 2) { if (!triangle[i][j]) max[i][j] = 0; else if (!triangle[i+1][j]) max[i][j] = 1; else max[i][j] = Math.min(max[i+1][j-1], max[i+1][j+1]) + 1; if (max[i][j] > best) best = max[i][j]; } i, j i+1, j i+1, j-1 i+1, j+1 Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 23

Máme pravoúhlý mnohoúhelník Hledáme bod, ze kterého je vidět celý obsah Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 24

Není to tak složité, jak to vypadá! Stačí se omezit na viditelnost všech stěn Průnik ze všech stěn dá výsledek Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 25

To samé jinými slovy: Kamera musí být napravo od všech levých stěn nalevo od všech pravých stěn nahoře od všech spodních stěn dole od všech horních stěn Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 26

void oneedge(int x1, int y1, int x2, int y2) { int d, x; if (x1 == x2) { x = x1; d = (y1 < y2)? DIR_UP : DIR_DOWN; } else { x = y1; d = (x1 < x2)? DIR_RIGHT : DIR_LEFT; } if (x < min[d]) min[d] = x; if (x > max[d]) max[d] = x; } boolean getresult() { return (max[dir_left] <= min[dir_right] max[dir_right] <= min[dir_left]) && (max[dir_up] <= min[dir_down] max[dir_down] <= min[dir_up]); } Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 27

Pro přehlednost oddělíme procházení bodů Nezapomeneme na poslední stěnu (také lze přidat první bod znovu na konec pole) int x0 = nextint(), y0 = nextint(); int xp = x0, yp = y0; while (--n > 0) { int x = nextint(), y = nextint(); oneedge(xp, yp, x, y); xp = x; yp = y; } oneedge(xp, yp, x0, y0); Řešení 2. sady úloh Martin Kačer, BI-EP1, ZS 2011 28