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

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

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

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

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

dovolují dělení velkých úloh na menší = dekompozice

Struktura programu v době běhu

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

Programovací jazyk Pascal

DUM 06 téma: Tvorba makra pomocí VBA

PODPROGRAMY PROCEDURY A FUNKCE

Programujeme v softwaru Statistica

Anotace. Dynamické programování, diskrétní simulace.

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

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

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

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

Programovani v Maplu Procedura

Časová a prostorová složitost algoritmů

Anotace. Soubory a práce s nimi, rekurze podruhé, struktury (datový typ record), Martin Pergel,

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

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

Více o konstruktorech a destruktorech

Anotace. Jednotky (tvorba a využití), struktury (typ record),

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

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

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

Programování v jazyce JavaScript

LZ77 KNIHOVNA PRO KOMPRESI A DEKOMPRESI DAT POMOCÍ ALGORITMU LZ77. Příručka uživatele a programátora

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

2 Strukturované datové typy Pole Záznam Množina... 4

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

Sada 1 - Základy programování

Úvod do programování. Lekce 5

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

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

Anotace. Dámy na šachovnici dominance a nezávislost. Aritmetické výrazy, notace a převody mezi nimi, nejdelší rostoucí podposloupnost.

Anotace. Dijkstrův algoritmus,

1. D Y N A M I C K É DAT O V É STRUKTUR Y

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

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Anotace. Pointery. Martin Pergel,

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

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

Rekurzivní algoritmy

Digitální učební materiál

Anotace. Pointery, dynamické proměnné

Sada 1 - Základy programování

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

Anotace. Ordinalni typy - typ char, funkce ord, chr, succ, prev, inc, dec,

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

Úvod do Matlabu. Praha & EU: Investujeme do vaší budoucnosti. 1 / 24 Úvod do Matlabu

Podprogramy; procedury a funkce

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Sdílení dat mezi podprogramy

Anotace. Objekt self, Zapouzdření, polymorfismus,

Implementace LL(1) překladů

Úvod do programování

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

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

Příloha Jazyk Coach

Algoritmizace a programování

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

Algoritmizace a programování

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

Programování v jazyce JavaScript

Digitální učební materiál

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

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

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

Lokální definice (1) plocha-kruhu

PSK3-9. Základy skriptování. Hlavička

ISU Cvičení 7. Marta Čudová

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

Informatika 8. třída/6

PROGRAMOVÁNÍ V SHELLU

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

1. Od Scheme k Lispu

Objektově orientované programování

Programování. Psaní čistého kódu. Martin Urza

PHP tutoriál (základy PHP snadno a rychle)

MAXScript výukový kurz

Preprocesor a koncepce (větších) programů. Úvod do programování 2 Tomáš Kühr

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

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

Anotace. Informace o praktiku z programování!!! Direktivy překladače Soubory (textové) Quicksort Metoda rozděl a panuj

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

Programování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D.

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Jednoduché příkazy jazyka Pascal

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

Algoritmizace a programování

Základy algoritmizace a programování

Další možnosti inicializace proměnných

Řídicí struktury. alg3 1

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

Tvorba webových stránek

Binární vyhledávací stromy

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

Stručný návod k programu Octave

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

Transkript:

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

Definice funkcí a procedur Mnoho operací provozujeme opakovaně, proto je hloupé programovat je při každém použití znovu. Procedury a funkce představují možnost je naprogramovat jednou a použít mnohokrát.

Definice funkcí a procedur Mnoho operací provozujeme opakovaně, proto je hloupé programovat je při každém použití znovu. Procedury a funkce představují možnost je naprogramovat jednou a použít mnohokrát. Procedura: Součást programu schopná přijmout parametry a zpracovat.

Definice funkcí a procedur Mnoho operací provozujeme opakovaně, proto je hloupé programovat je při každém použití znovu. Procedury a funkce představují možnost je naprogramovat jednou a použít mnohokrát. Procedura: Součást programu schopná přijmout parametry a zpracovat. Funkce: Součást programu schopná přijmout parametry, zpracovat a vrátit výsledek.

Definice funkcí a procedur Mnoho operací provozujeme opakovaně, proto je hloupé programovat je při každém použití znovu. Procedury a funkce představují možnost je naprogramovat jednou a použít mnohokrát. Procedura: Součást programu schopná přijmout parametry a zpracovat. Funkce: Součást programu schopná přijmout parametry, zpracovat a vrátit výsledek. Příklady: Přejdi ulici, vypiš hlášení; dojeď vlakem někam, spočítej faktoriál.

Definice funkcí function nazev(argument :typ;...):navratovy typ Zahajujeme klíčovým slovem function, následuje název funkce,

Definice funkcí function nazev(argument :typ;...):navratovy typ Zahajujeme klíčovým slovem function, následuje název funkce, argumenty (parametry) zapisujeme do kulatých závorek jako bychom definovali proměnné.

Definice funkcí function nazev(argument :typ;...):navratovy typ Zahajujeme klíčovým slovem function, následuje název funkce, argumenty (parametry) zapisujeme do kulatých závorek jako bychom definovali proměnné. Jednotlivé parametry oddělujeme středníkem,

Definice funkcí function nazev(argument :typ;...):navratovy typ Zahajujeme klíčovým slovem function, následuje název funkce, argumenty (parametry) zapisujeme do kulatých závorek jako bychom definovali proměnné. Jednotlivé parametry oddělujeme středníkem, za dvojtečkou pak uvedeme návratový typ dotyčné funkce.

Definice funkcí function nazev(argument :typ;...):navratovy typ Zahajujeme klíčovým slovem function, následuje název funkce, argumenty (parametry) zapisujeme do kulatých závorek jako bychom definovali proměnné. Jednotlivé parametry oddělujeme středníkem, za dvojtečkou pak uvedeme návratový typ dotyčné funkce. Návratová hodnota se přiřadí do proměnné jmenující se stejně jako příslušná funkce.

Příklad function secti(a:integer; b:integer):integer; secti:=a+b; end;

Příklad program x; var a:integer; function secti(a:integer; b:integer):integer; secti:=a+b; end; end. a:=secti(5,10); writeln(a);

Scope resolution Kromě globálních proměnných vznikají i proměnné lokální. Příklad: function secti(a:integer; b:integer):integer; secti:=a+b; a:=0; end; x:=5; y:=10; c:=secti(x,y); writeln(x); end.

Scope resolution Kromě globálních proměnných vznikají i proměnné lokální. Pokud je konflikt v názvu globální a lokální proměnné, platí ta lokální, jako v minulém příkladu. Příklad: function secti(a:integer; b:integer):integer; secti:=a+b; a:=0; end; x:=5; y:=10; c:=secti(x,y); writeln(x); end.

Scope resolution Kromě globálních proměnných vznikají i proměnné lokální. Pokud je konflikt v názvu globální a lokální proměnné, platí ta lokální, jako v minulém příkladu. Proměnné jsou předávány hodnotou, tedy hodnota proměnné je okopírována. Příklad: function secti(a:integer; b:integer):integer; secti:=a+b; a:=0; end; x:=5; y:=10; c:=secti(x,y); writeln(x); end.

Předání argumentu referencí (odkazem) Co když naopak chceme obsah předávané proměnné ve funkci změnit? Použijeme při popisu argumentu klíčové slovo var: function f(var a:integer; b:integer):integer; a:=5; b:=5; end;... x:=0; y:=0; a:=f(x,y); writeln(x); writeln(y);... Výsledek: 5 a 0; není-li referencí předána proměnná chyba!

Funkce bez parametrů Má smysl definovat funkci bez parametrů (kupř. chceme-li načítat). V tom případě můžeme vynechat kulaté závorky jak při definici, tak při volání: function x:integer; x:=10; end;... a:=x;...

Procedury Procedury jsou funkce, které nevracejí hodnotu. procedure jmeno(argumenty);... jmeno(argumenty);... Příklad: procedure vyp(a:integer;b:integer); writeln(a); writeln(b); {Vypsali jsme argumenty} end;... vyp(5,10);...

Vnořené funkce a procedury Proceduru či funkci lze definovat i uvnitř jiné procedury nebo funkce: procedure f(a:integer); procedure g(b:integer); writeln( Proc. g v procedure f s par-em,b); end; writeln( Procedura f s parametrem,a); g(2);{volame vnorenou proc. g} end;

Scope resolution Procedura/funkce vidí jen funkce (procedury) vnořené přímo do sebe (ne do svých vnořených funkcí/procedur)! Vnořené funkce vnášejí další zmatek do významu proměnných (a dokonce procedur a funkcí). Identifikátor má takový význam, jaký je v danou chvíli nejlokálnější.

Příklad procedure f(h:integer); procedure g(b:integer); procedure h(c:integer); writeln( Procedura h s par.,c); end; writeln( Procedura g s parametrem,b); h(5); end; writeln( Funkce f s parametrem,h); g(3); f(5); {zatim OK, ale h(4) udela chybu!} end;

Rekurze Může mít dobrý smysl volat z funkce sebe sama. Této metodě říkáme rekurze. Rekurze není nic jiného, než vtipně pojmenovaná indukce! Příklady: Úředníci na úřadech, Faktoriál, Caesarův kód...

Úředníci na úřadech Člověk chce nechat provést úřední výkon.

Úředníci na úřadech Člověk chce nechat provést úřední výkon. Úředník požaduje vyplnění papírů vyžadující návštěvy dalších úřadů.

Úředníci na úřadech Člověk chce nechat provést úřední výkon. Úředník požaduje vyplnění papírů vyžadující návštěvy dalších úřadů. Řešení: procedure vypln(musime vyplnit:seznam papiru); var x:seznam papiru; for papir in musime vyplnit do x:=zeptej se urednika(papir); if nonempty(x) then vypln(x); end;

Faktoriál n! = 1 2... n

Faktoriál n! = 1 2... n Jak tuto funkci naprogramovat?

Faktoriál n! = 1 2... n Jak tuto funkci naprogramovat? Cyklem: fakt:=1; for i:=1 to n do fakt:=fakt*i;

Faktoriál n! = 1 2... n Jak tuto funkci naprogramovat? Cyklem: fakt:=1; for i:=1 to n do fakt:=fakt*i; nebo rekurzí.

Faktoriál rekurzí: function faktorial(a:integer):integer; if a<2 then faktorial:=1 else faktorial:=a*faktorial(a-1); end; Jaká je složitost výpočtu funkce faktoriál?

Přednášející jde do posluchárny Přednášející při cestě po posluchárny na schodech vždycky buďto šlápne na následující schod, nebo jeden schod překročí. Kolika způsoby může vylézt do posluchárny F1? (schody nepočítejte, jejich počet odhadněte) Nápady?

Přednášející do posluchárny řešení Vzniká rekurence f n = f n 1 + f n 2.

Přednášející do posluchárny řešení Vzniká rekurence f n = f n 1 + f n 2. Rekurence není nic jiného, než matematický zápis rekurze.

Přednášející do posluchárny řešení Vzniká rekurence f n = f n 1 + f n 2. Rekurence není nic jiného, než matematický zápis rekurze. Řešení: function schody(a:integer):integer; if a=1 then schody=1 else if a=2 then schody=2 else schody:=schody(a-1)+schody(a-2); end;

Přednášející do posluchárny řešení Vzniká rekurence f n = f n 1 + f n 2. Rekurence není nic jiného, než matematický zápis rekurze. Řešení: function schody(a:integer):integer; if a=1 then schody=1 else if a=2 then schody=2 else schody:=schody(a-1)+schody(a-2); end; Jaký je problém?

Přednášející do posluchárny řešení Vzniká rekurence f n = f n 1 + f n 2. Rekurence není nic jiného, než matematický zápis rekurze. Řešení: function schody(a:integer):integer; if a=1 then schody=1 else if a=2 then schody=2 else schody:=schody(a-1)+schody(a-2); end; Jaký je problém? Ano, příšerná složitost.