Funkcionální programování

Rozměr: px
Začít zobrazení ze stránky:

Download "Funkcionální programování"

Transkript

1 Funkcionální programování Scheme ale i trochu C#, Boo, Perlu, Smalltalku apod. Jiří Fišer MMVIII

2 Funkcionální paradigma funkcionální paradigma je jedním z klasických paradigmat programování (podobně jako paradigma imperativní nebo logické) je založeno na striktním matematickém základě (tzv. lambda kalkulu) čistě funkcionální jazyky resp. jazyky primárně funkcionální nejsou příliš rozšířené (první jsou přibližně v druhé desítce nejužívanějších jazyků) funkcionální rysy se však vyskytují u většiny moderních jazyků (které dnes typicky podporují více paradigmat)

3 Základní rysy (postačující) jediné výkonné entity programu jsou funkce (= uzavřené rutiny vracející nově vytvořené hodnoty) funkce nemají žádné postranní efekty (tj. mimo jiné vždy platí f(x) = f(x), při každém volání funkce f) hodnoty nejsou modifikovatelné a program nelze popsat jako posloupnost paměťových stavů (tj. neexistuje klasické přiřazení). program není lineární, ale je prováděn jako strom vyhodnocení, který navíc může být vyhodnocen i lenivě (až když je skutečně potřeba)

4 Další typické rysy funkce jsou plnohodnotné (first-class) hodnoty, tj. lze s nimi pracovat v zásadě stejně jako s čísly, řetězci apod. (samozřejmě s jinými operacemi např. skládáním funkcí). Není např. nutné odlišovat funkci a ukazatel na funkce (delegát v názvosloví.net). velkou roli hraje rekurze (nahrazuje cykly, jejichž běžná implementace vyžaduje změnu stavu) velkou roli hrají tzv. funkce vyšších řádů (tj. zjednodušeně funkce nad funkcemi)

5 Proč se učit funkcionální jazyky? získáte jiný pohled na programování (což Vám umožní podívat se na běžné jazyky zvnějšku) uvidíte elegantní způsob řešení některých algoritmů a programových obratů většinu lze navíc přímo použít i v některých moderních OOP jazycích (hlavně C# a Pythonu) navíc je dosti pravděpodobné, že se s některým z funkcionálních jazyků setkáte v dalším studiu nebo dokonce i v praxi.

6 Scheme jazyk Scheme je jedním z nejrozšířenějších dialektů jazyka Lisp, což je nejstarší a stále v praxi nejrozšířenější funkcionální jazyk. jazyk Scheme je relativně jednoduchý (v oblasti syntaxe dokonce minimalistický), kvalitně navržený a snadno popsatelný (je formálně definován a standardizován) Lisp divergence sjednocení Common Lisp Scheme

7 Hello, world program "hello, World" lze sice napsat i ve Scheme, není však pro tento jazyk příliš typický: (display "Hello, world") typičtější program (a navíc čistě funkcionální) (define delka (lambda (seznam) (cond ((null? seznam) 0) (else (+ 1 (delka (cdr seznam)))) ) ) )

8 Syntaxe syntaxe jazyka Scheme je (stejně jako u Lispu) je identická se syntaxí dat, které program zpracovává podobně jako např. u strojového kódu (avšak na mnohem vyšší úrovni abstrakce) platí: data se mohou stát programem (mohou být vykonávány) a naopak program může být snadno zpracováván jako data

9 Atomy základní syntaktickou jednotkou jsou atomy (z hlediska syntaxe nedělitelné) symboly (posloupnost alfanumerických znaků, včetně některých speciálních:! $ % & * + -. / : < = ^ _ ~). Symbols are objects whose usefulness rests on the fact that two symbols are identical (in the sense of eqv?) if and only if their names are spelled the same way. číselné literály například: 2, -3, 2.5, 2.5e3, 2/3, 2+3i, #b10010, #x10fe

10 Atomy II řetězcové literály (v uvozovkách) znakové literály (#\a, #\space, #\newline) boolovské literály (#t, #f) prázdný seznam - označovaný literálem () vektory a porty (pozornost jim budeme věnovat později)

11 Tečka-dvojice z atomů lze budovat složitější struktury pomocí tzv. tečky-dvojice [dotted-pair], což je uspořádaná dvojice výrazů ( atom. atom ) např. ( 2. "dvě"), ( single. #f) tečka-dvojice lze samozřejmě rekurzivně vnořovat a tak lze representovat binární stromovou strukturu ((2. 3). (5. (6. 8)))

12 Seznam pomocí rekurzivních tečka-dvojic jsou ve Scheme representovány i seznamy seznam tvořený prvky p 1,p 2,... p n lze zapsat (p 1. (p 2. (... (p n. () )... ))) resp. i jednodušeji: (p 1 p 2... p n ) p 1 p 2 p n ()

13 Příklad seznamu příklad víceúrovňového seznamu ( (a b) c (c) () ) a c b () = (pomocí tečka dvojic) ((a. (b. ())). (c. ((c. ()). ((). ())))) c () () ()

14 Shrnutí syntaxe data zpracovávaná jazykem Scheme mají podobu tzv. s-výrazů [symbolic expression] s-výraz je: atom (symbol nebo literál) tečka-dvojice = uspořádaná dvojice s-výrazů, která může být zapsána jako: přímý (tečkový) zápis (s-výraz. s-výraz) seznamový zápis [jen struktury, jejichž listový prvek nejvíce vpravo je prázdný seznam] smíšený zápis (např. (2 3. 5)), málo užíván (je však někdy vidět jako chybný výstup)

15 Vyhodnotitelné s-výrazy určitá podmnožina s-výrazů je vyhodnotitelná jako program (tyto s-výrazy jsou označovány jako e-výrazy nebo jako form) při vyhodnocení se kromě syntaxe projevuje i sémantika (která, je odlišná od elementární sémantiky s-výrazů) (+ 2 3) základní sémantika: seznam o třech prvcích (z nichž první je symbol, další dva číselné literály) eval-sémantika: sečtení dvou čísel (výsledek je hodnota 5). První prvek seznamu je symbol vázaný na funkci sčitání, další dva jsou parametry)

16 Vázání pro vyhodnocovací sémantiku (eval-sémantiku) je typické, že symboly neoznačují sami sebe, ale hodnoty které jsou na ně vázány (symbol je pouze referent jiné hodnoty) x 10 hobit Frodo + stroj. kód pro sčítání ostatní typy atomů (literály) v zásadě označuji sami sebe, resp. (přesněji) odkazují na na pevně vázanou hodnotu (literál je totiž také druhem symbolu a nikoliv přímo hodnota). Vazbu literálu není nutné definovat, nelze ji změnit (symbol 3 nemůže odkazovat na hodnotu 2), ale více různých symbolů může odkazovat stejnou hodnotu např a 2e2)

17 Prostředí jako prostředí [environment] je ve Scheme označována množina aktuálních vazeb (užívá se i označení (aktuální) svět [world] po spuštění interpretu nebo překladače již existuje globální prostředí, v němž jsou navázány základní funkce na standardní symboly (např. základní aritmetické operace) vazby v globálním prostředí jsou určeny standardem jazyka (a tvoří tak nejmenší společný základ všech programů ve Scheme.

18 Vyhodnotitelné výrazy I vyhodnotitelné atomy nejjednodušší vyhodnotitelné výrazy, vyhodnotí se na hodnotu spojenou se symbolem (= musí být předem navázán) resp. s literálem příklad: 2, 2+3i, +, sin volání funkce syntakticky se jedná o seznam, v němž je prvním prvkem výraz, jenž je vyhodnocen na funkci (typicky symbol vázaný na funkci), další prvky jsou případné parametry (musí to být vyhodnotitelné výrazy). Vyhodnocují se náhodném pořadí (resp. paralelně) příklad: (sin 2), (+ 2 3), (= (sin 3) (cos (+ 2 3))

19 Vyhodnotitelné výrazy II speciální formy syntakticky se jedná opět o seznamy první prvek určuje sémantiku speciální formy (má podobný význam jako symbol funkce) ostatní parametry se vyhodnocují podle speciálních pravidel (některé nemusí být vůbec vyhodnoceny a jsou interpretována jako data, resp. jsou vyhodnoceny v přesně definovaném pořadí) některé jsou vestavěné, jiné jsou definovány pomocí tzv. maker. příklad: (if (< a b) 0 1), (begin (display a) (display b))

20 Základní speciální formy define = váže symbol na hodnotu (mění prostředí) (define x 2), naváže hodnotu symbolu 2 (paměťová representace dvojky) na symbol x první parametr (zde x) není vyhodnocen (je interpretován jako datový s-výraz) druhý parametr vyhodnocen je (zde 2) quote = nevyhodnocuje svůj první operand (umožňuje tak používat symboly a tečka-dvojice jako data uvnitř programů), srovnej podobné využití uvozovek v textu (např. slovo "je" je sloveso) (quote a), (quote (a b)), (quote 2) [zbytečné] lze zkrátit na 'a, '(a b), '2 (zbytečné)

21 Funkce nad tečka-dvojicemi car (první část dvojice): cons -> * (car '(a. b) ) a cdr (druhá část dvojice): cons -> * (car '(a. b) ) b cons (spojí dva s-výrazy do tečka dvojice) (cons 'a 'b) (a b) názvy funkcí jsou klasické, převzaté z Lispu a souvisí s instrukčním souborem prvé lispovské platformy. angl. výslovnost je / ˈkɑ r/, resp. / ˈkʌdə r/ or / ˈkʊdər/

22 Funkce nad seznamy nad seznamy se používají stejné funkce jako nad tečkadvojicemi, je však nutné si zapamatovat jejich speciální (odvozenou) sémantiku car = první člen seznamu (head) (car '(a b)) a cdr = seznam bez prvního prvku (zbytkový seznam, tail) (cdr '(a b)) (b) nikoliv pouhé b!! (car (cdr '(a b)) b (druhý člen), lze krátit na (cadr '(a b)) cons = přidání nového prvku zleva (na první pozici) (cons 'a '(b c)) (a b c) přidání prvku zprava (na konec) není pomocí cons možné (cons '(a b) 'c) ((a b). c) což není (a b c)!!!

23 Seznamové operace (strom) základní seznamové operace lze snadno znázornit na stromové representaci daného seznamu (důležité). (cadr list) (cdr list) (car list) (caar list) a b () (cdar list) (cdaddr list) c (cddr list) c () () ()

24 Funkce nad čísly většina funkcí nad čísly je vázána na běžně používané symboly. Pozor však na prefixovou notaci (volání začíná závorkou a symbolem funkce). Je to nezvyklé, ale nemusíte si pamatovat žádné priority. (sin (+ 2 x (* 3 y (sqrt z)))) použít lze i relační operátory (=, <, >, >=), zbytek pod dělení (modulo, remainder), běžné transcendentální funkce, konverze (number->string, string->number), apod. Viz Revised^5 Report 6.2.

25 Predikáty jako predikáty se označují funkce vracející logické hodnoty. Pro predikáty se používají symboly zakončené otazníkem (úzus) predikáty shody eq? = porovnání symbolů (eq? 'a 'a) #t, (eq? e2) #f (!, obecně nedef.) eqv? = hodnotové porovnání (mělké, u seznamů umístění) (eq? e2) #t (eqv? '(1 2) '(1 2)) #f (!) ale (define x '(1 2)) (eqv? x x) #t equal? = hodnotové porovnání (hluboké) (equal? '(1 2) '(1 2)) #t

26 Klasifikační predikáty klasifikace podle datového typu hodnoty number?, complex?, real?, string?, symbol?, boolean?, pair?, char?, procedure? detailnější klasifikace null? (prázdný seznam), list? (libovolný seznam), even? (sudé číslo), zero? (nula), char-alphabetic?, apod.

27 Lambda forma lambda speciální forma (λ-forma,nepřesně lambda funkce) umožňuje vytvářet hodnoty typu funkce matematická definice funkce jméno funkce vázané proměnné (vazba je lokální) f(x, y) = x + y 2 poziční pojmenované parametry (důležitá je pozice) při definici funkce jako hodnoty není důležité jméno nově vytvářené funkce (= funkce je anonymní) (lambda (x, y) (+ x (* y y)) funkce (shodná s f)

28 Pojmenované funkce lambda formu lze využít jako první prvek v zápisu volání funkce: ((lambda (x) (* x x)) 2) 4 pokud je však funkce využita vícekrát je lepší ji navázat na (volný) symbol: (define sqr (lambda (x) (* x x))) (sqr 2) tento zápis se používá ve Scheme velmi často (programy a knihovny jsou tvořen definicemi funkcí) a proto pro něj existuje syntaktická zkratka: (define (sqr x) (* x x))

29 Lokální prostředí při vyhodnocování těla lambda formy (ke které dochází, až při volání příslušné funkce) jsou e-výrazy vykonávány v tzv. lokálním prostředí lokální prostředí = prostředí v lexikálním rozsahu [scope] definice funkce + vazby parametrů důležité je, že lokální prostředí je dáno prostředím v lexikálním rozsahu definice (lexikální vazba) nikoliv v okamžiku volání funkce (dynamická vazba) (define x 'global) (define printx (lambda () (display x))) (define testwithx (lambda (x) (printx))) (define x 'new-global) (testwithx 'local) new-global (!!!)

30 Lexikální vers. dynamická vazba lexikální vazba je typická pro imperativní (algolské) jazyky (např. C, C# atd.). Je navíc přehlednější pro programátory (kolize identifikátorů jsou méně časté) na druhou stranu komplikuje představu (a implementaci) vazby. Symbol může mít v jednom okamžiku více navázaných hodnot (pro každý lexikální rozsah nejvýše jednu) dynamická vazba byla typická pro původní Lisp, dnes je podporována jen jako specializovaná varianta v několika málo jazycích (Common Lisp, Perl)

31 Dynamická vazba v Perlu $x = "global"; sub printx () { print $x; } sub testwithx ($) { local $x = shift; #prevzeti parametru printx; } $x = "new-global"; testwithx("local"); print "\n"; print $x; #pro kontrolu (globalni x nezmeneno)

32 Uzávěr použití lexikální vazby však vede k zajímavému efektu, který lze nejsnadněji ilustrovat u funkcí vracející nově vytvořenou (anonymní) funkci (define novyvypisovac (lambda (text) (lambda () (display text));vraci anon. fci )) (define pozdrav (novyvypisovac "ahoj")) (pozdrav) vypíše "ahoj" Nově vytvořená (a následně pojmenovaná) funkce v sobě totiž uzavírá prostředí lexikálního rozsahu, v němž byla definována (které by zde jako lokální zaniklo tj. byly by uvolněny i vázané hodnoty parametrů ). Funkce + prostředí lexikálního rozsahu = uzávěr [closure]

33 Uzávěr II uzávěry vznikají v případě, že tělo funkce má tzv. volné symboly (tj. symboly na které nejsou vázány parametry lambda formy). Užitečné jsou především uzávěry, vzniklé z lokálního prostředí (umožňuji totiž generovat uzávěry s různými vazbami na požádání) uzávěry hrají důležitou roli ve funkcionálním programování, neboť umožňují vytvářet funkce spojené se svými daty (ty se pak nemusí předávat jako parametry). V zásadě se jedná o OOP objekt naruby (u něj jsou naopak data spojena s metodamifunkcemi)

34 Uzávěry v Boo většina moderních jazyků, podporujících funkce jako first-class hodnoty, podporuje i uzávěry (např. Python, Boo, Perl, Smalltalk, Rubby [zde jsou zvlášť důležité]). Zápis v Boo: def novyvypisovac (text as string): return { print text; } pozdrav = novyvypisovac("ahoj") pozdrav() Mechanismus je tedy stejný jako u Scheme (syntaxe je však převzata z Pythonu)

35 Uzávěry v C# některé další jazyky podporují uzávěry omezeně (pouze pro speciální třídu vykonávatelných entit). Například v C# jsou uzávěry podporovány pouze u anonymních delegátů (od verze 2.0, verze 3.0 přináší jednodušší syntaxi) do (uzavřeného) lexikálního prostředí zde kromě lokálních proměnných patří i objekt this (je-li uzávěr vytvořen v instanční metodě)

36 C# - ukázka using System; delegate void Action(); class Program { } static Action NovyVypisovac(string text) { return delegate () {Console.WriteLine(text);}; } public static void Main() { } Action pozdrav = NovyVypisovac("ahoj"); pozdrav();

37 Uzávěry ve Smalltalku v objektovém jazyce Smalltaku, hrají anonymní funkce a uzávěry centrální roli (nazývají se zde bloky) pomocí uzávěrů jsou implementovány i tak základní konstrukce jako podmíněné vykonávaní nebo cykly (částečně se tomu blíží jazyk Ruby, který však podporuje i běžné procedurální konstrukce) num > 5 iftrue: [num:=1] iffalse: [num:=num+1]. oba bloky jsou parametry metody iftrue:iffalse, která je volána na boolovský objekt získaný vyhodnocením (num>5). Vykonán je pouze jeden z nich. 1 to: 5 do: [num transcript print:num] zde je adresátem hlavní metody do: objekt rozsahu (1 to: 5)

38 Uzávěry v C++ v jazyce C++ nejsou (prozatím) uzávěry podporovány, lze je však funkčně nahradit pomocí objektů (nesoucích uzavřené informace) implementujících operátor volání funkce (tj. i syntakticky napodobují uzávěry) v nově navrhovaném standardu jazyka (C++ 0X), jsou však uzávěry přímo podporovány (v několika verzích). (pojetí je však poněkud netradiční, ale odpovídá imperativnímu charakteru jazyka)

39 Currying standardní zápis lambda funkce např. (lambda (x, y) (+ x (* y y)) (zde s uvedením dvou pozičních parametrů) lze přepsat do tvaru (např.): (lambda (x) (lambda (y) (+ x (* y y)))) jenž používá jen funkce o jednom parametru a odpovídá tak přímo zápisu λ-kalkulu: λx. λy. x + y 2 sémantika: vnější funkce (s parametrem x) je aplikována na první parametr, a vrací další funkci-uzávěr (s parametrem y), která je následně aplikována na druhý parametr. Převod funkce s více parametry na funkce s jedním parametrem se nazývá currying. Má velký význam teoretický, a je plně podporován v Haskellu.

40 Podmínky I Ve funkcionálních jazycích existují konstrukce pro podmíněné vyhodnocování (obdoba příkazu if) klasická (lispovská) speciální forma pro podmíněné výrazy je cond (a je opravdu speciální) (cond ) (p 1 e 1 ) (p 2 e 2 )... (p n e n ) (else e n+1 ) Nejdříve jsou vyhodnocovány postupně výrazy (podmínky) p 1 až p n. Pokud je podmínka p i pravdivá pak je vyhodnocen výraz e i a vyhodnocení cond končí (hodnotou cond je hodnota e i ) (= vykoná se pouze první větev s pravdivou podmínkou). Symbol else je (pouze zde) synonymem pro #t, to jest poslední (nepovinná) podmínka je splněna vždy (není-li pravdivá žádná z předchozích podmínek e n+1 se vyhodnotí vždy.

41 Podmínky II (define (factorial n) (cond ( ( = n 1) 1) ( else (factorial (- n 1) ) ) Kromě cond(ition) existuje i speciální forma if, která odpovídá ternárnímu operátoru jazyka C (Java, C#) (if podmínka true-výraz false-výraz) nejdříve se vyhodnotí podmínka, podle výsledků pak jeden z následujících výrazů. Forma if je však méně pružná a není ani výrazně přehlednější ( nebudu ji užívat)

42 Rekurze rekurze hraje ve funkcionálním programování klíčovou roli, neboť kromě běžných rekurentně orientovaných algoritmů se rekurze používá jako náhrada cyklů velmi významná je především tzv. tail-rekurze, kdy je poslední vyhodnocovanou operací funkce rekurzivní volání, tj. na výsledek rekurzivně volané funkce se již neaplikuje žádná další operace (výše uvedený faktoriál je tohoto typu) Tail-rekurzi lze v imperativním jazyce snadno (ručně) přepsat na iteraci, v funkcionálním jazyce to za Vás udělá interpret či kompilátor. Paměťová náročnost se sníží z O(n) na O(1).

43 Rekurze II (define (spoj s1 s2) (cond ((null? s1) s2) (else (cons (car s1) (spoj (cdr s1) s2))) ) ) Tento rekurzivní algoritmus není tail-rekurze (na výsledek je volána operace cons). Je však typický, neboť rozkládá operaci na dvě fáze: 1) nejdříve se při vnořování rekurze (tj. volání dalších rekurzivních instancí funkce) rozkládá (pomocí car,cdr původní seznam, zde s1). Rekurzivní volání se volá vždy na zbytkový tj. menší podseznam) 2) při výstupu (vynořování), tj. návratu z rekurzivních volání se konstruuje nový seznam

44 Rekurze III graf (rozpis) volání (spoj '(a b) '(c)) ('a. (spoj '(b) '(c)) ) ('a. ('b. (spoj '() '(c)) ) ) ('a. ('b. '(c) ) ) ('a. '(b c) ) '(a b c) vnořování / rozklad substituce podle koncové podmínky vynořování / konstrukce nového seznamu

45 Speciální forma and a or funkce and resp. or by mohly být definovány jako běžné funkce nad alespoň jednou logickou hodnotou. pro efektivnější vykonávání se však jedná o speciální formy se zkráceným vyhodnocováním (u neparalelní implementace s postupným vyhodnocováním) (and p1 p2... pn) výrazy p i se vyhodnocují postupně. Je-li nějaký nepravdivý pak se vyhodnocení ukončí a funkce vrací #f, pokud jsou všechny pravdivé pak #t. Speciální forma or je definována obdobně.

46 Příklad (and) (define test-leaf (lambda (tree predicate) (cond ((pair? tree) (and (test-leaf (car tree) predicate) (test-leaf (cdr tree) predicate) )) ) ) ) ((null? tree) #t) (else (predicate tree) Funkce zjišťuje, zda všechny (listové) prvky stromu tečka dvojic splňují daný predikát.nezohledňuje přitom prázdné seznamy, což umožňuje použití funkce i pro (obecně víceúrovňové) seznamy. Predikát musí mít aritu 1.

47 Funkcionály funkcionály resp. funkce vyšších řádů jsou funkce nad funkcemi (= funkce, jejichž parametry jsou další funkce) příkladem funkcionálu je i výše uvedená funkce testleaf (lze ji chápat jako funkci nad predikátem) nejobecnějším běžně používaným funkcionálem je skládání funkcí (samozřejmě obě aritou 1): (define (compose g f) (lambda (x) (g (f x))) )

48 Funkcionály nad seznamy důležitou roli v praktickém programování ve Scheme hrají funkcionály pracující se seznamy. Tyto funkcionály umožňují stručnější zápis rozsáhlé třídy algoritmů. Obecně je lze používat pro různé druhy iterací, čímž se lze vyhnout explicitnímu použití rekurze (ta není eliminována, ale je skryta v kódu funkcionálů) mezi nejčastěji používané seznamové funkcionály patří: map, zip, fold, filtr.

49 Map nejdůležitějším seznamovým funkcionálem je map (zkratka z anglického mapping) funkce (map f list), vytváří nový seznam, který je tvořen prvky seznamu list, na něž byla aplikována unární funkce f. funkce map může být také označována jako transform (C++), collect (Smalltalk), resp. Select (LINQ) x 1 x 2 x 3 x 4 x 5 f f f f f f(x 1 ) f(x 2 ) f(x 3 ) f(x 4 ) f(x 5 )

50 Zip funkcionál (zip f list1 list2) vrací nový seznam, který vznikne aplikováním binární funkce f na (pozičně) si odpovídající prvky seznamu list1 a list. typické využití je například pro sčítaní dvou vektorů (číselných seznamů): (zip + v1 v2) x 1 x 2 x 3 x 4 x 5 f(x 1, y 1 ) f(x 2, y 2 ) f(x 3, y 3 ) f(x 4, y 4 ) f(x 5, y 5 ) y 1 y 2 y 3 y 4 y 5

51 Foldr funkcionál (foldr f seznam) přejímá binární funkci a seznam. Převede seznam na jedinou hodnotu, tím, že aplikuje binární funkci f mezi prvky seznamu. Lze jej přesněji definovat rekurzivně: (define (foldr f list) (cond ((jednoprvkovy? list) (car list)) (else (f (car list) (foldr f (cdr list)))) ) )) foldr[+, (1 2 3)] = 1 + foldr[+, (2 3)] = = 1 + (2 + foldr[+,(3)]) = (1 + (2 + (3)) = 6 = suma[(1,2,3)] foldr = right fold = fold from right = sviň (slož) zprava

52 Foldr II funkci foldr lze zobecnit přidáním dalšího parametru počáteční hodnoty: (foldr f initval list) pokud je tato hodnota zadána, pak se první akumulační operace provede mezi poslední hodnotou seznamu a počáteční hodnotou (foldr f p (x 1 x 2 x 3 x 4 )) f x 1 x 2 x 3 x 4 p zobecnění zjednoduší implementaci, vždy lze nalézt ekvivalentní volání (např. (foldr + 0 seznam) pro sumu), ale především rozšiřuje možnosti použití: (foldr (lambda (p s) (cons (cons p s) '())) '() '(a b c d)) f

53 Foldl sesterskou funkcí funkce foldr je funkce foldl (left fold), která při výpočtu postupuje z opačné strany (zleva). Nejdříve aplikuje akumulační funkci na počáteční hodnotu a první prvek hodnotu, potom na mezivýsledek a druhý prvek, atd. (foldl + 0 '(1 2 3)) (((0 + 1) + 2) + 3) pro komutativní operace je foldl ekvivalentní funkci foldr (zde doporučuji používat foldl), jiná situace je u nekomutativních operací: (foldl (lambda (list item) (cons item list)) '() '(a b c))

54 Fold v programovacích jazycích pro skupinu funkcí fold používají se i alternativní názvy: reduce (Python, JavaScript), accumulate (C++), Aggregate (LINQ), resp. inject (Rubby, Smalltalk? ). Většinou se jedná o levou variantu a ve většině jazyků jsou k dispozici i ve tvaru s počáteční hodnotou. ve Scheme jsou v základní knihovně dispozici až od šesté revize (R 6 RS) pod jmény fold-right a fold-left (s počáteční hodnotou)

55 Filtr funkcionál (filtr list predikát), vytváří nový seznam, v němž jsou jen prvky, pro něž je (unární) predikát pravdivý. (filtr number? '(a b 2 c)) (2) kromě jména filter (Haskell, Scheme R6 RS, Python, JavaScript), se používají i varianty na remove-if (C++, CLisp), grep (Perl) resp. Where (LINQ)

56 Praktický příklad na funkcionály (define (prumer s) ) (foldr / 1 (foldr (lambda (x suma) (list (+ x (car suma)) (+ 1 (cadr suma)))) '(0 0) s)) výpočet pomocí: (/ (foldl + 0 s) (length s)) je také možný, vyžaduje však dvojí procházení seznamu (což zde nevadí)

57 Datové struktury I v praktických programech se často vyskytuje požadavek na representaci strukturovaných údajů. Ty lze samozřejmě representovat i ve Scheme: seznamové (list-like) representace údaj je representován jako (nehomogenní) seznam přímých dat, význam údajů je dán pouze pozicí ("Frodo Pytlík" hobit #t 50) slovníková (directory-like) representace údaj je representován jako seznam dvojic: identifikátor, hodnota (na pořadí nezáleží) ((jmeno. "Smíšek") (druh. hobit) (drzitel-prstenu. #f) (vek. 30))

58 Datové struktury II explicitní využívání identifikátorů je vhodnější pro rozsáhlejší struktury (odpovídá slovníkové implementaci tříd v jazycích jako je JavaScript, Perl, Python) pro přístup k seznamové representaci je možno použít indexaci resp. cad{0,3}r funkce pro přístup ke slovníkové representaci je nutno použít uživatelské funkce (define (field key dict) (cdar (filtr (lambda (pair) (eq? (car pair) key)) dict)) )

59 Funkcionály nad strukturami pro zpracování seznamů struktur je vhodné používat funkcionály úkol: nalézt průměrný věk držitelů prstenu v seznamu postav Pána prstenů (se slovníkovou representací) (define (field-getter key) (lambda (dict) (field key dict)) ) (prumer (map (field-getter 'vek) (filtr (field-getter 'drzitel-prstenu) postavy ) ) ) funkce field-getter vrací uzávěr pro získaní pole se seznamu.

60 Funkcionály v Boo funkcionály lze použít i v Boo. Příklad ukazuje výpočet hodnoty polynomum jenž je založen na Hornerově schématu (a užívá pomocného uzávěru) def horner(x as double) as BinOp: return {acc as double, next as double return x*acc + next} reducewith(horner(2), 2, 3, 4) //foldr nebo foldl kde reducewith je uživatelská funkce, specializovaná pro zipovací funkce typu (double, double) double [statické typování znevýhodňuje použití obecných funcionálů]. callable BinOp(x as double, y as double) as double def reducewith(op as BinOp, *xs as (double)) as double

61 Funkcionály v C# (Linq) nový mechanismus Linq přináší sílu funkcionálů i do jazyka C# (a to přímo na úrovni jeho syntaxe) var result = postavy.where(p => p.drzitelprstenu).select(p => p.vek).average(); OOP syntax var result = (from p in postavy query comprehension syntax (SQL like) where p.drzitelprsten select p.vek).average();

62 Funkcionály v C# (II) funkcionály lze v C# aplikují nad libovolným typem podporujícím generické rozhraní: IEnumerable<T> vykonávání je odložené (deffered) resp. lenivé (lazy), tj. další prvky jsou z enumerátoru (iterátoru) převzaty až v okamžiku, kdy jsou potřeba některé funkcionály tak lze volat i na nekonečné (neohraničené) iterátory (viz později Haskell) integers.first(x => DokonaleCislo(x)) -- integers může být neohraničený iterátor

63 Scheme jako imperativní jazyk Scheme není ve skutečnosti čistě funkcionální jazyk, ale podporuje i některé imperativní konstrukce: funkce s vedlejšími efekty (typicky IO funkce) speciální formu begin (posloupnost postupně vykonávaných funkcí) resp. podobné rozšíření formy lambda. přiřazení set! (mění se obsah paměťového místa ne vazba) cyklus do (se změnou stavu), for-each (podobně jako map ale pro postranní efekty) přímé modifikace tečka dvojic (set-car!, set-cdr!)

64 Scheme jako imperativní jazyk II imperativní konstrukce (především ty tvrdé (hard), označené v identifikátoru vykřičníkem jsou sice přípustné, ale podobně jako goto ve strukturovaných jazycích mohou zcela eliminovat výhody funkcionálního zápisu. na druhou stranu mohou program podstatně zrychlit a zmenšit jeho paměťovou náročnost (významné je např. menší zatížení garbage kolektoru)

65 Pokračování (continuation) pokračování je hodnota zapouzdřující aktuální stav výpočtu (prostředí + rámce vykonávaných funkcí). pokračování do hodnoty zabalená budoucnost umožňuje ve Scheme implementovat skoky (nebezpečné), výjimky (užitečné), resp. dokonce korutiny (povznášející) pokračování jsou ve Scheme dostupná pomocí funkce call-with-current-continuation. Běžně se používá zkratka call/cc (není podporována ve standardním globálním prostředí)

66 Call-with-current-continuation v místě, v němž si chceme zapamatovat stav provádění (k němuž se hodláme vrátit), musí být volána funkce call-with-current-continuation. tato funkce má jediný parametr, jímž je funkce, které je po vytvoření hodnoty pokračování předáno řízení a jako parametr je jí předáno pokračování (= je volána with current continuation, kde continuation je parametr) uvnitř této funkce můžeme použít pokračování jako funkci. Po jejím vyvolání s jedním parametrem, je obnoven stav v okamžiku volání funkce call-withcurrent-continuation a ta se následně ukončí s hodnotou parametru předaného pokračování.

67 Pokračování (return) nejjednodušší použití pokračování je implementace předčasného ukončení funkce (s přenosem návratové hodnoty tj. return) (define (search wanted? lst) (call/cc (lambda (return) (for-each (lambda (element) normální návrat obnovení pokračování )) (if (wanted? element) (return element))) lst) #f)

68 Pokračování vícenásobné vyvolání pokračování, která jsou obnovitelná pouze z vnořených funkcí (a pouze jednou) se označují jako úniková (escape) Scheme však nabízí pokračování, která lze obnovit z libovolného místa programu a to i vícenásobně. (define inc #f) (+ 1 (call/cc (lambda (c) (set! inc c) 1))) ;; vrátí 2 (inc 2) ;; obnoví vykonávání v místě pokračování a vrátí 3 (inc 3) ;; znovu obnoví a vrátí 4 příklad je umělý (inkrementaci lze definovat mnohem snadněji a elegantněji) je to však první krok ke korutinám.

69 Korutiny korutina = rutina, která má více vstupních a výstupních bodů zpracování korutiny může být přerušeno (ve výstupním bodě) a řízení předáno jiné korutině. poté může být provádění korutiny opět obnoveno (nejčastěji ve stejném bodě, kde bylo přerušeno) korutiny jsou implementací kooperativních vláken (threadů)

70 Pokračování (korutiny) (define continuation #f) (define (coroutine list) (for-each (lambda (item) (display item) (set! continuation (call/cc (lambda (c) (continuation c)))) ) list )) (set! continuation (lambda (c) (set! continuation c) (coroutine '(a b c)))) ;;počáteční nastavení (coroutine '(1 2 3)) 1a2b3c

71 Korutiny v C# jazyk C# poskytuje jen omezenou podporu korutin. Ty jsou navíc primárně specializovány pro jediný účel: vytváření enumerátorů (přesněji generátorů) public static IEnumerable<int> integers () { int i = 0; while(true) //nekonečný generátor yield return ++i; } korutiny lze řídit (opětně volat) jen prostřednictvím metody Next rozhraní IEnumerable<T> (to je neomezuje, jen je to nepohodlné), nemohou být přerušeny v podřízené rutině a nemohou jim být opakovaně předávány parametry (jen při jejich vytváření, tj. při prvním volání), viz (řešení pro Python)

72 Scheme - striktní jazyk jazyk Scheme je striktní tj. před voláním funkce jsou všechny její parametry vyhodnoceny (i když to nemusí být pro další výpočet nutné) striktní jsou svou podstatou všechny imperativní jazyky opakem striktního vyhodnocení je lenivé [lazy] vyhodnocení lenivé vyhodnocení je u většiny jazyků (včetně Scheme) omezeno na některé operátory (např. logické) ve funkcionálních jazycích lze lenivé vyhodnocení implementovat pomocí anonymních funkcí, kdy je výpočet zapouzdřen pomocí lambda formy. Musí to však být explicitním zápisem a je to nepraktické.

Algoritmizace a programování

Algoritmizace 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íce

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

Funkcionální programování úvod

Funkcionální programování úvod Funkcionální programování úvod Imperativní jazyky založeny na von Neumann architektuře primárním kriteriem je efektivita Modelem je Turingův stroj Základní konstrukcí je příkaz Příkazy mění stavový prostor

Více

Programovací jazyk Pascal

Programovací 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íce

Paradigmata programování 1

Paradigmata programování 1 Paradigmata programování 1 Kvazikvotování a manipulace se symbolickými výrazy Vilém Vychodil Katedra informatiky, PřF, UP Olomouc Přednáška 11 V. Vychodil (KI, UP Olomouc) Kvazikvotování, manipulace se

Více

Paradigmata programování 1

Paradigmata programování 1 Paradigmata programování 1 Explicitní aplikace a vyhodnocování Vilém Vychodil Katedra informatiky, PřF, UP Olomouc Přednáška 6 V. Vychodil (KI, UP Olomouc) Explicitní aplikace a vyhodnocování Přednáška

Více

Funkcionální programování

Funkcionální programování Funkcionální programování Typované - Haskell Netypované - Lisp, Scheme λ-kalkul Teoretický základ funkcionálniho programování Lambda kalkul analyzuje funkce nikoli z hlediska původního matematického smyslu

Více

5 Přehled operátorů, příkazy, přetypování

5 Přehled operátorů, příkazy, přetypování 5 Přehled operátorů, příkazy, přetypování Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně budou uvedeny detaily týkající se operátorů. Doba nutná k nastudování

Více

PARADIGMATA PROGRAMOVÁNÍ 2A INTERPRET S VEDLEJŠÍMI EFEKTY A MAKRY

PARADIGMATA PROGRAMOVÁNÍ 2A INTERPRET S VEDLEJŠÍMI EFEKTY A MAKRY KATEDRA INFORMATIKY, PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITA PALACKÉHO, OLOMOUC PARADIGMATA PROGRAMOVÁNÍ 2A INTERPRET S VEDLEJŠÍMI EFEKTY A MAKRY VÝVOJ TOHOTO UČEBNÍHO MATERIÁLU JE SPOLUFINANCOVÁN EVROPSKÝM

Více

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

Č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íce

Paradigmata programování 1

Paradigmata programování 1 Paradigmata programování 1 Vytváření abstrakcí pomocí procedur Vilém Vychodil Katedra informatiky, PřF, UP Olomouc Přednáška 2 V. Vychodil (KI, UP Olomouc) Vytváření abstrakcí pomocí procedur Přednáška

Více

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové

Více

Paradigmata programování 1

Paradigmata programování 1 Paradigmata programování 1 Tečkové páry, symbolická data a kvotování Vilém Vychodil Katedra informatiky, PřF, UP Olomouc Přednáška 4 V. Vychodil (KI, UP Olomouc) Tečkové páry, symbolická data a kvotování

Více

DTP Základy programování Úvod do předmětu

DTP 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íce

přetížení operátorů (o)

přetížení operátorů (o) přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Výrazy Operátory Výrazy Verze pro akademický rok 2012/2013 1 Operace, operátory Unární jeden operand, operátor se zapisuje ve většině případů před operand, v některých případech

Více

Paměť počítače. alg2 1

Paměť počítače. alg2 1 Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových

Více

PŘETĚŽOVÁNÍ OPERÁTORŮ

PŘETĚŽOVÁNÍ OPERÁTORŮ PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako

Více

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

Maturitní 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íce

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Metody přidělování paměti Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Důležitá hlediska jazykových konstrukcí: Dynamické typy Dynamické

Více

Lokální definice (1) plocha-kruhu

Lokální definice (1) plocha-kruhu Lokální definice (1) syntaxe: (local (seznam definic) výraz) definice jsou dostupné pouze uvnitř příkazu local příklad: (local ( (define Pi 3.1415926) (define (plocha-kruhu r) (* Pi r r)) ) (plocha-kruhu

Více

1. Programování proti rozhraní

1. Programování proti rozhraní 1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní

Více

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Metody přidělování paměti Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Důležitá hlediska jazykových konstrukcí: Dynamické typy Dynamické

Více

Paradigmata programování II Přednáška 1: Vedlejší efekt

Paradigmata programování II Přednáška 1: Vedlejší efekt Paradigmata programování II Přednáška 1: Vedlejší efekt Vilém Vychodil Katedra informatiky, Univerzita Palackého v Olomouci 15. února 2007 Vilém Vychodil (UP Olomouc) PP II, Př. 1: Vedlejší efekt 15. února

Více

Zápis programu v jazyce C#

Zápis programu v jazyce C# Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač

Více

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5 Obsah Obsah 1 Programovací jazyk Pascal 1 1.1 Struktura programu v Pascalu.................... 1 2 Proměnné 2 2.1 Vstup a výstup............................ 3 3 Operátory a některé matematické funkce 5

Více

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

Vyuč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íce

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

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 Logické operace Datový typ bool může nabýt hodnot: o true o false Relační operátory pravda, 1, nepravda, 0, hodnoty všech primitivních datových typů (int, double ) jsou uspořádané lze je porovnávat binární

Více

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

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v DSL manuál Ing. Jan Hranáč 27. října 2010 V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v současné době krátký) seznam vestavěných funkcí systému. 1 Vytvoření nového dobrodružství Nejprve

Více

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

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu } 5. Operátor čárka, - slouží k jistému určení pořadí vykonání dvou příkazů - oddělím-li čárkou dva příkazy, je jisté, že ten první bude vykonán dříve než příkaz druhý. Např.: i = 5; j = 8; - po překladu

Více

Programovací 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) 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íce

VISUAL BASIC. Přehled témat

VISUAL 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íce

1 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 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íce

Úvod do programování. Lekce 1

Úvod do programování. Lekce 1 Úvod do programování Lekce 1 Základní pojmy vytvoření spustitelného kódu editor - psaní zdrojových souborů preprocesor - zpracování zdrojových souborů (vypuštění komentářů atd.) kompilátor (compiler) -

Více

11. Přehled prog. jazyků

11. 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íce

IB111 Programování a algoritmizace. Programovací jazyky

IB111 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íce

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

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod. Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání

Více

PARADIGMATA PROGRAMOVÁNÍ 2A VEDLEJŠÍ EFEKT

PARADIGMATA PROGRAMOVÁNÍ 2A VEDLEJŠÍ EFEKT KATEDRA INFORMATIKY, P RÍRODOV EDECKÁ FAKULTA UNIVERZITA PALACKÉHO, OLOMOUC PARADIGMATA PROGRAMOVÁNÍ 2A VEDLEJŠÍ EFEKT Slajdy vytvoril Vilém Vychodil Jan Konecný (KI, UP Olomouc) PP 2A, Lekce 1 Vedlejší

Více

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Využití OOP v praxi -- Knihovna PHP -- Interval.cz Page 1 of 6 Knihovna PHP Využití OOP v praxi Po dlouhé teorii přichází na řadu praxe. V následujícím textu si vysvětlíme možnosti přístupu k databázi pomocí různých vzorů objektově orientovaného programování

Více

PB161 Programování v jazyce C++ Přednáška 9

PB161 Programování v jazyce C++ Přednáška 9 PB161 Programování v jazyce C++ Přednáška 9 Právo friend Přetěžování operátorů Nikola Beneš 16. listopadu 2015 PB161 přednáška 9: friend, přetěžování operátorů 16. listopadu 2015 1 / 30 Reklama PB173 Tematicky

Více

Program a životní cyklus programu

Program 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íce

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20 Obsah 5 Obsah Předmluva k aktuálnímu vydání 15 1 Úvod k prvnímu vydání z roku 2000 16 Typografické a syntaktické konvence................ 20 2 Základní pojmy 21 2.1 Trocha historie nikoho nezabije................

Více

Logické programování I

Logické programování I Logické programování I PROLOG Program popisuje "svět" Prologu = databáze faktů a pravidel (tzv. klauzulí). fakta: predikát(arg1, arg2,...argn). cíle:?- predikát(arg1, arg2,...argn). pravidla: hlava :-

Více

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda 1. Lze vždy z tzv. instanční třídy vytvořit objekt? 2. Co je nejčastější příčinou vzniku chyb? A. Specifikace B. Testování C. Návrh D. Analýza E. Kódování 3. Je defenzivní programování technikou skrývání

Více

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K. Virtuální počítač Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor Virtuální počítač Překladač Překladač : Zdrojový jazyk Cílový jazyk Analytická část:

Více

Vyřešené teoretické otázky do OOP ( )

Vyřešené teoretické otázky do OOP ( ) Vyřešené teoretické otázky do OOP (16. 1. 2013) 1) Vyjmenujte v historickém pořadí hlavní programovací paradigmata a stručně charakterizujte každé paradigma. a) Naivní chaotičnost, špatná syntaxe a sémantika

Více

Datové typy strana 29

Datové typy strana 29 Datové typy strana 29 3. Datové typy Jak již bylo uvedeno, Java je přísně typový jazyk, proto je vždy nutno uvést datový typ datového atributu, formálního parametru metody, návratové hodnoty metody nebo

Více

Hanojská věž. T2: prohledávání stavového prostoru. zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3]

Hanojská věž. T2: prohledávání stavového prostoru. zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3] Hanojská věž zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3] který tah je lepší? (co je lepší tah?) P. Berka, 2012 1/21 Stavový prostor 1. množina stavů S = {s} 2. množina přechodů

Více

Základní datové struktury

Základní datové struktury Základní datové struktury Martin Trnečka Katedra informatiky, Přírodovědecká fakulta Univerzita Palackého v Olomouci 4. listopadu 2013 Martin Trnečka (UPOL) Algoritmická matematika 1 4. listopadu 2013

Více

Přetěžování operátorů

Přetěžování operátorů Přetěžování operátorů Cíle lekce Cílem lekce je seznámit se s mechanizmem přetížení operátorů a s použitím tohoto mechanizmu při návrhu a implementaci programů. Po absolvování lekce budete: umět využívat

Více

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

IB111 Programování a algoritmizace. Objektově orientované programování (OOP) IB111 Programování a algoritmizace Objektově orientované programování (OOP) OP a OOP Objekt Kombinuje data a funkce a poskytuje určité rozhraní. OP = objektové programování Vše musí být objekty Např. Smalltalk,

Více

MATURITNÍ 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ČŮ 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íce

Masarykova 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 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íce

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá: SII - Informatika Způsob vyhodnocení: Při vyhodnocení budou za nesprávné odpovědi strhnuty body. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá: a) sekundární klíč b)

Více

DUM 06 téma: Tvorba makra pomocí VBA

DUM 06 téma: Tvorba makra pomocí VBA DUM 06 téma: Tvorba makra pomocí VBA ze sady: 03 tematický okruh sady: Tvorba skript a maker ze šablony: 10 Algoritmizace a programování určeno pro: 4. ročník vzdělávací obor: 18-20-M/01 Informační technologie

Více

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG 2008-9)

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG 2008-9) Programování v C++ Úplnej úvod Co se naučíte? tak samozřejmě C++, s důrazem na: dynamické datové struktury Objektově Orientované Programování STL (standardní knihovna šablon) vytváření vlastních šablon

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝ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íce

typová konverze typová inference

typová konverze typová inference Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Typy Základní (primitivní) datové typy Deklarace Verze pro akademický rok 2012/2013 1 Typy v jazyce Java Základní datové typy (primitivní datové typy) Celočíselné byte, short,

Více

Programování v Pythonu

Programování v Pythonu ƒeské vysoké u ení technické v Praze FIT Programování v Pythonu Ji í Znamená ek P íprava studijního programu Informatika je podporována projektem nancovaným z Evropského sociálního fondu a rozpo tu hlavního

Více

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1 24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE

Více

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

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++ Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++ Prostory jmen U programů mohou někdy nastat kolize mezi jmény (tříd, funkcí, globálních proměnných atd.) pokud v různých

Více

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 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 formátovanému výstupu,

Více

Funkční objekty v C++.

Funkční objekty v C++. Funkční objekty v C++. Funkční objekt je instance třídy, která má jako svou veřejnou metodu operátor (), tedy operátor pro volání funkce. V dnešním článku si ukážeme jak zobecnit funkci, jak používat funkční

Více

Matematika v programovacích

Matematika v programovacích Matematika v programovacích jazycích Pavla Kabelíková am.vsb.cz/kabelikova pavla.kabelikova@vsb.cz Úvodní diskuze Otázky: Jaké programovací jazyky znáte? S jakými programovacími jazyky jste již pracovali?

Více

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou

Více

Z. Kotala, P. Toman: Java ( Obsah )

Z. Kotala, P. Toman: Java ( Obsah ) Z. Kotala, P. Toman: Java ( Obsah ) 13. Výjimky Výjimka (exception) je definována jako událost, která nastane během provádění programu a která naruší normální běh instrukcí. Výjimka je vyvolána například

Více

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

Funkce, podmíněný příkaz if-else, příkaz cyklu for Funkce, podmíněný příkaz if-else, příkaz cyklu for Definice funkce Funkce je pojmenovaná část programu, kterou lze dále zavolat v jiné části programu. V Pythonu je definována klíčovým slovem def. Za tímto

Více

Následující tabulka obsahuje typy objektů podle jejich pojmenovávání: počáteční písmeno jména

Následující tabulka obsahuje typy objektů podle jejich pojmenovávání: počáteční písmeno jména Jména objektů Každý objekt ve Smalltalku může mít svoje jméno. Jménem rozumíme alfanumerické označení, které musí začínat písmenem. Ve Smalltalku jsou důsledně rozlišována velká a malá písmena, na což

Více

Sada 1 - Základy programování

Sada 1 - Základy programování S třední škola stavební Jihlava Sada 1 - Základy programování 06. Proměnné, deklarace proměnných Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284

Více

Objektově orientované programování

Objektově orientované programování 10. října 2011 Pragmatické informace Volitelný předmět, zápočet: zápočtový program(s dokumentací), aktivní účast na cvičení(body v CodExu), praktický test, zkouška: zkoušková písemka na objektový návrh

Více

Princip funkce počítače

Princip funkce počítače Princip funkce počítače Princip funkce počítače prvotní úlohou počítačů bylo zrychlit provádění matematických výpočtů první počítače kopírovaly obvyklý postup manuálního provádění výpočtů pokyny pro zpracování

Více

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

Rekurze. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12. Rekurze doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Rekurze 161 / 344 Osnova přednášky

Více

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

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44 Algoritmizace a programování Ak. rok 2012/2013 vbp 1. ze 44 Vladimír Beneš Petrovický K101 katedra matematiky, statistiky a informačních technologií vedoucí katedry E-mail: vbenes@bivs.cz Telefon: 251

Více

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13 Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13 KAPITOLA 1 Na úvod o Javě 15 Počítačový program 15 Vysokoúrovňový programovací

Více

Martin Milata, <256615@mail.muni.cz> 27.11.2007. Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už je od

Martin Milata, <256615@mail.muni.cz> 27.11.2007. Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už je od IB000 Lámání čokolády Martin Milata, 27.11.2007 1 Čokoláda s alespoň jedním sudým rozměrem Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už

Více

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016 Správa paměti Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016 Objektové modelování, B36OMO 10/2016, Lekce 2 https://cw.fel.cvut.cz/wiki/courses/xxb36omo/start

Více

IAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku

IAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku Podprogramy zásady: jednu věc programovat pouze jednou podprogram logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku // nacteni strany 1 double

Více

Operátory. Základy programování 1 Tomáš Kühr

Operátory. Základy programování 1 Tomáš Kühr Operátory Základy programování 1 Tomáš Kühr Operátory a jejich vlastnosti Základní konstrukce (skoro) každého jazyka Z daných operandů vytvoří výsledek, který je možné dále využívat Arita udává počet operandů

Více

Maturitní témata Školní rok: 2015/2016

Maturitní témata Školní rok: 2015/2016 Maturitní témata Školní rok: 2015/2016 Ředitel školy: Předmětová komise: Předseda předmětové komise: Předmět: PhDr. Karel Goš Informatika a výpočetní technika Mgr. Ivan Studnička Informatika a výpočetní

Více

PREPROCESOR POKRAČOVÁNÍ

PREPROCESOR POKRAČOVÁNÍ PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,

Více

1. Dědičnost a polymorfismus

1. Dědičnost a polymorfismus 1. Dědičnost a polymorfismus Cíl látky Cílem této kapitoly je představit klíčové pojmy dědičnosti a polymorfismu. Předtím však je nutné se seznámit se základními pojmy zobecnění neboli generalizace. Komentář

Více

1 Nejkratší cesta grafem

1 Nejkratší cesta grafem Bakalářské zkoušky (příklady otázek) podzim 2014 1 Nejkratší cesta grafem 1. Uvažujte graf s kladným ohodnocením hran (délka). Definujte formálně problém hledání nejkratší cesty mezi dvěma uzly tohoto

Více

9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include

9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h> 9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include int main(void) { int dcislo, kolikbcislic = 0, mezivysledek = 0, i; int vysledek[1000]; printf("zadejte

Více

MQL4 COURSE. By Coders guru www.forex-tsd.com. -4 Operace & Výrazy

MQL4 COURSE. By Coders guru www.forex-tsd.com. -4 Operace & Výrazy MQL4 COURSE By Coders guru www.forex-tsd.com -4 Operace & Výrazy Vítejte ve čtvrté lekci mého kurzu MQL4. Předchozí lekce Datové Typy prezentovaly mnoho nových konceptů ; Doufám, že jste všemu porozuměli,

Více

IB015 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 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íce

Data, výrazy, příkazy

Data, výrazy, příkazy Data, výrazy, příkazy Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Přednášky byly připraveny s pomocí materiálů, které vyrobili Ladislav Vágner, Pavel Strnad, Martin Hořeňovský, Aleš Hrabalík

Více

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI EVROPSKÝ SOCIÁLNÍ FOND Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI Úvod do PHP PHP Personal Home Page Hypertext Preprocessor jazyk na tvorbu dokumentů přípona: *.php skript je součást HTML stránky!

Více

Spojová implementace lineárních datových struktur

Spojová implementace lineárních datových struktur Spojová implementace lineárních datových struktur doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB

Více

Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz

Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz Upozornění pro čtenáře a uživatele této knihy Všechna práva vyhrazena. Žádná část této tištěné či elektronické knihy nesmí být reprodukována a šířena

Více

Architektury počítačů a procesorů

Architektury počítačů a procesorů Kapitola 3 Architektury počítačů a procesorů 3.1 Von Neumannova (a harvardská) architektura Von Neumann 1. počítač se skládá z funkčních jednotek - paměť, řadič, aritmetická jednotka, vstupní a výstupní

Více

ALGORITMIZACE A PROGRAMOVÁNÍ

ALGORITMIZACE A PROGRAMOVÁNÍ Metodický list č. 1 Algoritmus a jeho implementace počítačovým programem Základním cílem tohoto tematického celku je vysvětlení pojmů algoritmus a programová implementace algoritmu. Dále je cílem seznámení

Více

7. Datové typy v Javě

7. Datové typy v Javě 7. Datové typy v Javě Primitivní vs. objektové typy Kategorie primitivních typů: integrální, boolean, čísla s pohyblivou řádovou čárkou Pole: deklarace, vytvoření, naplnění, přístup k prvkům, rozsah indexů

Více

3 Co je algoritmus? 2 3.1 Trocha historie... 2 3.2 Definice algoritmu... 3 3.3 Vlastnosti algoritmu... 3

3 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

IRAE 07/08 Přednáška č. 1

IRAE 07/08 Přednáška č. 1 Úvod do předmětu OOP Objekt Proč OOP? Literatura, osnova předmětu viz. cvičení Základní prvek OOP sw inženýrství = model reálných objektů (věcí) člověk, auto, okno (ve windows), slovník, = model abstraktní

Více

Parsování v Haskellu, knihovna Parsec

Parsování v Haskellu, knihovna Parsec Parsování v Haskellu, knihovna Parsec IB016 Seminář z funkcionálního programování Vladimír Štill, Martin Ukrop Fakulta informatiky, Masarykova univerzita Jaro 2016 IB016: Cvičení 09 Jaro 2016 1 / 12 Regulární

Více

Odvozené a strukturované typy dat

Odvozené a strukturované typy dat Odvozené a strukturované typy dat Petr Šaloun katedra informatiky FEI VŠB-TU Ostrava 14. listopadu 2011 Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu

Více

Výčtový typ strana 67

Výčtový typ strana 67 Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce

Více

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

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout.   tel: Skripta ke školení Základy VBA vypracoval: Tomáš Herout e-mail: herout@helpmark.cz tel: 739 719 548 2016 Obsah TROCHA TEORIE VBA...2 ZPŮSOB ZÁPISU VE VBA...2 CO JE TO FUNKCE...2 CO JE TO PROCEDURA...2

Více

LEKCE 6. Operátory. V této lekci najdete:

LEKCE 6. Operátory. V této lekci najdete: LEKCE 6 Operátory V této lekci najdete: Aritmetické operátory...94 Porovnávací operátory...96 Operátor řetězení...97 Bitové logické operátory...97 Další operátory...101 92 ČÁST I: Programování v jazyce

Více