NPRG030 Programování I RNDr.Tomáš Holan, Ph.D. 4.patro, č

Podobné dokumenty
Programovací jazyk Pascal

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

Programování. Úvod a základní principy. Martin Urza

Lekce 01 Úvod do algoritmizace

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

NPRG030 Programování I, 2016/17 1 / :58:13

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Úvod do programování

Identifikátory označují objekty v programu používané (proměnné, typy, podprogramy).

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost

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

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

Algoritmizace. 1. Úvod. Algoritmus

Poslední nenulová číslice faktoriálu

Algoritmy a datové struktury

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Algoritmy. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 15. dubna / 39

Principy indukce a rekursivní algoritmy

NPRG030 Programování I, 2010/11

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Basic256 - úvod do programování Příklady. ing. petr polách

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

Algoritmizace prostorových úloh

Informatika Algoritmy

Algoritmizace- úvod. Ing. Tomáš Otáhal

Sada 1 - Základy programování

Základy algoritmizace

2. lekce Algoritmus, cyklus Miroslav Jílek

Digitální učební materiál

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Základy algoritmizace a programování

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Programování I. Martin Pergel,

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

NPRG030 Programování I, 2017/18 1 / :22:16

Algoritmizace prostorových úloh

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

VISUAL BASIC. Přehled témat

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

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

Algoritmizace. Cíle předmětu

Řídicí struktury. alg3 1

Program a životní cyklus programu

Martin Hejtmánek hejtmmar

NPRG030 Programování I, 2018/19 1 / :03:07

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

Algoritmus. Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu.

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

Tematická oblast: Programování 2 (VY_32_INOVACE_08_2_PR) Anotace: Využití ve výuce: Použité zdroje:

Vývojové diagramy - zápis algoritmu

Činnost: 1) Vyhodnotí se výraz E. 2) Jeho hodnota se uloží do proměnné V.

Algoritmizace a programování

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

Algoritmizace a programování

Základy elementární teorie čísel

Sada 1 - Základy programování

Programování a algoritmizace

Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A

NPRG030 Programování I, 2018/19 1 / :25:37

Přijímací zkouška z informatiky Dz

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

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

Princip funkce počítače

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

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

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

Závěrečná zkouška z informatiky 2011

Algoritmizace a programování

Algoritmy a algoritmizace

Výukový materiál zpracován v rámci projektu EU peníze školám

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Předmět: Algoritmizace praktické aplikace

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

Základy algoritmizace, návrh algoritmu

Lekce 04 Řídící struktury

Dijkstrův algoritmus

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

3 Co je algoritmus? Trocha historie Definice algoritmu Vlastnosti algoritmu... 3

NPRG030 Programování I, 2015/16 1 / :25:32

Digitální učební materiál

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

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

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

6 Příkazy řízení toku

Základy elementární teorie čísel

Programy na PODMÍNĚNÝ příkaz IF a CASE

Micro:bit lekce 3. - Konstrukci If Then a If Then Else najdete v kategorii Logic - Podmínky od If (např. porovnání < >= atd.) najdete taktéž v Logic

Obsah 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

Algoritmizace. Obrázek 1: Přeložení programu překladačem

PODPROGRAMY PROCEDURY A FUNKCE

Definice 7.2. Nejmenší přirozené číslo k, pro které je graf G k-obarvitelný, se nazývá chromatické číslo (barevnost) grafu G a značí se χ(g).

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

Makro. PDF vytvořeno zkušební verzí pdffactory Pro

Násobení pomocí sčítání

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

Základy algoritmizace a programování

Jednoduché cykly

Transkript:

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, 2014/15 2 / 37 6. 10. 2014 11:42:59

Programování je způsob, jak ovládat počítač umění řešit úlohy (a počítač nám v tom může pomoci) umění psát programy? co je to program? předpis, podle kterého počítač může provádět výpočet nějakého algoritmu? co je to algoritmus? NPRG030 Programování I, 2014/15 3 / 37 6. 10. 2014 11:42:59

Příklad: Algoritmus na sečtení dvou čísel zapsaných v desítkové soustavě. 1. Desítkové zápisy čísel umístíme pod sebe tak, aby jejich pravé okraje byly zarovnány 2. Delší z čísel doplníme zleva jednou nulou 3. Kratší z čísel doplníme zleva tolika nulami, aby byla obě čísla stejně dlouhá 4. Postupujeme zprava a ke každé dvojici číslic určíme číslici výsledku. pro Přitom tato číslice nezáleží jen na této dvojici, ale i na stavu výpočtu Stavy jsou dva: s přenosem bez přenosu na začátku je stav bez přenosu výsledné číslice a stav lze určit například z tabulek: Pro stav bez přenosu : 0 1 2 3 4 5 6 7 8 9 0 0 1 2 3 4 5 6 7 8 9 1 1 2 3 4 5 6 7 8 9 0 2 2 3 4 5 6 7 8 9 0 1 3 3 4 5 6 7 8 9 0 1 2 4 4 5 6 7 8 9 0 1 2 3 5 5 6 7 8 9 0 1 2 3 4 6 6 7 8 9 0 1 2 3 4 5 7 7 8 9 0 1 2 3 4 5 6 8 8 9 0 1 2 3 4 5 6 7 Pro stav s přenosem : 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 výsledek bez přenosu výsledek s přenosem NPRG030 9 9 Programování 0 1 2 3 4 5I, 62014/15 7 8 9 0 1 42 / 337 4 5 6 7 9 0 6. 10. 2014 11:42:59

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ALGORITMUS NENÍ vysvětlit něco, co známe, někomu, kdo to taky zná!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! NPRG030 Programování I, 2014/15 5 / 37 6. 10. 2014 11:42:59

Příklad: Eukleidův algoritmus Úloha: Najít největšího společného dělitele dvou přirozených čísel ( NSD(A,B) ). Postup1: Projít všechna čísla <= min( A,B ) Postup2: (Eukleides) Dvojice A,B Když A<>B, vezmi novou dvojici: to menší a rozdíl Když A=B, je A=B=NSD původní dvojice NPRG030 Programování I, 2014/15 6 / 37 6. 10. 2014 11:42:59

Příklad: NSD a 1, a 2, a n Postup: Pro k=2,, n označ D k = NSD a 1, a 2, a k D 2 = NSD(a 1, a 2 ) D i+1 = NSD(D i, a i+1 ) NPRG030 Programování I, 2014/15 7 / 37 6. 10. 2014 11:42:59

Příklad: Úloha: Nalezněte nejkratší cestu šachovým koněm z jednoho pole (třeba D3) na všechna ostatní pole. Postup: 0. Na startovní pole zapiš číslo 0 1. Všechna dosud neoznačená pole dostupná jedním tahem z pole označeného 0 označ 1 2.Všechna dosud neoznačená pole dostupná jedním tahem z pole označeného 1 označ 2 3... 2 3 atd. Nalezení cesty pak proveď odzadu : Je-li cílové políčko označené N, hledáme políčko dostupné z něj jedním tahem a označené N-1 až k políčku 0. NPRG030 Programování I, 2014/15 8 / 37 6. 10. 2014 11:42:59

0 NPRG030 Programování I, 2014/15 9 / 37 6. 10. 2014 11:42:59

1 1 1 1 0 1 1 1 1 NPRG030 Programování I, 2014/15 10 / 37 6. 10. 2014 11:42:59

2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 2 0 2 2 2 1 2 2 1 2 1 2 1 2 NPRG030 Programování I, 2014/15 11 / 37 6. 10. 2014 11:42:59

3 3 3 3 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 3 1 2 1 3 2 2 1 2 3 2 1 2 3 3 2 3 0 3 2 3 2 2 1 2 3 2 1 2 3 3 1 2 1 3 2 NPRG030 Programování I, 2014/15 12 / 37 6. 10. 2014 11:42:59

4 3 4 3 4 3 4 3 3 2 3 2 3 2 3 4 2 3 2 3 2 3 2 3 3 4 1 2 1 4 3 2 2 1 2 3 2 1 2 3 3 2 3 0 3 2 3 2 2 1 2 3 2 1 2 3 3 4 1 2 1 4 3 2 Algoritmus vlny NPRG030 Programování I, 2014/15 13 / 37 6. 10. 2014 11:42:59

Algoritmus Posloupnost konečného počtu elementárních kroků vedoucí k vyřešení daného typu úloh /Encyklopedický slovník/ Charakteristické vlastnosti: hromadnost (vstupní data, výstupní data) výsledek lze získat zcela mechanicky konečnost bw_mapa.png NPRG030 Programování I, 2014/15 14 / 37 6. 10. 2014 11:42:59

Příklad: (Theseus, Ariadna a Minotaurus) Úloha: určitě najít Minotaura (je-li tam) po (ne)nalezení se bez bloudění vrátit NPRG030 Programování I, 2014/15 15 / 37 6. 10. 2014 11:42:59

Označme chodby: červená prošel 2x (značky fixem) žlutá prošel 1x (natažená nit) zelená neprošel (ostatní) Postup: Hledání začíná u Ariadny V každé místnosti postupuj odpředu podle tabulky: 1. je tu Minotaurus => STOP, našel 2. vede tu > 1 žlutá => zpět, motej nit, žlutá červená 3. vede tu > 0 zelená => vpřed, rozmotávej, zelená -> žlutá 4. je tu Ariadna => STOP, Minotaurus neexistuje 5. je tu 1 žlutá => zpět, motej nit, žlutá červená NPRG030 Programování I, 2014/15 16 / 37 6. 10. 2014 11:42:59

Vlastnosti tohoto algoritmu: a) vždy existuje nějaké pravidlo b) skončí c) cesta zpět se nebude křížit d) nit neustále určuje cestu zpět e) u Ariadny se zastaví, jedině když neexistuje cesta k Minotaurovi NPRG030 Programování I, 2014/15 17 / 37 6. 10. 2014 11:42:59

Algoritmus prohledávání s návratem (backtracking) Na každém rozcestí, na které přijdeš, zjisti všechny možné cesty a jednu z nich si vyber. Takto postupuj dokud to jde nebo dokud se nedostaneš do situace, ve které jsi už byl. Nemůžeš-li dál, vrať se na poslední rozcestí, kde ses rozhodoval - a rozhodni se jinak. NPRG030 Programování I, 2014/15 18 / 37 6. 10. 2014 11:42:59

Ověřování správnosti algoritmu Neexistuje universální metoda zaručující úspěch! KOREKTNOST Nebyla opomenuta žádná z možností ČÁSTEČNÁ SPRÁVNOST Skončí-li, dá dobrý výsledek. KONEČNOST Pro všechna přípustná data skončí. NPRG030 Programování I, 2014/15 19 / 37 6. 10. 2014 11:42:59

Dokazování konečnosti Stačí najít způsob, jak každý stav výpočtu ohodnotit přirozeným čislem a ukázat, že provedením jednoho kroku algoritmu se tato hodnota zmenší. Invariant je tvrzení, které platí po celou dobu výpočtu. Kromě netypických výjimek k ověření správnosti NIKDY NESTAČÍ provést konečný počet výpočtů! => zkušební výpočty nejsou pokus o důkaz, ale pokus o vyvrácení. NPRG030 Programování I, 2014/15 20 / 37 6. 10. 2014 11:42:59

Úloha: Zjistěte, zda číslo N je prvočíslo Postup (Čínský algoritmus): Zjisti, zda N je dělitelem čísla 2 N -2. Je-li, N je prvočíslo. Není-li, N není prvočíslo. Příklad: N=5 2 5-2=30 => 5 je prvočíslo N=9 2 9-2=510 => 9 není prvočíslo NPRG030 Programování I, 2014/15 21 / 37 6. 10. 2014 11:42:59

Úloha: Zjistěte, zda číslo N je prvočíslo Postup (Čínský algoritmus): Zjisti, zda N je dělitelem čísla 2 N -2. Je-li, N je prvočíslo. Není-li, N není prvočíslo. Příklad: N=5 2 5-2=30 => 5 je prvočíslo N=9 2 9-2=510 => 9 není prvočíslo Pro N=341 selže! => Algoritmus je OK, omezíme-li množinu přípustných dat na čísla <= 340. NPRG030 Programování I, 2014/15 22 / 37 6. 10. 2014 11:42:59

Programování = Popisování složitějších algoritmických akcí pomocí akcí jednodušších. Příklad: Výpočet druhé mocniny přirozeného čísla Záleží na tom, jaké jednodušší akce můžeme použít. Verse 1: Umocni dané číslo na druhou. Verse 2: Vynásob dané číslo sebou samým. Verse 3: Sečti dané číslo tolikrát, kolik je samo. Verse 4: Označ dané číslo N. Sečti N sčítanců rovných N. Verse 5: nejdříve nový pojem: PROMĚNNÁ.. možnost ukládat a vybírat mezivýsledky Proměnné jsou pojmenovávány pomocí IDENTIFIKÁTORŮ, obvykle složených z písmen a číslic, musí začínat písmenem. NPRG030 Programování I, 2014/15 23 / 37 6. 10. 2014 11:42:59

Verse 5: N, Počet a Suma jsou proměnné pro celá čísla. 1. Přečti do N hodnotu ze vstupu. 2. Do Suma dosaď 0. 3. Do Počet dosaď N 4. Dokud je hodnota proměnné Počet větší než 0, opakuj akce 4.1 K hodnotě Suma přičti hodnotu proměnné N 4.2 Hodnotu proměnné Počet zmenši o 1 5. Vypiš hodnotu proměnné Suma. DEKLARACE PROMĚNNÝCH = seznam proměnných a určení jejich typů N, Pocet, Suma: integer int N; int Pocet; int Suma; Krušina, sedlák (baryton), Ludmila, jeho žena (soprán) NPRG030 Programování I, 2014/15 24 / 37 6. 10. 2014 11:42:59

Jazyky pro zápis algoritmů (programovací jazyky). PŘIŘAZOVACÍ PŘÍKAZ ukládá hodnotu do proměnné x := v x := N-7/2 y := y+1 PŘÍKAZ VSTUPU čte hodnotu ze vstupu a uloží ji do proměnné read( x ) read( N ) read( A, B, C ) PŘÍKAZ VÝSTUPU zapíše hodnotu výrazu do výstupu write( v ) write( N+1 ) NPRG030 Programování I, 2014/15 25 / 37 6. 10. 2014 11:42:59

Verse 6: N, Pocet, Suma: integer 1. read( N ) { vstup } 2. Suma := 0 { pocatecni hodnoty } 3.Pocet := N 4.Dokud je Pocet > 0, opakuj akce 4.1.Suma := Suma + N 4.2.Pocet := Pocet - 1 5. write( Suma ) { tisk vysledku } KOMENTÁŘE zvyšují srozumitelnost nemají vliv na význam / běh V jazyku Pascal: { cokoliv } (* cokoliv *) Lze je napsat kamkoliv, kde smí být mezera NPRG030 Programování I, 2014/15 26 / 37 6. 10. 2014 11:42:59

Řízení běhu programu = v jakém pořadí se budou jednotlivé kroky/akce/příkazy provádět Možnosti: příkaz skoku mění pořadí provádění příkazů strukturované příkazy vytvářejí složitější příkazy z jednodušších NPRG030 Programování I, 2014/15 27 / 37 6. 10. 2014 11:42:59

PŘÍKAZ SKOKU určuje příští prováděnou instrukci Ve většině jazyků má tvar GOTO číslo příkazu N, Pocet, Suma: integer 1: read( N ) { vstup } 2: Suma := 0 { pocatecni hodnoty } 3: Pocet := N 4: je-li Pocet = 0, pak GOTO 8 5: Suma := Suma + N 6: Pocet := Pocet - 1 7: GOTO 4 8: write( Suma ) { tisk vysledku } Poznámka: řádka <-> příkaz Poznámka: Dva druhy skoků: podmíněný nepodmíněný S těmito příkazy už bychom vystačili Když vynecháme deklarace, máme BASIC NPRG030 Programování I, 2014/15 28 / 37 6. 10. 2014 11:42:59

STRUKTUROVANÉ PROGRAMOVÁNÍ <= potřeba zvládat velké programy, potřeba dělby práce čím silnější prostředky máme k dispozici, s tím větší kázní a obezřetností je musíme používat nerespektování přirozených struktur nebo dokonce jejich (násilná) likvidace se v budoucnu projeví vážnými a nepředvídatelnými negativními důsledky. NPRG030 Programování I, 2014/15 29 / 37 6. 10. 2014 11:42:59

STRUKTUROVANÉ PROGRAMOVÁNÍ vytváření (skládání) složitějších (strukturovaných) příkazů skládáním z jednodušších Systém několika málo konstrukcí, kterými lze vyjádřit všechny algoritmické konstrukce. Přitom další rozšiřování už nic nepřidá. TVRZENÍ Strukturovaným příkazům rozumíme lépe než (stejně složitým) příkazům nestrukturovaným. PŘÍKLAD Ber, dokud dávám! Jestli prší, počkej, až pojede vlak. NPRG030 Programování I, 2014/15 30 / 37 6. 10. 2014 11:42:59

Odbočka: VÝVOJOVÉ DIAGRAMY Historicky: Jeden z pokusů, jak překonat složitost programů. Použijeme pro znázornění konstrukcí strukturovaného programování. funkční blok - akce podmínkový blok - větvení NPRG030 Programování I, 2014/15 31 / 37 6. 10. 2014 11:42:59

STRUKTUROVANÉ PROGRAMOVÁNÍ Podmíněný příkaz úplný: if P then A else B NPRG030 Programování I, 2014/15 32 / 37 6. 10. 2014 11:42:59

STRUKTUROVANÉ PROGRAMOVÁNÍ Podmíněný příkaz neúplný: if P then A NPRG030 Programování I, 2014/15 33 / 37 6. 10. 2014 11:43:00

STRUKTUROVANÉ PROGRAMOVÁNÍ Složený příkaz begin A;B;...Z end NPRG030 Programování I, 2014/15 34 / 37 6. 10. 2014 11:43:00

STRUKTUROVANÉ PROGRAMOVÁNÍ Příkazy cyklu while P do A kontrola PŘED provedením těla cyklu NPRG030 Programování I, 2014/15 35 / 37 6. 10. 2014 11:43:00

STRUKTUROVANÉ PROGRAMOVÁNÍ Příkazy cyklu repeat A;B;...Z until P kontrola PO provedení těla cyklu NPRG030 Programování I, 2014/15 36 / 37 6. 10. 2014 11:43:00

NPRG030 Programování I, 2014/15 37 / 37 6. 10. 2014 11:43:00