Základní stavební prvky algoritmu



Podobné dokumenty
Vyhláška č. 294/2015 Sb., kterou se provádějí pravidla provozu na pozemních komunikacích

Algoritmizace a programování

Algoritmizace a programování

1.2.5 Reálná čísla I. Předpoklady:

3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java

ŘÁD UPRAVUJÍCÍ POSTUP DO DALŠÍHO ROČNÍKU

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT. Cyklus while, do-while, dělitelnost, Euklidův algoritmus

Otázky k teoretické části zkoušky z předmětu IAJCE 2006/2007

Číslicová technika 3 učební texty (SPŠ Zlín) str.: - 1 -

Ovoce do škol Příručka pro žadatele

Vláda nařizuje podle 133b odst. 2 zákona č. 65/1965 Sb., zákoník práce, ve znění zákona č. 155/2000 Sb.:

-1- N á v r h ČÁST PRVNÍ OBECNÁ USTANOVENÍ. 1 Předmět úpravy

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

Uživatelská dokumentace

Uložené procedury Úvod ulehčit správu zabezpečení rychleji

účetních informací státu při přenosu účetního záznamu,

Hotelová škola, Obchodní akademie a Střední průmyslová škola Teplice,Benešovo náměstí 1, příspěvková organizace

Data v počítači EIS MIS TPS. Informační systémy 2. Spojení: jan.skrbek@tul.cz tel.: Konzultace: úterý

Sbírka úloh pro elektronickou stavebnici. Stručný popis programovacího jazyka Bascom AVR

Databázovéa informačnísystémy NÁVRH IMPLEMENTACE 2 KONZISTENCE DATABÁZE

NEJČASTĚJI KLADENÉ DOTAZY K PUBLICITĚ PROJEKTŮ OP LZZ

VI. Finanční gramotnost šablony klíčových aktivit

PŘEDPISY V SOCIÁLNÍ OBLASTI TÝKAJÍCÍ SE SILNIČNÍ DOPRAVY nařízení (ES) č. 561/2006, směrnice 2006/22/ES, nařízení (EU) č. 165/2014

1.7. Mechanické kmitání

Katedra obecné elektrotechniky Fakulta elektrotechniky a informatiky, VŠB - TU Ostrava 16. ZÁKLADY LOGICKÉHO ŘÍZENÍ

Příloha č. 3 VÝKONOVÉ UKAZATELE

Obsah. Úvodem 9 Komu je kniha určena 9 Forma výkladu 9 Konkrétní postup výuky 10 Příklady ke knize 11

Operace nad celými tabulkami

Elektrická měření 4: 4/ Osciloskop (blokové schéma, činnost bloků, zobrazení průběhu na stínítku )

Podrobný postup pro vygenerování a zaslání Žádosti o podporu a příloh OPR přes Portál farmáře

Příloha č. 54. Specifikace hromadné aktualizace SMS-KLAS

Úvod Petr Kropík viz:

VÝROBEK V MARKETINGOVÉM MIXU. doc. PhDr. Dušan Pavlů, CSc. dusan.pavlu@vsfs.cz

1 Matematické základy teorie obvodů

NÁVRHOVÝ PROGRAM VÝMĚNÍKŮ TEPLA FIRMY SECESPOL CAIRO PŘÍRUČKA UŽIVATELE

Žáci mají k dispozici pracovní list. Formou kolektivní diskuze a výkladu si osvojí grafickou minimalizaci zápisu logické funkce

Čl. I. Vyhláška č. 106/2001 Sb., o hygienických požadavcích na zotavovací akce pro děti, ve znění vyhlášky č. 148/2004 Sb.

1 METODICKÉ POKYNY AD HOC MODUL 2007: Pracovní úrazy a zdravotní problémy související se zaměstnáním

6. Příklady aplikací Start/stop Pulzní start/stop. Příručka projektanta VLT AQUA Drive

29 Evidence smluv. Popis modulu. Záložka Evidence smluv

Metody hodnocení rizik

Antény. Zpracoval: Ing. Jiří. Sehnal. 1.Napájecí vedení 2.Charakteristické vlastnosti antén a základní druhy antén

Pravidla pro rozhodčí řízení (dále jen Pravidla )

Reklamační řád. Uplatnění reklamace

ZADÁVACÍ DOKUMENTACE

Aplikace počítačů v provozu vozidel 9

UŽIVATELSKÁ PŘÍRUČKA K INFORMAČNÍMU SYSTÉMU O STÁTNÍ PODPOŘE STAVEBNÍHO SPOŘENÍ

Směrnice pro vedení, vypracování a zveřejňování bakalářských prací na Vysoké škole polytechnické Jihlava

VYSOKÁ ŠKOLA FINANČNÍ A SPRÁVNÍ, o.p.s. Fakulta ekonomických studií katedra řízení podniku. Předmět: ŘÍZENÍ LIDSKÝCH ZDROJŮ (B-RLZ)

ČÁST PÁTÁ POZEMKY V KATASTRU NEMOVITOSTÍ

Školní kolo soutěže Mladý programátor 2016, kategorie A, B

Metodika pro nákup kancelářské výpočetní techniky

Modul Řízení objednávek.

Uplatňování nařízení o vzájemném uznávání u předmětů z drahých kovů

Výzva pro předložení nabídek k veřejné zakázce malého rozsahu s názvem Výměna lina

Vyvažování tuhého rotoru v jedné rovině přístrojem Adash Vibrio

c sin Příklad 2 : v trojúhelníku ABC platí : a = 11,6 dm, c = 9 dm, α = Vypočtěte stranu b a zbývající úhly.

Programování 1. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015

Podrobný postup pro doplnění Žádosti o dotaci prostřednictvím Portálu Farmáře. 1. kolo příjmu žádostí Programu rozvoje venkova ( )

Směrnice DSO Horní Dunajovice a Želetice - tlaková kanalizace a intenzifikace ČOV. Dlouhodobý majetek. Typ vnitřní normy: Identifikační znak: Název:

DATABÁZE DŮLEŽITÉ: Před načtením nové databáze do vaší databáze si prosím přečtěte následující informace, které vám umožní:

OBKLADOVÁ FASÁDNÍ DESKA

Výzva k podání nabídek (zadávací dokumentace)

SMĚRNICE EVROPSKÉHO PARLAMENTU A RADY 2009/76/ES

NÁVOD K OBSLUZE MODULU VIDEO 64 ===============================

VYHLÁŠKA ČÁST PRVNÍ STÁTNÍ ZKOUŠKY Z GRAFICKÝCH DISCIPLÍN. Předmět úpravy

Vydání občanského průkazu

DOPRAVNÍ ZNAČENÍ do 30/2001: změna / doplnění nový název

Návod k použití aplikace MARKETINGOVÉ PRŮZKUMY.CZ

Metodika kontroly naplněnosti pracovních míst

MS měření teploty 1. METODY MĚŘENÍ TEPLOTY: Nepřímá Přímá - Termoelektrické snímače - Odporové kovové snímače - Odporové polovodičové

P A C H T O V N Í S M L O U V A. OBEC VĚŽKY (IČ: Podíl:1/1) Věžky Vlkoš u Přerova. jako Propachtovatel na straně jedné

Pracovní návrh. VYHLÁŠKA Ministerstva práce a sociálních věcí. ze dne o hygienických požadavcích na prostory a provoz dětské skupiny do 12 dětí

Soubory a databáze. Soubor označuje množinu dat, která jsou kompletní k určitému zpracování a popisují vybrané vlastnosti reálných objektů

Malé vodní elektrárny

OBSAH 1 IDENTIFIKAČNÍ ÚDAJE 2 2 VÝCHOZÍ PODKLADY PRO NÁVRH VARIANT 2 3 URČENÍ STUDIE 3 4 NÁVRHY ŘEŠENÍ JEDNOTLIVÝCH ČÁSTI 3

Oprava střechy a drenáže, zhotovení a instalace kované mříže kostel Sv. Václava Lažany

O PRODEJI NEMOVITOSTÍ Z MAJETKU MĚSTA FYZICKÝM A PRÁVNICKÝM OSOBÁM

Decentrální větrání bytových a rodinných domů

Doplňkové pojistné podmínky

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

Vážení klienti, Upozorníme i na praktické důsledky nesjednání pravidelného pracoviště při poskytování cestovních náhrad. TaxVision, s.r.o.

Řídicí struktury. alg3 1

Pokyny České pošty pro označování Doporučených zásilek čárovými kódy

Kótování na strojnických výkresech 1.část

Inovace bakalářského studijního oboru Aplikovaná chemie. Reg. č.: CZ.1.07/2.2.00/

BADATELSKÝ ŘÁD. Čl. 1. Obecná ustanovení

Český úřad zeměměřický a katastrální vydává podle 3 písm. d) zákona č. 359/1992 Sb., o zeměměřických a katastrálních orgánech, tyto pokyny:

Studie proveditelnosti. Marketingová analýza trhu

3 nadbytek. 4 bez starostí

Česká zemědělská univerzita v Praze Fakulta provozně ekonomická. Obor veřejná správa a regionální rozvoj. Diplomová práce

S_5_Spisový a skartační řád

TIP: Pro vložení konce stránky můžete použít klávesovou zkratku CTRL + Enter.

VÉCNÉ BŔEMENO 1. VĚCNÉ BŘEMENO. Věcné břemeno. Druhy věcných břemen. Vznik věcných břemen. Zánik věcných břemen. Předkupní právo

Veřejnoprávní smlouva o poskytnutí investiční dotace č. 1/2016

S t r á n k a 1 I N V E S T I C E D O R O Z V O J E V Z D Ě L Á V Á N Í

58/2016 Sb. VYHLÁKA ČÁST PRVNÍ STÁTNÍ ZKOUKY Z GRAFICKÝCH DISCIPLÍN

Metodika testování navazujících evidencí

se věc hodí k účelu, který pro její použití Prodávající uvádí nebo ke kterému se věc tohoto druhu obvykle používá,

Část I. Požadavky bakalářských a magisterských studijních programů podle studijního a zkušebního řádu univerzity

Transkript:

Základní stavební prvky algoritmu Podmínka. Cyklus for, while, do-while. Funkce, metody. Přetěžování. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 1 / 40

Obsah přednášky 1 Stavební prvky algoritmu 2 Blok příkazů 3 Podmíněný příkaz 4 Cykly 5 Podprogramy 6 Předávání parametrů hodnotou a odkazem 7 Rekurze Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 2 / 40

Stavební prvky algoritmu 1. Stavební prvky programu Základní stavební prvky programu: příkazy. Dělení příkazů: Jednoduché příkazy Základní stavební jednotka programu, neobsahují další příkazy. Přiřazovací příkaz, prázdný příkaz, příkaz skoku, příkaz podprogramu (procedury, funkce). Strukturované příkazy Tvořeny jednoduchými či dalšími příkazy. Složený příkaz (blok), příkaz pro větvení programu (podmínka), příkaz pro opakování (cyklus). Umožňují realizovat operace nad datovými položkami. Vzájemně mohou být kombinovány. Implementovány prakticky ve všech programovacích jazycích. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 3 / 40

Blok příkazů 2. Blok příkazů Používají se v případech, kdy je nutno provádět více akcí. Představují posloupnost kroků, které jsou prováděny postupně v zadaném pořadí. Jednotlivé kroky mohu/nemusí být elementární. Označován jako složený příkaz. Konstrukce bloku v C++/Javě tvořena složenými závorkami, uvnitř libovolný počet příkazů. V jiných jazycích např. odsazením. //Oteviraci zavorka double a=10, b=15; double c=a*a+b*b; //Uzaviraci zavorka Blok může být prázdný, nemusí se v něm vyskytovat žádný příkaz prázdný příkaz. ; //Prazdny prikaz //Prazdny prikaz Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 4 / 40

Blok příkazů 3. Vnořený blok Bloky mohou být tvořeny podbloky (tzv. vnořené bloky) nebo některými výše uvedenými prvky. Definujeme -li ve vnořeném bloku proměnnou, nelze ji používat mimo vnořený blok. //Zacatek bloku, lze pouzit pouze promennou a double a=1 a++; //Zacatek vnoreneho bloku, lze pouzit promenne a,b double b=10; b=a++; //Konec vnoreneho bloku b=10; //Chyba, platnost bloku //Konec bloku a=17; //Chyba, platnost bloku Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 5 / 40

Podmíněný příkaz 4. Příkazy pro větvení programu Příkazy pro větvení bývají často označovány jako tzv. řídící struktury. Patří k nejčastěji používaným konstrukcím. Umožňují provádět větvení programu a ovlivnit, které příkazy budou provedeny v závislosti na vyhodnocení booleovských relací (podmínek). Bývají proto nazývány podmíněnými příkazy. Realizují větvení algoritmu, reagují na situace, ke kterým dochází v průběhu zpracování programu. O tom, která z větví se bude provádět, rozhoduje pravdivostní hodnota podmínky. Typy podmínek: neúplná podmínka. úplná podmínka. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 6 / 40

5. Neúplná podmínka Podmíněný příkaz Pokud výraz nabývá pravdivé hodnoty, provede se příkaz resp. blok příkazů. Neřeší, co se bude dělat v případě nesplnění podmínky. Je-li za if jednoduchý příkaz, netřeba použít bloku. if (vyraz) prikaz; //jednoduchy prikaz, Z důvodu přehlednosti do bloku dáváme i jednoduchý příkaz. Je-li za if složený příkaz, nutno použít blok. if (vyraz) prikaz1; prikaz2;... Pokud je to možné, podmínky neuvádíme v negaci, ale v kladné formě. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 7 / 40

Podmíněný příkaz 6. Ukázky neúplné podmínky Různé zápisy jednoduché podmínky: if (x==5) aa++; if (x==5) a++; if (x==5) //Doporucena varianta a++; Vnořená neúplný podmínka s jednoduchým příkazem: if (x==5) //Neprehledne, vede k chybam if (y==10) a++; if (x==5) //Doporucena varianta if (y==10) a++; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 8 / 40

7. Úplná podmínka Podmíněný příkaz Úplná podmínka vznikne rozšířením neúplné podmínky o konstrukci else, která bude provedena, pokud podmínka nebude splněna. Umožňuje konstruovat složitější podmínky. Jednoduchý příkaz v těle podmínky: if (vyraz) prikaz; else prikaz; Složený příkaz v těle podmínky: if (vyraz) prikaz1; prikaz2;... //Jednoduchy prikaz, pouzit strednik //Nelze pouzit strednik!!! else prikaz3; prikaz4;... V praxi dáváme přednost variantě s blokem aneb jsou -li pochyby, používej závorky. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 9 / 40

Podmíněný příkaz 8. Ukázky neúplné podmínky Neúplný podmínká s vnořeným blokem obsahující podmínky. if (x==5) a++; if (y==10) b++; else c++; else a--; Pak else odpovídá nejbližšímu nespárovanému if. if (x==5) a++; if (y==10) b++; else c++; else a--; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 10 / 40

9. Ternární operátor? Podmíněný příkaz Tento operátor nazýváme ternárním, má tři argumenty. Umožňuje zapsat úplnou podmínku stručnějším, avšak méně přehledným, způsobem. Vyraz? Prikaz1: Prikaz2; Je -li výraz vyhodnocen jako pravdivý, je proveden Prikaz1, v opačném případě Prikaz2. Podmínku if (a<b) a++ else b++; lze zapsat jako (a<b)? a++: b++; Závorky nepovinné, slouží pro zdůraznění podmínky. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 11 / 40

Podmíněný příkaz 10. Příkaz switch Příkaz switch představuje přepínač, který umožní větvení programu do více větví. Počet větví není omezen, může být libovolný. V každé větvi se může vyskytovat více příkazů, příkazy nemusí být uvedeny v bloku. switch(vyraz) case konstanta1: Prikaz1; break; case konstanta2: Prikaz2; break;... default PrikazX; Za příkazem switch výraz, jehož vyhodnocením musí vzniknout celočíselná hodnota. Tělo příkazu tvoří návěští se syntaxí case konstanta, konstanta celočíselná nebo znaková. Za návěštím uvedeny příkazy, které jsou konány v závislosti na hodnotě návěští. Pokud není nalezeno odpovídající návěští, je vykonán kód nacházející se za návěštím default. Návěští default nepovinné. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 12 / 40

Podmíněný příkaz 11. Příkaz switch, ukázka Hodnota návěští se v příkazu nesmí opakovat. Příkaz break umožňuje předčasné ukončení vykonávání těla příkazu switch. Není -li uveden, dojde k vykonání všech následujících větví bez ohledu na hodnoty návěští. switch(znak) case '1': a++; a*=; break; case '2': a--; a/=; break; default: a*=; break; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 13 / 40

Cykly 12. Příkazy pro opakování Příkazy pro opakování nazýváme iteračními příkazy, umožňují opakovaně provádět jeden nebo více příkazů. V praxi realizovány prostřednictvím cyklů. Patří k často používaným konstrukcím, vykytují se prakticky ve všech programovacích jazycích. Opakování je prováděno v těle cyklu na základě hodnoty relačního výrazu představujícího podmínku. Podle typu vstupní podmínky dělíme cykly do tří kategorií: Cyklus s předem neznámým počtem opakování: while. Cyklus s předem známým počtem opakování: for. Cyklus s neznámým počtem opakování, který má proběhnout alespoň jednou: do while. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 14 / 40

Cykly 13. Cyklus while Používán případech, kdy počet opakování není předem znám. Vyhodnocení podmínky před průchodem cyklu. Pokud je podmínka pravdivá, je provedeno tělo cyklu. while (vyraz) telo cyklu; while (vyraz) telo cyklu; Tělo příkazu nemusí proběhnout ani jednou, pokud je výraz napoprvé vyhodnocen jako false. Nekonečný cyklus V těle cyklu musí být modifikována proměnná ovlivňující hodnotu výrazu, jinak by vznikl nekonečný cyklus. Pozor na tautologie a kontradikce, u kterých se nemění pravdivostní hodnota relace. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 15 / 40

Cykly 14. Ukázka cyklu while int cislo=10, f=1; while (cislo>1) //Opakuj, pokud je cislo >1 f=f*cislo; cislo--; System.out.println(cislo+"!="f); //Vypocet faktorialu //Uprava hodnoty vstupni podminky Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 16 / 40

Cykly 15. Cyklus for Používán v případech kdy je známpočet opakování (tj. jsou známy údaje o výchozí a koncové hodnotě testovacího výrazu). for (inicializacni_vyraz; testovaci_vyraz; zmenovy_vyraz) telo_cyklu for (inicializacni_vyraz; testovaci_vyraz; zmenovy_vyraz) telo_cyklu Inicializační výraz: Je vykonán pouze jednou, a to ještě před vyhodnocením testovacího výrazu. Testovací výraz: Určuje, zda se má provést tělo cyklu. Tělo cyklu se provádí tak dlouho, dokud je testovací výraz vyhodnocen jako pravdivý. Změnový výraz: Vyhodnocen na konci cyklu po vykonání těla cyklu, používá se pro změnu Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 17 / 40

Cykly 16. Varianty cyklu for Inicializační, testovací i změnový výraz jsou nepovinné, nemusí být uváděny. Hodnota proměnné ve změnovém cyklu se může zvětšovat i zmenšovat. Deklarace s inicializací přímo v hlavičce cyklu for. for (int i=0;i<10;i++) System.out.println(i); Deklarace mimo cyklus, inicializace v cyklu. int i; for (i=0;i<10;i++) System.out.println(i); Deklarace a inicializace mimo cyklus, změna hodnoty testovacího výrazu v těle cyklu. int i=0; for (;i<10;i++) System.out.println(i++); //Nepouzivat Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 18 / 40

Cykly 17. Varianty cyklu for Cyklus s prázdným tělem, součástí změnového výrazu i výkonný kód. int i=0; for (;i<10;system.out.println(i++); Deklarace a inicializace mimo cyklus, testovací i změnový výraz v těle cyklu. Minimalistická variantu cyklu, ukončení cyklu příkaz break. int i=0; for (; ; ;) if (i<10) System.out.println(i++); else break; Prázdné tělo cyklu for, středník na nísledující řádce for (int i=0;i<10;i++) ; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 19 / 40

Cykly 18. Ukázka cyklu for Výpočet s využitím dekrementace: int cislo=10, f=1; for (int i=cislo;i>1;f--) //Opakuj, pokud je i>1 f=f*i; //Vypocet faktorialu System.out.println(cislo+"!="f); Výpočet s využitím inkrementace: int cislo=10, f=1; for (int i=2;i<=cislo;i++) f=f*i; //Vypocet faktorialu System.out.println(cislo+"!="f); //Opakuj, pokud je i<=cislo Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 20 / 40

Cykly 19. Cyklus do while Používá se v případě, kdy není známo kolikrát má cyklus proběhnout (ale měl by proběhnout alespoň jednou). Podmínka testována až po vykonání těla cyklu. do telo_cyklu while testovaci_vyraz do telo cyklu while testovaci vyraz Cyklus probíhá, dokud je hodnota testovacího výrazu true. Pozor na vznik nekonečného cyklu, hodnota změnového výrazu musí být uvnitř cyklu změněna. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 21 / 40

Cykly 20. Ukázka: výpočet faktoriálu int cislo=10, f=1; do f=f*cislo; cislo--; while (cislo>1) System.out.println(cislo+"!="f); //Vypocet faktorialu //Uprava hodnoty vstupni podminky Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 22 / 40

Cykly 21. Příkaz break() Umožňuje okamžitě ukončit provádění těla cyklu. První varianta: break; Umožňuje vyskočit z těla cyklu, v jehož těle je tento kód zapsán. Pokračování prvním příkazem následujícím za cyklem. U vnořeného cyklu skok o 1 úroveň výše. Druhá varianta: break navesti; Ukončení provádění cyklu označeného návěštím. U vnořeného cyklu opatřeného návěštím skok o 1 úroveň výše. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 23 / 40

Cykly 22. Ukázka příkazu break() Deklarace návěští End se dvěma vnořenými cykly for. End: //Nazev navesti for (int i=0;i<10;i++) for (int j=0;j<10;j++) if (i==j+10) System.out.println(i*j); break End; //Ukonceni cyklu v navesti End k=i+j; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 24 / 40

Cykly 23. Příkaz continue() Slouží k přeskočení zbývající části příkazů nacházejících se v těle cyklu a k přechodu na další iteraci. První varianta: Vynechání všech příkazů v těle cyklu a skok na další iteraci. continue; Druhá varianta: Přeskočení části cyklu, která je označena tímto návěštím. Tato konstrukce se v praxi příliš často nepoužívá. continue navesti; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 25 / 40

Cykly 24. Ukázka použití příkazu continue for (int i=0;i<10;i++) for (int j=0;j<10;j++) if (i==j+10) System.out.println(i*j); continue; k++; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 26 / 40

Cykly 25. Zásady pro práci s cykly Cyklus by měl mít pouze jednu řídící proměnnou. Hodnota řídící proměnné by neměla být ovlivňována v cyklu. Řídící podmínku cyklu zapisovat v kladném tvaru. Vyvarovat se vzniku nekonečných cyklů. Příkaz continue nahrazovat konstrukcí if else (přehlednost). Preference cyklů while, for před do while (přehlednost). Příkaz break v těle cyklu používat pouze na jednom místě. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 27 / 40

Podprogramy 26. Procedury, funkce, metody Představují samostatnou část programu konající nějakou specializovanou funkci. Umístěny mimo hlavní program. Mohou být opakovaně spouštěny z hlavního programu či jiného podprogramu. Tvořeny: procedurami, funkcemi, metodami (některé jazyky je nerozlišují). Výhoda použití: Zvyšují přehlednost a zlepšují čitelnost programu. Urychlují vývoj a ladění programu. Možnost opakovaného provádění výpočtů (tj. nemusíme psát znovu celý kód, pouze zavoláme příslušný podprogram). Volání podprogramů: Podprogram volány se seznamem parametrů, kterým předáváme hodnoty potřebné pro výpočet, většinou vrací nějaký výsledek. Existují podprogramy, kterým nepředáváme žádné údaje, nebo naopak žádné výsledky nevrací. Procedura vs. funkce vs.metoda: Procedura nevrací výsledek, funkce ano. Tomáš Metoda Bayer bayertom@natur.cuni.cz obdobou procedury/funkce (Katedra aplikované Základní geoinformatiky stavebnív objektově prvky algoritmu kartografie, orientovaném Přírodovědecká fakulta programování. UK.) 28 / 40

Podprogramy 27. Funkce a její deklarace Tvořena hlavičkou a tělem. Hlavička funkce: Obsahuje jméno funkce, typ návratové hodnoty, seznam formálních parametrů. Tělo funkce: Obsahuje výkonný kód funkce. Jméno funkce zpravidla psáno malými písmeny, mělo by vyjadřovat její činnost. navratovy_typ jmeno_funkce(form_typ param1, form_typ param2,...) //Telo funkce V některých jazycích vytvářen prototyp funkce: Popisuje rozhraní funkce, představuje informace pro kompilátor. Tvoří ji jméno funkce, návratový typ, seznam parametrů bez výkonného kódu. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 29 / 40

Podprogramy 28. Volání funkce Provede spuštění funkce. Volání funkce tvořeno zadáním jejího jména doplněného seznamem skutečných parametrů (má -li je funkce). jmeno_funkce(skut_param1, skut_param2,...); V některých jazycích musí deklarace funkce předcházet jejímu volání, v jiných pořadí nehraje roli. Forward deklarace: Tzv. předběžná deklarace. V těle jedné funkce volána jiná funkce, která ještě nebyla deklarována. Použití funkce ještě před jejím deklarací není běžným způsobem možné (C++, Pascal), nutno použít forward deklaraci. Využití při např. při tzv. nepřímé rekurzi. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 30 / 40

Podprogramy 29. Formální a skutečné parametry funkce Skutečné parametry: Jsou použity při volání funkce. Jejich hodnoty resp. odkazy na ně předávány formálním parametrům. Formální parametry: Lokální proměnné, deklarovány v hlavičce funkce. Vznikají v okamžiku volání funkce a zanikají při ukončení funkce. Formální parametry by měly být stejného datového typu jako parametry skutečné. Nejsou -li stejného typu, provedena implicitní konverze. Dva způsoby předávání parametrů: předávání parametrů hodnotou, předávání parametrů odkazem. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 31 / 40

30. Návratová hodnota Podprogramy Pokud funkce nevrací žádnou hodnotu, je její návratový typ void. (C, Java) Má -li funkce návratovou hodnotu, musí obsahovat klíčové slovo return s uvedením hodnoty či výrazu, který bude navracet jako výsledek. Unreachable kód: Za klíčovým slovem return již nesmí následovat žádný kód. Kód byl by nedostupný = unreachable kód. double soucet (double a, double b) return a+b; a=7; //Unreachable kod, neprovede se Funkce v Javě je schopna vrátit nejvýše jednu hodnotu. Toto omezení lze obejít předáváním parametrů odkazem nebo předat Tomáš metodě Bayer bayertom@natur.cuni.cz jako parametr (Katedra další aplikované Základní proměnné, geoinformatiky stavební prvkydo algoritmu kartografie, kterých Přírodovědecká budoufakulta výsledky UK.) 32 / 40

Předávání parametrů hodnotou a odkazem 31. Předávání parametrů hodnotou Formální parametr představuje kopii skutečného parametru. Jakákoliv změna hodnoty formálního parametru neovlivní hodnotu skutečného parametru. Volající data nelze ve funkci přepsat. Použití nejčastěji u základních datových typů. Předávání hodnot skutečných parametrů parametrům formálním je prováděno při volání metody. Hodnoty jsou předávány postupně, tj. hodnotě prvního formálního parametru je předána hodnota prvního skutečného parametru, hodnotě druhého formálního parametru hodnota druhého skutečného parametru, atd... form_param1=skut_param1; form_param2=skut_param2;... Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 33 / 40

Předávání parametrů hodnotou a odkazem 32. Ukázka předávání parametrů hodnotou Funkce Pythagoras, formální parametry a,b double Pythagoras (double a, double b) Volání funkce: return Math.sqrt(a*a+b*b); c=pythagoras(aa,bb); Přiřazení se přiřazení parametrů: a=aa; b=bb; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 34 / 40

Předávání parametrů hodnotou a odkazem 33. Předávání parametrů odkazem Použití nejčastěji u odvozených datových typů. Při předávání nevzniká kopie skutečného parametru, ale kopie odkazu (pointeru) na skutečný parametr. Formální i skutečný parametr pak odkazují na stejnou proměnnou. V takovém případě změna hodnoty formálního parametru uvnitř funkce způsobí změnu hodnoty skutečného parametru. Možnost přepsání hodnot volajících dat. Předávání odkazem vs hodnotou: Předávání hodnotou je technicky náročnější proces, pro kopii skutečného parametru nutno alokovat pamět. Při práci s rozsáhlými datovými strukturami předávání hodnotou nevhodné, vysoké nároky na pamět a výpočetní výklon. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 35 / 40

Předávání parametrů hodnotou a odkazem 34. Ukázka předávání odkazem, prohození slov Deklarace funkce: void prohod (String s1, String s2) String pom; pom=s1; //Prirazeni s1 do pom s1=s2; //Prirazeni s2 do s1 s2=pom; //Prirazeni pom do s2 Deklarace skutečných parametrů: String slovo1=new String(Ahoj); String slovo2=new String(Cau); prohod(slovo1, slovo2); Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 36 / 40

Předávání parametrů hodnotou a odkazem 35. Předávání odkazem, znázornění Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 37 / 40

Předávání parametrů hodnotou a odkazem 36. Přetěžování funkcí Deklarace více funkcí stejného názvu, které se mohou lišit: (1) počtem argumentů, (2) typem argumentů, (3) pořadím argumentů. Použití u funkcí provádějících stejné činnosti, ale s různými typy dat. double dist(double x1, double y1, double x2, double y2) return Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); double dist(double dx, double dy) return Math.sqrt(dx*dy+dy*dy); Pokud zavoláme přetíženou funkci, kompilátor na základě typu parametrů, jejich pořadí či počtu vybere správnou funkci. dist(1.0,0.0,6.0,0.0); //Vyber funkci se 4 parametry dist(1,0,6,0); //Vyber funkci se 2 parametry Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 38 / 40

Rekurze 37. Rekurzivní funkce Rekurze je schopnost metody, datové struktury či objektu volat sebe sama nebo volat metodu, datovou strukturu či objekt podobného typu. Problémy řešitelné rekurzí označeny jako dekomponovatelné, mohou být rozloženy na podproblémy stejného nebo podobného typu nad menší množinou dat. Nekonečná rekurze: Rekurzivní algoritmus musí obsahovat podmínku, při které dojde k jejímu ukončení (aby nepokračovala do nekonečna). V určitém místě tedy musí dojít k takovému dořešení problému, které nebude rekurzivní. Princip rekurze: Při každém novém volání dochází k vytvoření nových lokálních proměnných (tato vlastnost je současně nevýhodou rekurze). Poté jsou zpětně dopočítávány hodnoty z předchozích volání metod. Tomáš Alokace Bayer bayertom@natur.cuni.cz na zásobníku. (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 39 / 40

Rekurze 38. Ukázka rekurze Výpočet faktoriálu rekurzí: int fakt(int n) if (n>1) return n*fakt(n-1); else return 1; Volání funkce: int cislo=10; int faktorial=fakt(cislo); Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Základní geoinformatiky stavební prvky algoritmu kartografie, Přírodovědecká fakulta UK.) 40 / 40