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

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

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

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

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

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

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

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

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á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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Standardní algoritmy vyhledávací.

Standardní algoritmy vyhledávací. Standardní algoritmy vyhledávací. Vyhledávací algoritmy v C++ nám umožňují vyhledávat prvky v datových kontejnerech podle různých kritérií. Také se podíváme na vyhledávání metodou půlením intervalu (binární

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

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

2. Modelovací jazyk UML 2.1 Struktura UML 2.1.1 Diagram tříd 2.1.1.1 Asociace 2.1.2 OCL. 3. Smalltalk 3.1 Jazyk 3.1.1 Pojmenování

2. Modelovací jazyk UML 2.1 Struktura UML 2.1.1 Diagram tříd 2.1.1.1 Asociace 2.1.2 OCL. 3. Smalltalk 3.1 Jazyk 3.1.1 Pojmenování 1. Teoretické základy modelování na počítačích 1.1 Lambda-kalkul 1.1.1 Formální zápis, beta-redukce, alfa-konverze 1.1.2 Lambda-výraz jako data 1.1.3 Příklad alfa-konverze 1.1.4 Eta-redukce 1.2 Základy

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

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

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

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

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

2 Strukturované datové typy 2 2.1 Pole... 2 2.2 Záznam... 3 2.3 Množina... 4

2 Strukturované datové typy 2 2.1 Pole... 2 2.2 Záznam... 3 2.3 Množina... 4 Obsah Obsah 1 Jednoduché datové typy 1 2 Strukturované datové typy 2 2.1 Pole.................................. 2 2.2 Záznam................................ 3 2.3 Množina................................

Více

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09 Střední průmyslová škola a Vyšší odborná škola technická Brno, Sokolská 1 Šablona: Název: Téma: Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Operátory Autor:

Více

Logické programování

Logické programování 30. října 2012 Osnova Principy logického programování 1 Principy logického programování 2 3 1 Principy logického programování 2 3 Paradigmata programování Strukturované programování Procedurální programování

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

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39 Programování v C# Hodnotové datové typy, řídící struktury Petr Vaněček 1 / 39 Obsah přednášky Referenční datové typy datové položky metody přístupové metody accessory, indexery Rozhraní Pole 2 / 39 Třídy

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

2. úkol MI-PAA. Jan Jůna (junajan) 3.11.2013

2. úkol MI-PAA. Jan Jůna (junajan) 3.11.2013 2. úkol MI-PAA Jan Jůna (junajan) 3.11.2013 Specifikaci úlohy Problém batohu je jedním z nejjednodušších NP-těžkých problémů. V literatuře najdeme množství jeho variant, které mají obecně různé nároky

Více

Úvod do programování

Úvod do programování Úvod do programování Základní literatura Töpfer, P.: Algoritmy a programovací techniky, Prometheus, Praha učebnice algoritmů, nikoli jazyka pokrývá velkou část probíraných algoritmů Satrapa, P.: Pascal

Více

Konstruktory překladačů

Konstruktory překladačů Konstruktory překladačů Miroslav Beneš Dušan Kolář Konstruktor Lex generátor lexikálních analyzátorů M. E. Lesk, 1975 - pro OS Unix flex - Vern Paxson, 1990 - GNU verze určeno pro generování výstupu v

Více

Teoretické minimum z PJV

Teoretické minimum z PJV Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov

Více

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

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu 1 Podklady předmětu pro akademický rok 2006/2007 Radim Farana Obsah 2 Obsah předmětu, Požadavky kreditového systému, Datové typy jednoduché, složené, Programové struktury, Předávání dat. Obsah předmětu

Více

4.4.2012. Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady

4.4.2012. Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady Základy programování (IZAPR, IZKPR) Přednáška 5 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky Příkazy cyklu -

Více

Datové struktury. alg12 1

Datové struktury. alg12 1 Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou

Více

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

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem. Algoritmus Algoritmus je schematický postup pro řešení určitého druhu problémů, který je prováděn pomocí konečného množství přesně definovaných kroků. nebo Algoritmus lze definovat jako jednoznačně určenou

Více

6. blok část B Vnořené dotazy

6. blok část B Vnořené dotazy 6. blok část B Vnořené dotazy Studijní cíl Tento blok je věnován práci s vnořenými dotazy. Popisuje rozdíl mezi korelovanými a nekorelovanými vnořenými dotazy a zobrazuje jejich použití. Doba nutná k nastudování

Více

PARADIGMATA OBJEKTOVÉHO PROGRAMOVÁNÍ I

PARADIGMATA OBJEKTOVÉHO PROGRAMOVÁNÍ I KATEDRA INFORMATIKY PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITA PALACKÉHO PARADIGMATA OBJEKTOVÉHO PROGRAMOVÁNÍ I MICHAL KRUPKA VÝVOJ TOHOTO UČEBNÍHO TEXTU JE SPOLUFINANCOVÁN EVROPSKÝM SOCIÁLNÍM FONDEM A STÁTNÍM

Více

Modely datové. Další úrovní je logická úroveň Databázové modely Relační, Síťový, Hierarchický. Na fyzické úrovni se jedná o množinu souborů.

Modely datové. Další úrovní je logická úroveň Databázové modely Relační, Síťový, Hierarchický. Na fyzické úrovni se jedná o množinu souborů. Modely datové Existují různé úrovně pohledu na data. Nejvyšší úroveň je úroveň, která zachycuje pouze vztahy a struktury dat samotných. Konceptuální model - E-R model. Další úrovní je logická úroveň Databázové

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Řídicí struktury, standardní metody Problematika načítání pomocí Scanner Některé poznámky k příkazům Psaní kódu programu Metody třídy Math Obalové třídy primitivních datových

Více

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

5 Rekurze a zásobník. Rekurzivní volání metody 5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení

Více

LISP Definice funkcí

LISP Definice funkcí LISP Definice funkcí (DEFUN jméno-fce (argumenty) tělo-fce ) Přiřadí jménu-fce lambda výraz definovaný tělem-fce, tj. (LAMBDA (argumenty) tělo-fce). Vytvoří funkční vazbu symbolu jméno-fce Struktura symbolu:

Více

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář Vazba (binding) Tabulka symbolů Miroslav Beneš Dušan Kolář vazba = spojení mezi entitou a vlastností okamžik vazby (binding time) při návrhu jazyka při implementaci jazyka během překladu/spojování/zavádění

Více

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

PHP tutoriál (základy PHP snadno a rychle) PHP tutoriál (základy PHP snadno a rychle) Druhá, vylepšená offline verze. Připravil Štěpán Mátl, http://khamos.wz.cz Chceš se naučit základy PHP? V tom případě si prostuduj tento rychlý průvodce. Nejdříve

Více

Generické programování

Generické programování Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =

Více

DBS Konceptuální modelování

DBS Konceptuální modelování DBS Konceptuální modelování Michal Valenta Katedra softwarového inženýrství FIT České vysoké učení technické v Praze Michal.Valenta@fit.cvut.cz c Michal Valenta, 2010 BIVŠ DBS I, ZS 2010/11 https://users.fit.cvut.cz/

Více

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR):

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR): Mezi příkazy pro manipulaci s daty (DML) patří : 1. SELECT 2. ALTER 3. DELETE 4. REVOKE Jaké vlastnosti má identifikující relace: 1. Je relace, která se využívá pouze v případě modelovaní odvozených entit

Více

Objektově orientované programování v jazyce Python

Objektově orientované programování v jazyce Python Objektově orientované programování v jazyce Python Co to je objektově orientované programování Python není přímo objektově orientovaný jazyk, ale podporuje nejdůležitější části objektově orientovaného

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

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem ČVUT FEL X36PAA - Problémy a algoritmy 3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem Jméno: Marek Handl Datum: 1. 1. 2009 Cvičení: Pondělí 9:00 Zadání Naprogramujte

Více

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku Znaky - standardní typ char var Z, W: char; - znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku - v TP (často i jinde) se používá kódová

Více

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write(\nPrumerna teplota je {0}, tprumer); Pole (array) Motivace Častá úloha práce s větším množstvím dat stejného typu o Př.: průměrná teplota za týden a odchylka od průměru v jednotlivých dnech Console.Write("Zadej T pro.den: "); double t = Double.Parse(Console.ReadLine());

Více

Algoritmizace. Cíle předmětu

Algoritmizace. Cíle předmětu Cíle předmětu Algoritmizace naučit se sestavovat algoritmy řešení jednoduchých problémů a zapisovat je v jazyku Java Organizace předmětu přednášky (učast nepovinná, ale doporučená) cvičení střídavě u tabule

Více

Dědění, polymorfismus

Dědění, polymorfismus Programování v jazyce C/C++ Ladislav Vagner úprava Pavel Strnad Dědění. Polymorfismus. Dnešní přednáška Statická a dynamická vazba. Vnitřní reprezentace. VMT tabulka virtuálních metod. Časté chyby. Minulá

Více

1 Strukturované programování

1 Strukturované programování Projekt OP VK Inovace studijních oborů zajišťovaných katedrami PřF UHK Registrační číslo: CZ.1.07/2.2.00/28.0118 1 Cíl Seznámení s principy strukturovaného programování, s blokovou strukturou programů,

Více

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek 5 Vysoká škola báňská Technická univerzita Ostrava Fakulta strojní, Katedra automatizační techniky a řízení 2008/2009 Radim Farana 1 Obsah Jazyk SQL, Spojení tabulek, agregační dotazy, jednoduché a složené

Více

Predikátová logika. prvního řádu

Predikátová logika. prvního řádu Predikátová logika prvního řádu 2 Predikát Predikát je n-ární relace - vyjadřuje vlastnosti objektů a vztahy mezi objekty - z jednoduchého výroku vznikne vypuštěním alespoň jednoho jména objektu (individua)

Více

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

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Základy programování Úloha: Eratosthenovo síto Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Obsah 1 Zadání úkolu: 3 1.1 Zadání:............................... 3 1.2 Neformální zápis:.........................

Více

Testování prvočíselnosti

Testování prvočíselnosti Dokumentace zápočtového programu z Programování II (NPRG031) Testování prvočíselnosti David Pěgřímek http://davpe.net Úvodem V různých oborech (například v kryptografii) je potřeba zjistit, zda je číslo

Více

Objektově orientované programování v jazyce Python

Objektově orientované programování v jazyce Python Objektově orientované programování v jazyce Python Základní pojmy objektově orientovaného programování Objekt vychází z reálného světa. Má dva charakteristické rysy. Všechny objekty mají stav Všechny objekty

Více

Implementace LL(1) překladů

Implementace LL(1) překladů Překladače, přednáška č. 6 Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 30. října 2007 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku

Více

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií 1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední

Více

Pohled do nitra mikroprocesoru Josef Horálek

Pohled do nitra mikroprocesoru Josef Horálek Pohled do nitra mikroprocesoru Josef Horálek Z čeho vycházíme = Vycházíme z Von Neumannovy architektury = Celý počítač se tak skládá z pěti koncepčních bloků: = Operační paměť = Programový řadič = Aritmeticko-logická

Více

PHP framework Nette. Kapitola 1. 1.1 Úvod. 1.2 Architektura Nette

PHP framework Nette. Kapitola 1. 1.1 Úvod. 1.2 Architektura Nette Kapitola 1 PHP framework Nette 1.1 Úvod Zkratka PHP (z anglického PHP: Hypertext Preprocessor) označuje populární skriptovací jazyk primárně navržený pro vývoj webových aplikací. Jeho oblíbenost vyplývá

Více