Paradigmata programování II Přednáška 2: Mutace
|
|
- Pavel Bárta
- před 6 lety
- Počet zobrazení:
Transkript
1 Paradigmata programování II Přednáška 2: Mutace Vilém Vychodil Katedra informatiky, Univerzita Palackého v Olomouci 22. února 2007 Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
2 ;; nedojde ke zmene prvku, ale k vytvoreni noveho seznamu (define s '(1 2 3)) (set! s '(1 blah 3)) ;; mutatory paru: procedury set-car!, set-cdr! ;; destruktive zmeni par, vraci nedefinovanou hodnotu (define p (cons 1 2)) (set-car! p 'ahoj) (set-cdr! p 'svete) ;; Priklad: (define s '(1 2 3)) (set-car! (cdr s) 'blah) s = (1 blah 3) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
3 ;; provazene seznamy, nutno dbat zvysene obezretnosti! ;; riziko vzniku chyb:,,nechtena mutace seznamu'' (define s '(1 2 3)) (define r (list 10 s 20)) r = (10 (1 2 3) 20) (set-car! (cadr r) 'neco) r = (10 (neco 2 3) 20) s = (neco 2 3) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
4 ;; pro n=3 vytvor: ((#f #f #f) (#f #f) (#f)), etc. ;; slozitost: O(n(1+n)/2) (define f-list (lambda (n) (build-list n (lambda (i) (build-list (- n i) (lambda (x) #f)))))) (define s (f-list 4)) s = ((#f #f #f #f) (#f #f #f) (#f #f) (#f)) (set-car! (car (reverse s)) 'blah) s = ((#f #f #f #f) (#f #f #f) (#f #f) (blah)) (set-car! (cadr (reverse s)) 100) s = ((#f #f #f #f) (#f #f #f) (100 #f) (blah)) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
5 ;; ta sama procedura ale efektivnejsi ;; slozitost: O(n) (define f-list (lambda (n) (if (= n 1) '((#f)) (let ((rest (f-list (- n 1)))) (cons (cons (caar rest) (car rest)) rest))))) (define s (f-list 4)) s = ((#f #f #f #f) (#f #f #f) (#f #f) (#f)) ;; ROZDIL OPROTI PREDCHOZIMU: (set-car! (car (reverse s)) 'blah) s = ((#f #f #f blah) (#f #f blah) (#f blah) (blah)) (set-car! (cadr (reverse s)) 100) s = ((#f #f 100 blah) (#f 100 blah) (100 blah) (blah)) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
6 (f-list 3)... prvni verze pouzivajici build-list (f-list 3)... druha verze (rekurzivni) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
7 ;; program = data = mutovatelny seznam ;; je mozne destruktivne modifikovat samotny program (define proc (lambda (x) (display (list "Input parameter: " x)) (newline) (set-car! x (+ (car x) 1)) x)) (define test (lambda () (proc '(0)))) (test) = (1) ;; (Input parameter: (0)) (test) = (2) ;; (Input parameter: (1)). Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
8 ;; konstrukce mutovatelneho paru (define cons (lambda (x y) ;; modifikatory vazby symbolu x a y (define set-x! (lambda (value) (set! x value))) (define set-y! (lambda (value) (set! y value))) ;; dispatch (lambda (signal) (cond ((equal? signal 'car) x) ((equal? signal 'cdr) y) ((equal? signal 'set-car!) set-x!) ((equal? signal 'set-cdr!) set-y!) (else 'unknown-signal))))) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
9 ;; selektory car a cdr (define car (lambda (pair) (pair 'car))) (define cdr (lambda (pair) (pair 'cdr))) ;; mutace prvniho prvku (define set-car! (lambda (pair value) ((pair 'set-car!) value))) ;; mutace druheho prvku (define set-cdr! (lambda (pair value) ((pair 'set-cdr!) value))) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
10 ;; klasicka nedestruktivni (funkcionalni) verze (define list-set (lambda (l index value) (let iter ((l l) (i 0)) (if (= i index) (cons value (cdr l)) (cons (car l) (iter (cdr l) (+ i 1))))))) ;; destruktivni modifikace prvku (define list-set! (lambda (l index value) (let iter ((l l) (i 0)) (if (= i index) (set-car! l value) (iter (cdr l) (+ i 1)))) l)) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
11 ;; klasicky nedestruktivni (funkcionalni) append2 (define append2 (lambda (l1 l2) (if (null? l1) l2 (cons (car l1) (append2 (cdr l1) l2))))) ;; destruktivne spoj dva seznamy (define append2! (lambda (l1 l2) (if (null? l1) l2 (let iter ((l l1)) (if (null? (cdr l)) (begin (set-cdr! l l2) l1) (iter (cdr l))))))) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
12 ;; pri spojeni seznamu dochazi k mutaci prvniho argumentu: (define x '(a b c)) (define y '(10 20)) (append2! x y) = (a b c 10 20) x = (a b c 10 20) y = (10 20) ;; neplati v pripade prazdneho seznamu (neni to par) (define x '()) (define y '(10 20)) (append2! x y) = (10 20) x = () y = (10 20) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
13 ;; muzeme rozsirit na libovolne argumenty: (define append! (lambda lists (foldr append2! '() lists))) ;; dochazi k destrukci vsech krome posledniho ;; vsechny neprazdne seznamy se postupne,,provazou'' (define a '(a b c)) (define b '(#t #f)) (define c '( )) (define d '(foo bar baz)) (append! a b c d) = (a b c #t #f foo bar baz) a = (a b c #t #f foo bar baz) b = (#t #f foo bar baz) c = ( foo bar baz) d = (foo bar baz) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
14 ;; destruktivni pridavani prvku do seznamu (define s '(a b c)) (list-insert! s 0 'd) (list-insert! s 1 'd) ;; destruktivni odebirani prvku ze seznamu (define s '(a b c)) (list-delete! s 0) (list-delete! s 1) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
15 ;; destruktivni pridavani prvku do NEPRAZDNEHO ze seznamu ;; pro prazdny seznam nelze (nejsou mutovatelne) (define list-insert! (lambda (l index value) (if (= index 0) ; vkladani na zacatek (begin (set-cdr! l (cons (car l) (cdr l))) (set-car! l value)) (let iter ((l l) (index index)) ; vkladani doprostred (if (= index 1) (set-cdr! l (cons value (cdr l))) (iter (cdr l) (- index 1))))))) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
16 ;; destruktivni mazani prvku z aspon DVOUPRVKOVEHO sezn. ;; jednoprvkove seznamy nelze,,zmutovat na prazdne'' (define list-delete! (lambda (l index) (if (= index 0) (begin (set-car! s (cadr s)) ; mazani z prvni pozice (set-cdr! s (cddr s))) (let iter ((l l) ; mazani ze zbytku seznamu (index index)) (if (= index 1) (set-cdr! l (cddr l)) (iter (cdr l) (- index 1))))))) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
17 ;; efektivni implementace FRONTY: vkladani+mazani v O(1) ;; vytvor prazdnou frontu (define make-queue (lambda () (cons '() '()))) ;; testuj, zda-li je dana fronta prazdna (define empty-queue? (lambda (queue) (and (null? (car queue)) (null? (cdr queue))))) ;; vrat prvek na vrcholu fronty (define queue-get caar) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
18 ;; vkladani prvku na konec fronty ;; smazani prvku ze zacatku fronty Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
19 ;; vloz prvek na konec fronty (define queue-insert! (lambda (queue elem) (if (empty-queue? queue) (begin (set-car! queue (cons elem (car queue))) (set-cdr! queue (car queue))) (begin (set-cdr! (cdr queue) (list elem)) (set-cdr! queue (cddr queue)))))) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
20 ;; smaz prvek z vrcholu fronty (define queue-delete! (lambda (queue) (if (not (empty-queue? queue)) (begin (set-car! queue (cdar queue)) (if (null? (car queue)) (set-cdr! queue '())))))) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
21 (define q (make-queue)) q = (()) (queue-insert! q 10) (queue-insert! q 20) (queue-insert! q 30) q = (( ) 30) (queue-get q) = 10 (queue-delete! q) (queue-insert! q 40) q = (( ) 40) (queue-delete! q) (queue-delete! q) q = (( ) 40) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
22 ;; nejjednodussi priklad (define a '(ahoj)) (set-cdr! a a) a = (ahoj ahoj ahoj = DrScheme vypise: #0=(ahoj. #0#) ;; tradicne napsany length: (selhava) (define length (lambda (l) (if (null? l) 0 (+ 1 (length (cdr l)))))) (length a) = (length a) = length: exp. arg. of type <prop. list>; given #0=(ahoj. #0#) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
23 (define a '(1 2 3)) (set-cdr! (cddr a) a) a = ( = #0=( #0#) (define a '( )) (set-car! (cdr a) a) a = (10 (10 (10 (10 30) 30) 30) 30) = #0=(10 #0# 30) (length a) = 3 (define a '(#f)) (set-car! a a) a = (((( )))) = #0=(#0#) (length a) = 1 Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
24 ;; zacykleni linearniho seznamu (vraci nedef. hodnotu) ;; do posledniho paru misto () vlozi ukazatel na prvni par (define cycle! (lambda (l) (let iter ((aux l)) (if (null? (cdr aux)) (set-cdr! aux l) (iter (cdr aux)))))) (define s '(a b c d e)) (cycle! s) s = #0=(a b c d e. #0#) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
25 ;; OTAZKA: jek detekovat cyklus v seznamu? ;; naivni (nefunkcni) reseni (define cycle? (lambda (l) (if (null? l) #f (cycle? (cdr l))))) ;; potrebujeme porovnavat fyzicke umisteni paru v pameti ;; predikal equal? nam NIJAK NEPOMUZE, protoze: (define a (cons 1 2)) (define b (cons 1 2)) (equal? a b) = #t... problem (set-car! a 10) a = (10. 2) b = (1. 2) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
26 ;; eq?: je #t na cislech p.k. maji shodnou reprezentaci ;; na symbolech p.k. jmenuji se stejne ;; na parech p.k. maji stejne ulozeni v pameti ;; POZOR: predikat je castecne implementacne zavisly ;; lze jej chapat jako zakladni predikat rovnosti (eq? ) = #f (eq? 2 2) = #t (eq? 'ahoj 'ahoj) = #t (eq? (cons 1 2) (cons 1 2)) = #f ;; eqv?: je #t na cislech p.k. jsou numericky rovne ;; na symbolech p.k. jmenuji se stejne ;; na parech p.k. maji stejne ulozeni v pam. ;; POZOR: predikat je castecne implementacne zavisly (eqv? ) = #t (eqv? 2 2) = #t (eqv? 'ahoj 'ahoj) = #t (eqv? (cons 1 2) (cons 1 2)) = #f Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
27 (define both (lambda (type? x y) (and (type? x) (type? y)))) (define eqv? (lambda (x y) (if (and (both number? x y) (or (both exact? x y) (both inexact? x y))) (= x y) (eq? x y)))) (define equal? (lambda (x y) (or (eqv? x y) (and (both pair? x y) (equal? (car x) (car y)) (equal? (cdr x) (cdr y)))))) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
28 ;; test zacyklenosti linearniho seznamu (define cyclic? (lambda (l) (let test ((rest (if (null? l) '() (cdr l)))) (cond ((null? rest) #f) ((eq? rest l) #t) (else (test (cdr rest))))))) ;; priklad pouziti (cyclic? '()) = #f (cyclic? '(a b c)) = #f (define s '(a b c)) (cycle! s) (cyclic? s) = #t Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
29 ;; odcykleni linearniho seznamu ;; rozetnuti cyklu vlozenim () misto ukazatele na pocatek (define uncycle! (lambda (l) (let iter ((aux l)) (if (eq? (cdr aux) l) (set-cdr! aux '()) (iter (cdr aux)))))) ; zacyklenim + odcyklenim nemusime ziskat vychozi seznam (define s '(a b c)) (cycle! s) (set! s (cdr s)) s = #0=(b c a. #0#) (uncycle! s) s = (b c a) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
30 ;; Analogicky jako existuji eq?, eqv?, equal? ;; maji sve varianty i member a assoc ;; member... pouziva k porovnani prvku equal? ;; memv... pouziva k porovnani prvku eqv? ;; memq... pouziva k porovnani prvku eq? (member '(a) '(1 2 (a) 3 4)) = ((a) 3 4) (memq '(a) '(1 2 (a) 3 4)) = #f ;; assoc... pouziva k porovnani klicu equal? ;; assv... pouziva k porovnani klicu eqv? ;; assq... pouziva k porovnani klicu eq? (assoc '(2) '((1. a) ((2). b) (3. c))) = ((2). b) (assq '(2) '((1. a) ((2). b) (3. c))) = #f Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
31 ;; TEST CYKLU DO HLOUBKY ;; cyclic? testuje pouze jeden typ zacykleni ;; selhava na mnoha cyklickych stukturach ; Priklad: (define s '(a b c d e f)) (set-car! (cdddr s) (cdr s)) s = (a. #0=(b c #0# e f)) (length s) = 6 (cyclic? s) = #f Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
32 ;; TEST CYKLU DO HLOUBKY ;; behem sestupu seznamem si udrzujeme seznam ;; jiz navstivenych paru, procedura vyuziva memq: (define depth-cyclic? (lambda (l) (let ((found '())) (let test ((l l)) (if (pair? l) (if (memq l found) #t (begin (set! found (cons l found)) (or (test (car l)) (test (cdr l))))) #f))))) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
33 ;; OBOUSMERNE SEZNAMY: SPECIALNI CYKLICKE STRUKTURY ;; (elem. (ptr1. ptr2)) ;; ptr1.. ukazatel na predchudce ;; ptr2.. ukazatel na naslednika ;; konstruktor obousmerneho seznamu (define cons-dlist (lambda (elem dlist) (let ((new-cell (cons elem (cons '() dlist)))) (if (not (null? dlist)) (set-car! (cdr dlist) new-cell)) new-cell))) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
34 ;; konstrukce obousm. sezn. (cons-dlist zkaceno consd) (define s (consd 'b (consd 'c (consd 'd '())))) (define r (consd 'a s)) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
35 ;; (elem. (ptr1. ptr2)) ;; selektory car, cdr, cir (define dlist-car (lambda (dlist) (car dlist))) (define dlist-cdr (lambda (dlist) (cddr dlist))) (define dlist-cir (lambda (dlist) (cadr dlist))) ; Priklad: (zkracujeme jmena na consd, dcar, dcdr, dcir) (define s (consd 'a (consd 'b (consd 'c (consd 'd '()))))) = #0=(a (). #1=(b #0#. #2=(c #1# d #2#))) (dcar s) = a (dcir s) = () (dcdr s) = #0=(b (a (). #0#). #1=(c #0# d #1#)) (dcar (dcdr s)) = b (dcir (dcdr s)) = #0=(a (). #1=(b #0#. #2=(c #1# d #2#))) (dcdr (dcdr s)) = #1=(c #0=(b (a (). #0#). #1#) d #1#) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
36 ;;; PREDAVANI ARGUMENTU PROCEDURAM (define add2 (lambda (x) (set! x (+ x 2)) x)) (define val 10) (add2 val) = 12 val = 10 ;; Chceme umoznit predevat argumenty,,odkazem'' ;; Vytvorime: BOX = mutovatelny kontainer na hodnotu Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
37 Metody předávání argumentů procedurám Předávání parametrů = metoda navázání parametrů na formální argumenty souvisí s příkazem přiřazení: A := B A... L-hodnota... paměťové místo, na které ukládáme B... R-hodnota... obsah, který ukládáme Volání hodnotou (Call by Value) volané proceduře jsou předány R-hodnoty argumentů hodnoty jsou uchovávána (vázány) v lokálním prostředí volaná procedura nemůže přiřazovat hodnoty přes argumenty jazyky: Scheme, LISP, C Volání odkazem (Call by Reference) volané proceduře jsou předány L-hodnoty argumentů volaná procedura má k dispozici odkazy na úložiště hodnot přiřazení do proměnné v těle procedury mění hodnotu argumentu v prostředí ze kterého byla procedura volána jazyky: C++ (reference &), PL1 Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
38 Metody předávání argumentů procedurám (pokr.) Volání hodnotou-výsledkem (Call by Value-Result) někdy se principu říká Copy-restore Linkage volané proceduře jsou předány L-hodnoty hodnoty jsou uchovávána (vázány) v lokálním prostředí po dokončení výpočtu se provede kopie lokálně uložených hodnot na paměťová místa předaných argumentů zdánlivě totéž jako volání odkazem rozdíl je například při paralelním vyhodnocování jazyky: FORTRAN, MPD Volání jménem (Call by Name) volané proceduře jsou předána jména argumentů pokaždé, když je během vyhodnocování těla procedury narazeno na argument zastupovaný jménem, je toto jméno vyhodnoceno jazyky: Algol 60, makra v jazyku C (přísně vzato nejsou procedury) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
39 ;;; BOX (MUTOVATELNY KONTAINER NA HODNOTU) ;; vytvori box: novy objekt reagujici na dva signaly ;; signal SET... zapis hodnotu do boxu ;; signal GET... vrat hodnotu z boxu (define make-box (lambda (value) (lambda (signal. new-value) (cond ((equal? signal 'get) value) ((equal? signal 'set) (set! value (car new-value))) (else "neznamy signal"))))) ; Priklad: (define val (make-box 10)) (val 'get) = 10 (val 'set 100) (val 'get) = 100 Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
40 ;; Priklad: ;; vypocti faktorial a zapis vysledek do argumentu ;; vraci vzdy symbol 'hotovo (define proc (lambda (box n) (letrec ((f (lambda (n) (if (= n 1) 1 (* n (f (- n 1))))))) (box 'set (f n)) 'hotovo))) ; pouziti: (proc val 20) = hotovo (val 'get) = Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
41 ;;; DALSI MUTOVATELNE ELEMENTY: vektory (analogie pole) ;; vytvareni vektoru pomoci hodnot (vector) = #0() (vector ) = #2( ) (vector ) = #3(10) (vector 'ahoj 'svete) = #2(ahoj svete) (vector 1 #f 'blah) = #3(1 #f blah) ;; vrat delku vektoru (vector-length (vector)) = 0 (vector-length (vector 'a 'b 'c)) = 3 ;; vytvareni vektoru o dane delce (hodnoty nespecif.) (make-vector 10) = #10(0) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
42 ;; naplneni vektoru jednou hodnotou (define v (make-vector 10)) (vector-fill! v 'blah) v = #10(blah) ;; vytvareni vektoru o dane delce s pocatecnim naplnenim (make-vector 10 'blah) = #10(blah) ;; ziskani hodnoty podle indexu / mutace hodnoty (define v (vector 'a 'b 'c 'd 'e 'f)) (vector-ref v 2) = c (vector-set! v 2 'blah) (vector-ref v 2) = blah v = #6(a b blah d e f) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
43 ;; muzeme definovat dalsi procedury, treba: ;; build-vector (analogicky jako build-list) (define build-vector (lambda (len f) (let ((new-vector (make-vector len))) (let iter ((i 0)) (if (>= i len) new-vector (begin (vector-set! new-vector i (f i)) (iter (+ i 1)))))))) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
44 Prace se seznamy / vektory:,,stejne PROCEDURY'' MAJI JINOU SLOZITOST ;;;; POROVNANI SLOZITOSTI (ZHRUBA) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; build-list O(n) build-vector O(n) ; car O(1) vector-car O(1) ; cdr O(1) vector-cdr O(n) ; cons O(1) cons-vector O(n) ; length O(n) vector-length O(1) ; list-ref O(n) vector-ref O(1) ; list-set! O(n) vector-set! O(1) ; map O(n) vector-map O(n) Vilém Vychodil (UP Olomouc) PP II, Př. 2: Mutace 22. února / 85
PARADIGMATA PROGRAMOVÁNÍ 2A MUTACE
KATEDRA INFORMATIKY, P ÍRODOV DECKÁ FAKULTA UNIVERZITA PALACKÉHO, OLOMOUC PARADIGMATA PROGRAMOVÁNÍ 2A MUTACE Slajdy vytvo ili Vilém Vychodil a Jan Kone ný Jan Kone ný (KI, UP Olomouc) PP 2A, Lekce 2 Mutace
PARADIGMATA PROGRAMOVÁNÍ 2 PŘÍSLIBY A LÍNÉ VYHODNOCOVÁNÍ
KATEDRA INFORMATIKY, PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITA PALACKÉHO, OLOMOUC PARADIGMATA PROGRAMOVÁNÍ 2 PŘÍSLIBY A LÍNÉ VYHODNOCOVÁNÍ Slajdy vytvořili Vilém Vychodil a Jan Konečný (KI, UP Olomouc) PP 2, Lekce
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
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
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
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
Paradigmata programování II Korutiny a nedeterminismus
Paradigmata programování II Korutiny a nedeterminismus Vilém Vychodil Katedra informatiky, Univerzita Palackého v Olomouci 27. dubna 2006 Vilém Vychodil (UP Olomouc) PP II, Př. 9: Korutiny, nedeterminismus
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ší
Paradigmata programování II Přednáška 6: Líné vyhodnocování, proudy a kešované vyhodnocování
Paradigmata programování II Přednáška 6: Líné vyhodnocování, proudy a kešované vyhodnocování Vilém Vychodil Katedra informatiky, Univerzita Palackého v Olomouci 22. března 2007 Vilém Vychodil (UP Olomouc)
FUNKCIONÁLNÍ A LOGICKÉ PROGRAMOVÁNÍ 3. CVIČENÍ
FUNKCIONÁLNÍ A LOGICKÉ PROGRAMOVÁNÍ 3. CVIČENÍ 2011 Jan Janoušek MI-FLP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Page 1 of 6 Cviceni 3 Obsah seznamy, cons-buňka, car, cdr, first,
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í
PARADIGMATA PROGRAMOVÁNÍ 2 KORUTINY, NEDETERMINISMUS
KATEDRA INFORMATIKY, P ÍRODOV DECKÁ FAKULTA UNIVERZITA PALACKÉHO, OLOMOUC PARADIGMATA PROGRAMOVÁNÍ 2 KORUTINY, NEDETERMINISMUS Slajdy vytvo ili Vilém Vychodil a Jan Kone ný (KI, UP Olomouc) PP 2, Lekce
PARADIGMATA PROGRAMOVÁNÍ 2A MAKRA III
KATEDRA INFORMATIKY, P ÍRODOV DECKÁ FAKULTA UNIVERZITA PALACKÉHO, OLOMOUC PARADIGMATA PROGRAMOVÁNÍ 2A MAKRA III Slajdy vytvo ili Vilém Vychodil a Jan Kone ný (KI, UP Olomouc) PP 2A, Lekce 5 Makra III 1
1. Od Scheme k Lispu
KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI www.inf.upol.cz Michal Krupka krupka.inf.upol.cz michal.krupka@upol.cz 7. listopadu, 77 46 Olomouc Paradigmata programování poznámky k přednášce. Od
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
PARADIGMATA PROGRAMOVÁNÍ 2 AKTUÁLNÍ POKRAƒOVÁNÍ
KATEDRA INFORMATIKY, P ÍRODOV DECKÁ FAKULTA UNIVERZITA PALACKÉHO, OLOMOUC PARADIGMATA PROGRAMOVÁNÍ 2 AKTUÁLNÍ POKRAƒOVÁNÍ Slajdy vytvo ili Vilém Vychodil a Jan Kone ný (KI, UP Olomouc) PP 2, Lekce 8 Aktuální
Přednáška 3. Rekurze 1
Paradigmata programování 1 Přednáška 3. Rekurze 1 Michal Krupka KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI Obsah 1 Příklady 2 Rekurzivní procedury a rekurzivní výpočetní proces 3 Další příklady
Dynamické datové struktury I.
Dynamické datové struktury I. Seznam. Fronta. Zásobník. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz
Paradigmata programování 2
Paradigmata programování 2 6. cvičení Radek Janoštík Univerzita Palackého v Olomouci 18.3.2019 Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 18.3.2019 1 / 11 Vedlejší efekt
PARADIGMATA PROGRAMOVÁNÍ 2A MAKRA I
KATEDRA INFORMATIKY, P ÍRODOV DECKÁ FAKULTA UNIVERZITA PALACKÉHO, OLOMOUC PARADIGMATA PROGRAMOVÁNÍ 2A MAKRA I Slajdy vytvo ili Vilém Vychodil a Jan Kone ný (KI, UP Olomouc) PP 2A, Lekce 3 Makra I 1 / 35
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Lineární spojový seznam (úvod do dynamických datových struktur)
Lineární spojový seznam (úvod do dynamických datových struktur) Jan Hnilica Počítačové modelování 11 1 Dynamické datové struktury Definice dynamické struktury jsou vytvářeny za běhu programu z dynamicky
Dynamické datové struktury IV.
Dynamické datové struktury IV. Prioritní fronta. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra
int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N
Struktura (union) - struktura a union jsou složené typy, které "v sobě" mohou obsahovat více proměnných - struktura obsahuje v každém okamžiku všechny své proměnné, union obsahuje (=je "aktivní") pouze
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
Abstraktní datové typy
Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní datové typy BI-PA2, 2011, Přednáška 10 1/27 Abstraktní datové typy Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky,
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:
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
Šablony, kontejnery a iterátory
7. října 2010, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 21 Šablona funkce/metody Šablona je obecný popis (třídy, funkce) bez toho, že by
PB161 Programování v jazyce C++ Přednáška 3
PB161 Programování v jazyce C++ Přednáška 3 Kontejnery Iterátory Algoritmy Nikola Beneš 4. října 2016 PB161 přednáška 3: kontejnery, iterátory, algoritmy 4. října 2016 1 / 25 Standardní knihovna C++ Už
(pracovní verze textu určená pro studenty)
KATEDRA INFORMATIKY PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITA PALACKÉHO CVIČENÍ Z PARADIGMAT PROGRAMOVÁNÍ I Lekce 7: Akumulace Učební materiál k přednášce 16. listopadu 2006 (pracovní verze textu určená pro studenty)
FUNKCIONÁLNÍ A LOGICKÉ PROGRAMOVÁNÍ 5. CVIČENÍ
FUNKCIONÁLNÍ A LOGICKÉ PROGRAMOVÁNÍ 5. CVIČENÍ 2011 Jan Janoušek MI-FLP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Page 1 of 5 Lekce 5 Obsah sekvence, sequencep, subseq, reverse,
Lineární datové struktury
Lineární datové struktury 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 TUO) Lineární datové
Kolekce, cyklus foreach
Kolekce, cyklus foreach Jen informativně Kolekce = seskupení prvků (objektů) Jednu již známe pole (Array) Kolekce v C# = třída, která implementuje IEnumerable (ICollection) Cyklus foreach ArrayList pro
Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci
Základy programovaní 4 (Java) Stream API Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci Petr Krajča (UP) KMI/ZP4JV 5. listopad, 2014 1 / 10 Stream API Java 8 nový přístup k práci s kolekcemi
Více o konstruktorech a destruktorech
Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení
Slepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p
Hanojská věž Stavový prostor 1. množina stavů S = {s} 2. množina přechodů mezi stavy (operátorů) Φ = {φ} s k = φ ki (s i ) zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3] který tah
PROGRAMOVÁNÍ V C++ CVIČENÍ. Michal Brabec
PROGRAMOVÁNÍ V C++ CVIČENÍ Michal Brabec ARCHITECTURE Input 2 / 15 TASK Vytvořte základní data pro filesystem (zatím v main) Jednu autorizační autoritu Jeden registr souborů Cyklus který zpracovává vstup
Abstraktní datové typy FRONTA
Abstraktní datové typy FRONTA Fronta je lineární datová struktura tzn., že ke každému prvku s výjimkou posledního náleží jeden následník a ke každému prvku s výjimkou prvního náleží jeden předchůdce. Do
Stromy, haldy, prioritní fronty
Stromy, haldy, prioritní fronty prof. Ing. Pavel Tvrdík CSc. Katedra počítačů FEL České vysoké učení technické DSA, ZS 2008/9, Přednáška 6 http://service.felk.cvut.cz/courses/x36dsa/ prof. Pavel Tvrdík
Lisp 7-1. opakování destruktivních změn seznamů
Lisp 7-1 opakování destruktivních změn seznamů Seznam bez posledního prvku - destruktivně: ;velmi důležité si uvědomit jak to funguje.. zejména návratová hodnota funkce (defun bez_posledniho(s ((null (cdr
Programování 3. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015
Programování 3. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Umíme z minulé hodiny Implementace zásobníku a fronty pomocí
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
Šablony, kontejnery a iterátory
11. března 2015, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 31 Obsah přednášky 1 Šablony 2 Abstraktní datové struktury 3 Iterátory 4 Array
Prioritní fronta, halda
Prioritní fronta, halda Priority queue, heap Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2018 1 / 26 Prioritní fronta Halda Heap sort 2 / 26 Prioritní fronta (priority queue) Podporuje
Mělká a hluboká kopie
Karel Müller, Josef Vogel (ČVUT FIT) Mělká a hluboká kopie BI-PA2, 2011, Přednáška 5 1/28 Mělká a hluboká kopie Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta
Datové struktury 2: Rozptylovací tabulky
Datové struktury 2: Rozptylovací tabulky prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy
Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal
Databázové systémy - SQL * definice dat * aktualizace * pohledy Tomáš Skopal Osnova přednášky definice dat definice (schémat) tabulek a integritních omezení CREATE TABLE změna definice schématu ALTER TABLE
Programování v C++, 2. cvičení
Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule
ABSTRAKTNÍ DATOVÉ TYPY (ADT)
ABSTRAKTNÍ DATOVÉ TYPY (ADT) hierarchie abstrakcí: nejvyšší úroveň ZOO DruhZvirat celá čísla, řetězce nejnižší úroveň bity Abstrahujeme od - reprezentace (implementace) dat - realizace (implementace) operací
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
2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.
Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus
PB161 Programování v jazyce C++ Přednáška 3
PB161 Programování v jazyce C++ Přednáška 3 Kontejnery Iterátory Algoritmy Nikola Beneš 2. října 2018 PB161 přednáška 3: kontejnery, iterátory, algoritmy 2. října 2018 1 / 27 Automatická dedukce typů (od
ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)
ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) Strom / tree uzel, vrchol / node, vertex hrana / edge vnitřní uzel
Da D to t v o é v ty t py IB111: Datové typy
Datové typy IB111: Datové typy Data a algoritmizace jaká data potřebuji pro vyřešení problému? jak budu data reprezentovat? jaké operaci s nimi potřebuji provádět? Navržení práce s daty je velice důležité
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
Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4
Fronta (Queue) Ú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 Fronta uplatňuje mechanismus přístupu FIFO first
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
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é
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í
Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.
Stromy Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol., 2018, B6B36DSA 01/2018, Lekce 9 https://cw.fel.cvut.cz/wiki/courses/b6b36dsa/start
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é
Amortizovaná složitost. Prioritní fronty, haldy (binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost
Amortizovaná složitost. Prioritní fronty, haldy binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost 1. Asymptotické odhady Asymptotická složitost je deklarována na základě
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í
Programování v jazyce JavaScript
Programování v jazyce JavaScript Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Funkce podrobněji BI-JSC Evropský sociální fond
Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí
Kolekce obecně Seznamy a iterátory doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Kolekce ::= homogenní sada prvků
Ú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
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ů
Struktura programu v době běhu
Struktura programu v době běhu Miroslav Beneš Dušan Kolář Struktura programu v době běhu Vztah mezi zdrojovým programem a činností přeloženého programu reprezentace dat správa paměti aktivace podprogramů
Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program
Denotační sémantika programovacího jazyka doc. Dr. Ing. Miroslav Beneš katedra informatiky, A-1007 59 732 4213 Obsah přednášky Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup
Programování v jazyce JavaScript
Programování v jazyce JavaScript Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Anonymní funkce BI-JSC Evropský sociální fond
4. Rekurze. BI-EP1 Efektivní programování Martin Kačer
4. Rekurze BI-EP1 Efektivní programování 1 ZS 2011/2012 Ing. Martin Kačer, Ph.D. 2010-11 Martin Kačer Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze
Základní datové struktury III: Stromy, haldy
Základní datové struktury III: Stromy, haldy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní
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é
Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz
Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz (2 + 5) * (13-4) * + - 2 5 13 4 - listy stromu obsahují operandy (čísla) - vnitřní uzly obsahují operátory (znaménka)
Algoritmy a datové struktury
Algoritmy a datové struktury Stromy 1 / 32 Obsah přednášky Pole a seznamy Stromy Procházení stromů Binární stromy Procházení BS Binární vyhledávací stromy 2 / 32 Pole Hledání v poli metodou půlení intervalu
Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.
Obsah přednášky: Definice pojmů o datový typ, o abstraktní datový typ Datové struktury Abstraktní datové typy a jejich implementace o Fronta (Queue) o Zásobník (Stack) o Množina (Set) Algoritmizace (Y36ALG),
Definice uživatelského typu. Uživatelem definované typy. Součinové datové typy. Součtové datové typy. FLP - Uživatelem definované typy
Uživatelem definované typy Ing. Lumír Návrat katedra informatiky, A 1018 59 732 3252 Definice uživatelského typu data Color = Red Green Blue Color typový konstruktor Red / Green / Blue datové konstruktory
Jazyk C++ II. STL knihovna kontejnery část 1
Jazyk C++ II STL knihovna kontejnery část 1 AR 2013/2014 Jazyk C++ II STL kontejnery Kontejnery jsou třídy, jejichž instance slouží k uskladňování dat. Každý druh kontejneru má své výhody a nevýhody. Kontejnery
Spojový seznam. Jan Kybic.
Spojový seznam Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2017 1 / 25 Složitost operací u lineárních datových struktur v Pythonu operace zásob. fronta pole pole řetězce přidej na začátek
PB161 6. přednáška (26. října 2015)
PB161 6. přednáška (26. října 2015) Standardní knihovna C++ obsahuje řadu částí, některé už jsme viděli (strings, I/O streams) mimo jiné obsahuje i knihovní funkce ze standardní knihovny jazyka C jiné
Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++
Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++ Globální konstantní proměnné Konstantní proměnné specifikujeme s klíčovým slovem const, tyto konstantní proměné
Anotace. Spojové seznamy, haldy. AVL-stromy, A-B stromy. Martin Pergel,
Anotace Spojové seznamy, fronta a zásobník. Vyvážené binární stromy, AVL-stromy, červeno-černé stromy, A-B stromy. Hashování, haldy. Typologie spojových seznamů jednosměrný a obousměrný prvek ukazuje jen
Konstruktory a destruktory
Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,
ABSTRAKTNÍ DATOVÉ TYPY
Jurdič Radim ABSTRAKTNÍ DATOVÉ TYPY Veškeré hodnoty, s nimiž v programech pracujeme, můžeme rozdělit do několika skupin zvaných datové typy. Každý datový typ představuje množinu hodnot, nad kterými můžeme
Teorie programovacích jazyků
Vysoké učení technické v Brně Fakulta informačních technologií Teorie programovacích jazyků Interprety a předávání parametrů 16. 6. 2003 Luboš Lorenc Obsah 1 Interprety... 1 1.1 Jednoduchý interpret...
Programování v C++ 1, 16. cvičení
Programování v C++ 1, 16. cvičení binární vyhledávací strom 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí minule procvičené
ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)
ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) Strom / tree uzel, vrchol / node, vertex hrana / edge vnitřní uzel
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é
Dynamické datové struktury III.
Dynamické datové struktury III. Halda. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované
Úvod do databázových systémů
Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Úvod do databázových systémů Cvičení 8 Ing. Petr Lukáš petr.lukas@vsb.cz Ostrava, 2014 Opakování Entita Entitní typ
2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky
Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky 25 Pole Datová struktura kolekce elementů (hodnot či proměnných), identifikovaných jedním nebo více indexy, ze kterých
bfs, dfs, fronta, zásobník, prioritní fronta, halda
bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 19. září 2017 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší
Č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
Datové struktury 1: Základní datové struktury
Datové struktury 1: Základní datové struktury prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní
Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody
Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro
X36UNX 16. Numerické výpočty v sh příkazy expr, bc, dc. Zdeněk Sojka
X36UNX 16 Numerické výpočty v sh příkazy expr, bc, dc Zdeněk Sojka sojkaz1@fel.cvut.cz dc desk calculator - zadávání příkazů postfixově - data se ukládají do stacku - příkazy obyčejně pracují s jedním
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)
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
Abstraktní třídy, polymorfní struktury
Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní třídy, polymorfní struktury BI-PA2, 2011, Přednáška 9 1/32 Abstraktní třídy, polymorfní struktury Ing. Josef Vogel, CSc Katedra softwarového inženýrství