Pole, množina, tabulka

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

Download "Pole, množina, tabulka"

Transkript

1 Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 1/53 Pole, množina, tabulka Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta informačních technologii, ČVUT v Praze Karel Müller, Josef Vogel, 2011 Programování a algoritmizace 2, BI-PA2, 2011, Přednáška 11 BI-PA2 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

2 Témata ADT pole (Array) jednorozměrné a vícerozměrné pole mapovací funkce pole přístupové vektory pro vícerozměrné pole ADT množina (Set) základní a množinové operace implementace pomocí charakteristického vektoru implementace neseřazeným polem implementace seřazeným polem ADT tabulka (Table, Map) základní operace implementace tabulkou s přímým přístupem implementace neseřazeným polem implementace seřazeným polem Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 2/53

3 ADT Pole Pole (array) je sekvenční kontejner, který organizuje prvky v n dimenzích a umožňuje náhodný přístup (random acces) s konstantní složitostí k prvkům pomocí n-tice indexů Pole je obecně dáno: typem prvků počtem dimenzí dolní a horní mezí indexu pro každou dimenzi (množiny indexů jsou uspořádané) Typ N-rozměrného pole lze specifikovat výrazem kde array [d 1.. h 1, d 2.. h 2,... d N.. h N ] of T T je typ prvků pole N je počet dimenzí (indexů) d i je dolní mez i-tého indexu h i je horní mez i-tého indexu Pro počet prvků pole platí M = 1 i N (h i d i + 1) Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 3/53

4 Jednorozměrné pole Vnitřní reprezentací jednorozměrného pole typu array [d.. h] of T je vždy souvislý úsek paměti, ve kterém jsou prvky pole uloženy jeden za druhým Vnitřní reprezentaci pole lze považovat za pole typu array [0.. h-d+1] of T Mapovací funkce map pole typu array [d.. h] of T mapuje prvky tohoto pole na prvky pole vnitřní reprezentace, tj. indexu i z intervalu d až h přiřazuje index vnitřní reprezentace z intervalu 0 až h-d+1 Pro pole typu je array [d.. h] of T map(i) = i - d Je-li dolní mez indexu 0, pak pro mapovací funkci platí map(i) = i (např. v jazyku C, C++) Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 4/53

5 p11\array\array.h Jednorozměrné pole Pro ADT jednorozměrné pole mohou být specifikovány další operace, jako například rozšíření (zvýšení počtu prvků) Šablona pro ADT jednorozměrné rozšiřitelné pole (s hlubokou kopií) byla uvedena v příkladech k přednášce 7, zde budeme používat její deklaraci: template <class Elem> class Array { public: explicit Array(int=2); Array(const Array&); ~Array(); int length() const {return len; Elem& operator[](int); const Elem& operator[](int) const; Array& operator=(const Array&); void extend(int); private: Elem* array; int len; void copy(const Array&); ; Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 5/53

6 Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 6/53 Vícerozměrné pole Typ vícerozměrného (N>1) pole lze specifikovat výrazem array [d 1.. h 1, d 2.. h 2,... d N.. h N ] of T Vnitřní reprezentací vícerozměrného pole může (mohou) být: souvislý úsek paměti, ve kterém jsou prvky umístěny po řádcích (nejrychleji se mění poslední index) souvislý úsek paměti, ve kterém jsou prvky umístěny po sloupcích (nejrychleji se mění první index) přístupové (Iliffe-ovy) vektory Příklad pro pole a typu array [1..3, 1..2] of T po řádcích a 1,1 a 1,2 a 2,1 a 2,2 a 3,2 a 3,2 po sloupcích a 1,1 a 2,1 a 1,2 a 2,2 a 1,3 a 2,3 přístupový vektor a 1,1 a 1,2 a 2,1 a 2,2 a 3,1 a 3,2

7 Mapovací funkce pole Umístění prvků pole typu array [d 1.. h 1, d 2.. h 2,... d N.. h N ] of T v souvislém úseku paměti array [0.. M-1] of T kde M je počet prvků pole (viz slajd 2) určuje mapovací funkce, která každé N-tici indexů přiřazuje index z intervalu 0 až M-1 Příklady mapovací funkce pro N = 1, 2, 3 a umístění po řádcích : array [d.. h] of T map(i) = i d array [d 1.. h 1, d 2.. h 2 ] of T map(i 1, i 2 ) = (i 1 d 1 )n 2 + (i 2 d 2 ) kde n 2 = h 2 d array [d 1.. h 1, d 2.. h 2, d 3.. h 3 ] of T map(i 1, i 2, i 3 ) = (i 1 d 1 )n 2 n 3 + (i 2 d 2 )n 3 + (i 3 d 3 ) kde n 2 = h 2 d 2 + 1, n 3 = h 3 d Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 7/53

8 p11\matrix\matrix.h Příklad matice uložená po řádcích Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 8/53 Příklad šablony pro dvojrozměrné (dynamicky alokované) pole, kde parametry konstruktoru je stanoven počet řádků a počet sloupců (dolní meze indexu v obou dimenzích jsou 0): template <class Elem> class Matrix { public: Matrix(int, int); Matrix(const Matrix&); ~Matrix(); int getrows() const {return rows; int getcols() const {return cols; Elem& operator()(int, int); const Elem& operator()(int, int) const; Matrix& operator=(const Matrix&); Matrix operator+(const Matrix&) const; private: Elem* array; int rows, cols; void copy(const Matrix&); ;

9 p11\matrix\main.cpp Příklad matice uložená po řádcích Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 9/53 Příklad použití: int main() { try { int r=0, s=0; cout << "zadej pocet radku a pocet sloupcu: "; cin >> r >> s; Matrix<int> m1(r, s), m2(r,s), m3(r,s); cout << "zadej prvni matici " << endl; cin >> m1; cout << "zadej druhou matici " << endl; cin >> m2; m3 = m1+m2; cout << "soucet matic je\n"; cout << m3 << endl; catch (const char* s) {cout << s << endl; system("pause"); return 0;

10 p11\array\main.cpp Přístupové vektory šablona Array Pro reprezentaci vícerozměrného pole pomocí přístupových vektorů můžeme použít šablonu rozšiřitelného pole Array (viz slajd 4) Příklad pro dvojrozměrné pole 3x2: typedef Array<int> Vector; typedef Array<Vector> Matrix; int main() { Matrix a(3); // parametrem konstruktoru je dán počet řádků... // počet sloupců je dán implicitní hodnotou par. konstr. Array 3 2 a 1,1 a 1,2 2 2 a 2,1 a 2,2 a 3,1 a 3,2 Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 10/53

11 p11\array\main.cpp Přístupové vektory šablona Array K prvkům pole Matrix se přistupuje pomocí přetíženého operátoru [] Příklad: funkce pro výpis prvků void print(ostream& os, const Matrix& m) { int r = m.length(); for (int i=0; i<r; i++) { int s = m[i].length(); for (int j=0; j<s; j++) os << m[i][j] << ' '; os << endl; Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 11/53

12 p11\array\main.cpp Přístupové vektory šablona Array Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 12/53 Technika přístupových vektorů (šablona Array) umožňuje, aby např. v případě dvojrozměrného pole měly řádky různý počet prvků Příklad int main() { Matrix a(3); // pole 3x2... Vector v(4); a[1] = v; a 1,1 a 1,2 4 2 a 2,1 a 2,2 a 2,3 a 2,4 a 3,1 a 3,2

13 Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 13/53 ADT Množina V programování se množinou rozumí kontejner prvků typu T, který neobsahuje duplicity (prvky se stejnou hodnotou) a umožňuje alespoň tyto základní operace: vložení prvku do množiny test příslušnosti prvku k množině odebrání prvku Signatura základních operací: init: -> Set ins(_,_): Elem,Set -> Set del(_,_): Elem,Set -> Set incl(_,_): Elem,Set -> bool Někdy jsou potřeba další operace: množinové operace sjednocení, průnik a rozdíl, relační operace rovnost, inkluze atd. výpis množiny vytvoření prázdné množiny vložení prvku do množ. odebrání prvku z množ. test příslušnosti k množ.

14 Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 14/53 Implementace ADT Množina Probereme několik způsobů implementace množiny Každou implementaci realizujeme pomocí třídy nebo šablony třídy V následující deklaraci jsou uvedeny operace, kterými se budeme zabývat: class Set { public: Set(); // inicializace prázdné množiny void ins(t); // vložení prvku void del(t); // odebrání prvku bool incl(t) const; // test příslušnosti Set operator+(const Set&) const; // sjednocení Set operator*(const Set&) const; // průnik bool operator==(const Set&) const; // test rovnosti bool operator<=(const Set&) const; // test inkluze friend ostream& operator<<(ostream&, const Set&); private:... ; Pro každý způsob implementace odhadneme složitost operací

15 Implementace ADT Množina Pro implementaci množiny lze použít: charakteristický vektor množiny (bitové pole) neseřazené pole seřazené pole jednosměrný spojový seznam uspořádaný spojový seznam binární vyhledávací strom rozptylovací (hash) tabulku Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 15/53

16 Implementace množiny charakteristickým vektorem Nejprve něco z matematiky: Mějme nosnou množinu X = {x 1, x 2,... x n. Pro A X definujeme charakteristický vektor χ A jako χ A = {c 1, c 2,... c n, kde c i = 1 pro x i A a c i = 0 jinak, 1 i n. Tvoří-li nosnou množinu interval celých čísel od min do max, pak množinu můžeme implementovat pomocí pole s prvky typu bool a indexy od min do max Pro zjednodušení implementace množinových operací budeme předpokládat min = 0, tzn. použijeme pole s indexy od 0 do max Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 16/53

17 Implementace množiny charakteristickým vektorem Implementaci operací nejprve popíšeme slovně s použitím této notace: a.pole a.pole[x] n a pole reprezentující charakteristický vektor množiny a prvek pole pro hodnotu x velikost (počet prvků) a.pole (počet prvků množiny je obvykle menší) Základní operace: operace implementace složitost a.ins(x) a.pole[x] = true O(1) a.del(x) a.pole[x] = false O(1) a.incl(x) výsledkem je a.pole[x] O(1) Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 17/53

18 Implementace množiny charakteristickým vektorem Množinové operace: operace implementace složitost a + b vytvoříme novou množinu kopíí množiny a, do které vložíme každý prvek množiny b O(n a +n b ) a * b a == b a <= b vytvoříme novou prázdnou množinu, do které vložíme každý prvek množiny a, který je obsažen v množině b výsledkem je true, když každý prvek a.pole[i] má stejnou hodnotu jako b.pole[i] výsledkem je true, když každý prvek množiny a je také prvkem množiny b O(n) O(n) O(n) Poznámky: n = max(n a, n b ) složitost provedení operace pro všechny prvky množiny a je O(n a ) Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 18/53

19 p11\set\set.h Třída Set Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 19/53 Množinu implementovanou charakteristickým vektorem můžeme realizovat třídou Set, ve které použijeme šablonu pro rozšiřitelné pole: // set.h #include "array.h" class Set { public: explicit Set(int=0); void ins(int); void del(int); bool incl(int) const; Set operator+(const Set&) const; Set operator*(const Set&) const; bool operator==(const Set&) const; bool operator<=(const Set&) const; friend ostream& operator<<(ostream&, const Set&); friend Set set(int=-1,...); private: Array<bool> arr; ;

20 p11\set\set.cpp Metody třídy Set Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 20/53 Set::Set(int m) : arr(m+1) { void Set::ins(int x) { if (x>=arr.length()) arr.extend(max(x+1, 2*arr.length())); try {arr[x] = true; catch (...) { void Set::del(int x) { try {arr[x] = false; catch (...) { bool Set::incl(int x) const { try {return arr[x]; catch (...) {return false;

21 p11\set\set.cpp Metody třídy Set Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 21/53 Set Set::operator+(const Set& y) const { int nx = arr.length(), ny = y.arr.length(); if (nx<ny) return y + *this; Set res = *this; for (int i=0; i<ny; i++) if (y.incl(i)) res.ins(i); return res; Set Set::operator*(const Set& y) const { int nx = arr.length(), ny = y.arr.length(); if (nx>ny) return y * *this; Set res; for (int i=0; i<nx; i++) if (incl(i) && y.incl(i)) res.ins(i); return res;

22 p11\set\set.cpp Metody třídy Set Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 22/53 bool Set::operator==(const Set& y) const { int nx = arr.length(), ny = y.arr.length(); if (nx>ny) return y==*this; for (int i=0; i<nx; i++) if (arr[i]!=y.arr[i]) return false; for (int i=nx; i<ny; i++) if (y.arr[i]) return false; return true; bool Set::operator<=(const Set& y) const { int n = arr.length(); for (int i=0; i<n; i++) if (arr[i] &&!y.incl(i)) return false; return true;

23 Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 23/53 p11\set\set.cpp Metody třídy Set ostream& operator<<(ostream& s, const Set& m) { bool mezera = false; s << '['; for (int i=0, n=m.arr.length(); i<n; i++) if (m.arr[i]) { s << (mezera? " " : "") << i; mezera = true; s<<']'; return s; Set set(int x,...) { va_list ppar; Set res; if (x<0) return res; res.ins(x); va_start(ppar, x); for (;;) { x = va_arg(ppar, int); if (x<0) break; res.ins(x); va_end(ppar); return res;

24 p11\set\sito.cpp Použití třídy Set Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 24/53 Soubor \p11\set\main1.cpp Soubor \p11\set\sito.cpp ilustruje použití třídy Set pro Eratosthenovo síto const int N = 1000; int main() { int i, j; Set a(n); for (int i=2; i<=n; i++) a.ins(i); int p = 2, pmax = (int)sqrt(n); do { // vypusteni vsech nasobku cisla p for (int i=p+p; i<=n; i+=p) a.del(i); // hledani nejblizsiho cisla k p do { p++; while (!a.incl(p)); while (p<=pmax); cout << a << endl; system("pause"); return 0;

25 Implementace množiny neseřazeným polem Princip: Prvky množiny se ukládají do neseřazeného pole (dynamicky alokovaného) Slovní popis základních operací: operace implementace složitost a.ins(x) a.del(x) sekvenční hledání prvku s hodnotou x, případně vložení x na první volné místo sekvenční hledání prvku s hodnotou x, pak posun dalších prvků o jedno místo doleva O(n a ) O(n a ) a.incl(x) sekvenční hledání prvku pole s hodnotou x O(n a ) Poznámka: n a je počet prvků množiny a (obvykle je to méně, než počet prvků pole) Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 25/53

26 Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 26/53 Implementace množiny neseřazeným polem Slovní popis množinových operací: operace implementace složitost a + b a * b a == b a <= b vytvoříme novou množinu kopií množiny a, do které vložíme každý prvek množiny b vytvoříme novou prázdnou množinu, do které vložíme každý prvek množiny a, který je též v množině b výsledkem je true, když množiny mají stejný počet prvků a každý prvek množiny a je též prvkem množiny b výsledkem je true, když každý prvek množiny a je též prvkem množiny b O(n a* n b ) O(n a* n b ) O(n a* n b ) O(n a* n b )

27 p11\set\arrset.h Šablona třídy ArrSet Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 27/53 template <class T> class ArrSet { public: explicit ArrSet(int=10); void ins(const T&); void del(const T&); bool incl(const T&) const; ArrSet operator+(const ArrSet&) const; ArrSet operator*(const ArrSet&) const; bool operator==(const ArrSet&) const; bool operator<=(const ArrSet&) const; ostream& print(ostream&) const; private: Array<T> arr; // rozsiritelne pole int num; // pocet prvku v mnozine int search(const T&) const; //vrati index prvku nebo -1 ;

28 p11\set\arrset.h Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 28/53 Šablony metod třídy ArrSet template <class T> ArrSet<T>::ArrSet(int m) : arr(m), num(0) { template <class T> int ArrSet<T>::search(const T& x) const { for (int i=0; i<num; i++) if (arr[i]==x) return i; return -1; template <class T> void ArrSet<T>::ins(const T& x) { if (search(x)>=0) return; if (num>=arr.length()) arr.extend(2*arr.length()); arr[num++] = x;

29 p11\set\arrset.h Šablony metod třídy ArrSet Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 29/53 template <class T> void ArrSet<T>::del(const T& x) { int k = search(x); if (k<0) return; for (k++; k<num; k++) arr[k-1] = arr[k]; num--; template <class T> bool ArrSet<T>::incl(const T& x) const { return search(x)>=0; template <class T> ArrSet<T> ArrSet<T>::operator+(const ArrSet<T>& y) const { ArrSet<T> res = *this; for (int i=0; i<y.num; i++) res.ins(y.arr[i]); return res;

30 p11\set\arrset.h Šablony metod třídy ArrSet template <class T> ArrSet<T> ArrSet<T>::operator*(const ArrSet<T>& y) const { ArrSet res; for (int i=0; i<num; i++) if (y.incl(arr[i])) res.ins(arr[i]); return res; template <class T> bool ArrSet<T>::operator==(const ArrSet<T>& y) const { if (num!=y.num) return false; for (int i=0; i<num; i++) if (!y.incl(arr[i])) return false; return true; template <class T> bool ArrSet<T>::operator<=(const ArrSet<T>& y) const { for (int i=0; i<num; i++) if (!y.incl(arr[i])) return false; return true; Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 30/53

31 Implementace množiny seřazeným polem Princip: Prvky množiny se ukládají do seřazeného pole (dynamicky alokovaného) Slovní popis základních operací: operace implementace složitost a.ins(x) vložení x do seřazeného pole O(n a ) a.del(x) binární hledání prvku s hodnotou x, pak posun dalších prvků o jedno místo doleva O(n a ) a.incl(x) binární hledání prvku pole s hodnotou x O(log(n a )) Poznámka: n a je počet prvků množiny a (obvykle je to méně, než počet prvků pole) Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 31/53

32 Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 32/53 Implementace množiny seřazeným polem Slovní popis množinových operací: operace implementace složitost a + b a * b a == b a <= b vytvoříme novou množinu kopií množiny a, do které vložíme každý prvek množiny b vytvoříme novou prázdnou množinu, do které vložíme každý prvek množiny a, který je též v množině b výsledkem je true, když množiny mají stejný počet prvků a každý prvek množiny a je též prvkem množiny b výsledkem je true, když každý prvek množiny a je též prvkem množiny b O(n a* log(n b )) O(n a* log(n b )) O(n a* log(n b )) O(n a* log(n b ))

33 p11\set\srtarrset.h Šablona třídy SrtArrSet Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 33/53 template <class T> class SrtArrSet { public: explicit SrtArrSet(int=10); void ins(const T&); void del(const T&); bool incl(const T&) const; SrtArrSet operator+(const SrtArrSet&) const; SrtArrSet operator*(const SrtArrSet&) const; bool operator==(const SrtArrSet&) const; bool operator<=(const SrtArrSet&) const; ostream& print(ostream&) const; private: Array<T> arr; // rozsiritelne pole int num; // pocet prvku v mnozine int search(const T&) const;// vrati index prvku nebo -1

34 p11\set\srtarrset.h Šablony metody třídy SrtArrSet Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 34/53 template <class T> SrtArrSet<T>::SrtArrSet(int m) : arr(m), num(0) { template <class T> int SrtArrSet<T>::search(const T& x) const { int d=0, h=num-1, k; while (d<=h) { k = (d+h)/2; if (x<arr[k]) h = k-1; else if (x>arr[k]) d = k+1; else return k; return -1;

35 p11\set\srtarrset.h Šablony metody třídy SrtArrSet Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 35/53 template <class T> void SrtArrSet<T>::ins(const T& x) { if (search(x)>=0) return; if (num>=arr.length()) arr.extend(2*arr.length()); // zatrideni noveho prvku int k=num-1; while (k>=0 && arr[k]>x) { arr[k+1] = arr[k]; k--; arr[k+1] = x; num++; template <class T> void SrtArrSet<T>::del(const T& x) { int k = search(x); if (k<0) return; for (k++; k<num; k++) arr[k-1] = arr[k]; num--;

36 p11\set\srtarrset.h Šablony metody třídy SrtArrSet Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 36/53 template <class T> bool SrtArrSet<T>::incl(const T& x) const { return search(x)>=0; template <class T> SrtArrSet<T> SrtArrSet<T>::operator+(const SrtArrSet<T>& y) const { SrtArrSet<T> res = *this; for (int i=0; i<y.num; i++) res.ins(y.arr[i]); return res; template <class T> SrtArrSet<T> SrtArrSet<T>::operator*(const SrtArrSet<T>& y) const { SrtArrSet res; for (int i=0; i<num; i++) if (y.incl(arr[i])) res.ins(arr[i]); return res;

37 p11\set\srtarrset.h Šablony metody třídy SrtArrSet Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 37/53 template <class T> bool SrtArrSet<T>::operator==(const SrtArrSet<T>& y) const { if (num!=y.num) return false; for (int i=0; i<num; i++) if (!y.incl(arr[i])) return false; return true; template <class T> bool SrtArrSet<T>::operator<=(const SrtArrSet<T>& y) const { for (int i=0; i<num; i++) if (!y.incl(arr[i])) return false; return true;

38 ADT Tabulka Tabulku (table, map) lze charakterizovat jako zobrazení z množiny klíčů do množiny hodnot ADT Tabulka je asociativní kontejner obsahující dvojice klíč-hodnota Signatura základních operací: init: -> Tab ins(_,_, _): Key,Value,Tab -> Tab del(_,_): Key,Tab -> Tab incl(_,_): Key,Tab -> bool read((_,_): Key,Tab -> Value vytvoření prázdné tabulky vložení prvku s daným klíčem a hodnotou. odebrání prvku s daným klíčem test, zda tabulka obsahuje prvek s daným klíčem čtení hodnoty prvku s daným klíčem Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 38/53

39 Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 39/53 Implementace ADT Tabulka Pro implementaci tabulky lze použít podobné techniky, jako pro množinu Poznámka: množina je vlastně tabulka, která klíčům přiřazuje hodnoty true nebo false Pro realizaci tabulky použijeme šablonu třídy Následující deklarace ukazuje, jaké metody zavedeme pro operace s tabulkou class Tab { Tab(); // inicializace prázdné tabulky void ins(key, Val); // vložení prvku do tabulky void del(key); // odebrání prvku z tabulky bool incl(key) const; // test existence prvku bool read(key, Val&) const; // čtení hodnoty prvku ;

40 Implementace ADT Tabulka Pro implementaci tabulky lze použít: pole, jehož indexy jsou klíče (tabulka s přímým přístupem) neseřazené pole seřazené pole jednosměrný spojový seznam uspořádaný spojový seznam binární vyhledávací strom rozptylovací (hash) tabulku Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 40/53

41 Tabulka s přímým přístupem Jsou-li klíči celá čísla od 0 do max, použijeme pro uložení hodnot pole, jehož indexy jsou klíče Prvek tabulky s klíčem k tedy bude mít hodnotu uloženou v prvku pole a[k] Je třeba rozlišit, zda klíči k odpovídá nějaká hodnota To lze např. tak, že z množiny možných hodnot vyčleníme jednu, která bude znamenat, že klíč nemá přiřazenou žádnou hodnotu (např. pro množinu hodnot typu string to může být prázdný řetězec) Tuto hodnotu označíme none Slovní popis operací: operace implementace složitost a.ins(k,v) a.pole[k] = v O(1) a.del(k) a.pole[k] = none O(1) a.incl(k) výsledkem je true, jestliže a.pole[k] none O(1) a.read(k,x) x = a.pole [k] O(1) Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 41/53

42 p11\table\diracctab.h Šablona třídy DirAccTab Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 42/53 Parametrem šablony třídy DirAccTab bude typ hodnot V a konstanta none typu V, která bude hodnotou prvku pole v případě, že klíč nemá přiřazenou hodnotu Pro uložení hodnot opět použijeme šablonu třídy realizující rozšiřitelné pole template <class V, V none> class DirAccTab { public: explicit DirAccTab(int=10); void ins(int, const V&); void del(int); bool incl(int) const; bool read(int, V&) const; ostream& print(ostream&) const; private: Array<V> arr; // rozsiritelne pole ;

43 p11\table\diracctab.h Šablony metod třídy DirAccTab Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 43/53 template <class V, V none> DirAccTab<V,none>::DirAccTab(int m) : arr(m+1) { for (int i=0; i<arr.length(); i++) arr[i] = none; template <class V, V none> void DirAccTab<V,none>::ins(int k, const V& v) { if (k>=arr.length()) arr.extend(max(k+1, 2*arr.length())); try {arr[k] = v; catch (...) { template <class V, V none> void DirAccTab<V,none>::del(int k) { try {arr[k] = none; catch (...) {

44 p11\table\diracctab.h Šablony metod třídy DirAccTab Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 44/53 template <class V, V none> bool DirAccTab<V,none>::incl(int k) const { try {return arr[k]!=none; catch (...) {return false; template <class V, V none> bool DirAccTab<V,none>::read(int k, V& v) const { try { if (arr[k]!=none) { v = arr[k]; return true; else return false; catch (...) {return false; Použití je v souboru p11\table\main1.cpp

45 Implementace tabulky neseřazeným polem Do neseřazeného pole se ukládají dvojice klíč-hodnota Slovní popis základních operací: operace implementace složitost a.ins(k,v) vložení dvojice <k,v> na první volné místo O(1) a.del(k) sekvenční hledání prvku s klíčem k, pak posun dalších prvků o jedno místo doleva O(n) a.incl(k) sekvenční hledání prvku pole s klíčem k O(n) a.read(k,x) sekvenční hledání prvku pole s klíčem k a pak uložení hodnoty do proměnné x O(n) Realizovat budeme šablonou třídy ArrTab, která bude mít parametr K označující typ klíčů a V označující typ hodnot Pro dvojice klíč-hodnota zavedeme šablonu třídy TabElem s parametry K a V Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 45/53

46 Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 46/53 p11\table\arrtab.h Šablona třídy ArrTab template <class K, class V> struct TabElem { K key; V val; TabElem(K k, V v) : key(k), val(v) { TabElem() { ; template <class K, class V> class ArrTab { public: explicit ArrTab(int=10); void ins(const K&, const V&); void del(const K&); bool incl(const K&) const; bool read(const K&, V&) const; ostream& print(ostream&) const; private: Array<TabElem<K,V> > arr; // rozsiritelne pole int num; // pocet prvku v tabulce int search(const K&) const; // vrati index prvku nebo -1 ;

47 p11\table\arrtab.h Šablony metod třídy ArrTab Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 47/53 template <class K, class V> ArrTab<K,V>::ArrTab(int m) : arr(m), num(0) { template <class K, class V> int ArrTab<K,V>::search(const K& k) const { for (int i=0; i<num; i++) if (arr[i].key==k) return i; return -1; template <class K, class V> void ArrTab<K,V>::ins(const K& k, const V& v) { int j = search(k); if (j>=0) { arr.setat(j, TabElem<K,V>(k,v)); return; if (num>=arr.length()) arr.extend(2*arr.length()); arr[num++] = TabElem<K,V>(k,v);

48 p11\table\arrtab.h Šablony metod třídy ArrTab Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 48/53 template <class K, class V> void ArrTab<K,V>::del(const K& k) { int j = search(k); if (j<0) return; for (j++; j<num; j++) arr[j-1] = arr[j]; num--; template <class K, class V> bool ArrTab<K,V>::incl(const K& k) const { return search(k)>=0; template <class K, class V> bool ArrTab<K,V>::read(const K& k, V& v) const { int j = search(k); if (j<0) return false; v = arr[j].val; return true;

49 Implementace tabulky seřazeným polem Do seřazeného pole se ukládají dvojice klíč-hodnota Slovní popis základních operací: operace implementace složitost a.ins(k,v) vložení dvojice <k,v> do seřazeného pole O(n) a.del(k) binární hledání prvku s klíčem k, pak posun dalších prvků o jedno místo doleva O(n) a.incl(k) binární hledání prvku pole s klíčem k O(log(n)) a.read(k,x) binární hledání prvku pole s klíčem k a pak uložení hodnoty do proměnné x O(log(n)) Realizovat budeme šablonou třídy SrtArrTab, která bude mít parametr K označující typ klíčů a V označující typ hodnot Pro dvojice klíč-hodnota zavedeme šablonu třídy TabElem s parametry K a V Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 49/53

50 Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 50/53 p11\table\srtarrtab.h Šablona třídy SrtArrTab template <class K, class V> struct TabElem { K key; V val; TabElem(K k, V v) : key(k), val(v) { TabElem() { ; template <class K, class V> class SrtArrTab { public: explicit SrtArrTab(int=10); void ins(const K&, const V&); void del(const K&); bool incl(const K&) const; bool read(const K&, V&) const; ostream& print(ostream&) const; private: Array<TabElem<K,V> > arr; // rozsiritelne pole int num; // pocet prvku v tabulce int search(const K&) const; // vrati index prvku nebo -1 ;

51 p11\table\srtarrtab.h Šablony metod třídy SrtArrTab Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 51/53 template <class K, class V> SrtArrTab<K,V>::SrtArrTab(int m) : arr(m), num(0) { template <class K, class V> int SrtArrTab<K,V>::search(const K& k) const { int d=0, h=num-1, j; while (d<=h) { j = (d+h)/2; if (k<arr[j].key) h = j-1; else if (k>arr[j].key) d = j+1; else return j; return -1;

52 p11\table\srtarrtab.h Šablony metod třídy SrtArrTab Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 52/53 template <class K, class V> void SrtArrTab<K,V>::ins(const K& k, const V& v) { int j = search(k); if (j>=0) { arr[k] = TabElem<K,V>(k,v); return; if (num>=arr.length()) arr.extend(2*arr.length()); // zatrideni noveho prvku j=num-1; while (j>=0 && arr[j].key>k) { arr[j+1] = arr[j]; j--; arr[j+1] = TabElem<K,V>(k,v); num++; template <class K, class V> void SrtArrTab<K,V>::del(const K& k) { int j = search(k); if (j<0) return; for (j++; j<num; j++) arr[j-1] = arr[j]; num--;

53 p11\table\srtarrtab.h Šablony metod třídy SrtArrTab Karel Müller, Josef Vogel (ČVUT FIT) Pole, množina, tabulka BI-PA2, 2011, Přednáška 11 53/53 template <class K, class V> bool SrtArrTab<K,V>::incl(const K& k) const { return search(k)>=0; template <class K, class V> bool SrtArrTab<K,V>::read(const K& k, V& v) const { int j = search(k); if (j<0) return false; v = arr[j].val; return true;

Abstraktní datové typy

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,

Více

Mělká a hluboká kopie

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

Více

Další příklady. Katedra softwarového inženýrství. Katedra teoretické informatiky, Fakulta informačních technologii, ČVUT v Praze. Karel Müller, 2011

Další příklady. Katedra softwarového inženýrství. Katedra teoretické informatiky, Fakulta informačních technologii, ČVUT v Praze. Karel Müller, 2011 Karel Müller (ČVUT FIT) BI-PA2, 2011, Cvičení 11-13 1/5 Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta informačních technologii, ČVUT v Praze Karel Müller, 2011 Programování a

Více

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

Přetěžování operátorů Karel Müller, Josef Vogel (ČVUT FIT) Přetěžování operátorů BI-PA2, 2011, Přednáška 4 1/31 Přetěžování operátorů Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta

Více

Abstraktní třídy, polymorfní struktury

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í

Více

Rozptylování, stromy - zákl. vlastnosti

Rozptylování, stromy - zákl. vlastnosti Karel Müller, Josef Vogel (ČVUT FIT) Rozptylování, stromy - zákl. vlastnosti BI-PA2, 2011, Přednáška 12 1/55 Rozptylování, stromy - zákl. vlastnosti Ing. Josef Vogel, CSc Katedra softwarového inženýrství

Více

Jazyk C++, některá rozšíření oproti C

Jazyk C++, některá rozšíření oproti C Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 1/22 Jazyk C++, některá rozšíření oproti C Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra

Více

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ; Pole Příklad: přečíst teploty naměřené v jednotlivých dnech týdnu, vypočítat průměrnou teplotu a pro každý den vypsat odchylku od průměrné teploty Řešení s proměnnými typu int: int t1, t2, t3, t4, t5,

Více

Datové struktury 2: Rozptylovací tabulky

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

Více

Šablony, kontejnery a iterátory

Š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

Více

Šablony, kontejnery a iterátory

Š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

Více

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Vyhledávání 242 / 433 Osnova přednášky

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

Konstruktory a destruktory

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,

Více

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.

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

Více

Objektov orientované programování. C++ Akademie SH. 7. Objektov orientované programování. Michal Kvasni ka. Za áte níci C++ 2.

Objektov orientované programování. C++ Akademie SH. 7. Objektov orientované programování. Michal Kvasni ka. Za áte níci C++ 2. C++ Akademie SH Za áte níci C++ 2. kv tna 2011 Obsah 1 Objektov orientované programování Obsah Objektov orientované programování 1 Objektov orientované programování P et ºování Jev, díky kterému m ºeme

Více

Vector datový kontejner v C++.

Vector datový kontejner v C++. Vector datový kontejner v C++. Jedná se o datový kontejner z knihovny STL jazyka C++. Vektor je šablona jednorozměrného pole. Na rozdíl od "klasického" pole má vector, mnoho užitečných vlastností a služeb.

Více

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

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

Více

Datové struktury 1: Základní datové struktury

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í

Více

Programování v C++ 2, 8. cvičení

Programování v C++ 2, 8. cvičení Programování v C++ 2, 8. cvičení návrhový vzor iterátor 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é látky

Více

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory Výhody objektového řešení Nástroje pro IO operace jsou v C++ součástí knihoven Hierarchie objektových

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

Programování v C++ 3, 3. cvičení

Programování v C++ 3, 3. cvičení Programování v C++ 3, 3. cvičení úvod do objektově orientovaného programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Dokončení spojového

Více

Více o konstruktorech a destruktorech

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í

Více

Jazyk C++ I. Šablony 2

Jazyk C++ I. Šablony 2 Jazyk C++ I Šablony 2 AR 2013/2014 Jazyk C++ I Třídy template class TVektor { T *a; int n; static int PocInstanci; public: TVektor(int _n = 0) : n(_n) { a = new T[n]; PocInstanci++; } ~TVektor()

Více

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

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ž

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

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Datové struktury Daniela Szturcová

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Datové struktury Daniela Szturcová

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

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

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Osmé počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 20.11.2017,

Více

Množina v C++ (set, multiset).

Množina v C++ (set, multiset). Množina v C++ (set, multiset). Množina je datová struktura, ve které jsou uloženy nějaké prvky. V množině nesmí být dva stejné prvky. Naopak multimnožina může obsahovat i stejné prvky. Nad množinou lze

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

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ů

Více

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

Více

map, multimap - Asociativní pole v C++.

map, multimap - Asociativní pole v C++. map, multimap - Asociativní pole v C++. Jedná se o asociativní pole. V asociativním poli jsou uloženy hodnoty ve tvaru (klíč,hodnota), kde klíč je vlastně "index" prvku. Klíčem může být libovolný objekt,

Více

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

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

Více

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

Programování v C++ 1, 5. cvičení

Programování v C++ 1, 5. cvičení Programování v C++ 1, 5. cvičení konstruktory, nevirtuální dědění 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 3 Shrnutí minule procvičené

Více

Dynamické datové struktury I.

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

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

Úvod do programovacích jazyků (Java)

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

Více

Množina čísel int stl-set-int.cpp

Množina čísel int stl-set-int.cpp Řetězce, pole a STL V C++ je výhodné pro práci s řetězci použít třídu string, funkce C jsou stále k dispozici cstring, ukazatele a pole lze stále používat stejně, jako v C, použití iterátorů a dalších

Více

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

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),

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

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++ 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é

Více

Řetězce. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Řetězce. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016 Řetězce Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016 Programování v C++, A7B36PJC 4/2016, Lekce 9c https://cw.fel.cvut.cz/wiki/courses/a7b36pjc/start

Více

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

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

Programování v C++ 1, 17. cvičení

Programování v C++ 1, 17. cvičení Programování v C++ 1, 17. cvičení výjimky 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é látky Binární vyhledávací

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 - operátor je speciální

Více

Jazyk C++ I. Šablony

Jazyk C++ I. Šablony Jazyk C++ I Šablony AR 2013/2014 Jazyk C++ I Úvod Zatím známe programovací styly: Strukturované programování, Objektově orientované programovaní. AR 2013/2014 Jazyk C++ I 2 Příklady void Print(const int&

Více

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

PB161 Programování v jazyce C++ Přednáška 6 PB161 Programování v jazyce C++ Přednáška 6 Kontejnery Iterátory Algoritmy Nikola Beneš 26. října 2015 PB161 přednáška 6: kontejnery, iterátory, algoritmy 26. října 2015 1 / 37 Standardní knihovna C++

Více

Dynamické datové struktury IV.

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

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

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Dynamicky vázané metody. Pozdní vazba, virtuální metody Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:

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

Programování v C++ 1, 1. cvičení

Programování v C++ 1, 1. cvičení Programování v C++ 1, 1. cvičení opakování látky ze základů programování 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í procvičený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

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem Jazyk C++ 1 Blok 3 Objektové typy jazyka C++ Studijní cíl Ve třetím bloku bude představen a rozebrán nejdůležitější objektový typ jazyka C++ a to sice třída. Po absolvování bloku bude student schopen navrhovat

Více

PB161 6. přednáška (26. října 2015)

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é

Více

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016 ZPRO cvičení 2 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague October 17, 2016 Outline I 1 Outline 2 Proměnné 3 Proměnné - cvičení 4 Funkce 5 Funkce

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

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

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

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

Více

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem Test prvočíselnosti Úkol: otestovat dané číslo N, zda je prvočíslem 1. zkusit všechny dělitele od 2 do N-1 časová složitost O(N) cca N testů 2. stačí zkoušet všechny dělitele od 2 do N/2 (větší dělitel

Více

Úvod do programovacích jazyků (Java)

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

Více

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

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

Více

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

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ů

Více

Jazyk C++ I. Šablony 3

Jazyk C++ I. Šablony 3 Jazyk C++ I Šablony 3 AR 2013/2014 Jazyk C++ I Třídy template class TVektor { T *a; int n; static int PocInstanci; public: TVektor(int _n = 0) : n(_n) { a = new T[n]; PocInstanci++; } ~TVektor()

Více

Programování v C++ První kroky

Programování v C++ První kroky Programování v C++ První kroky Karel Mozdřeň 29. října 2009 1 Obsah 1 Úvod 5 1.1 Pro koho je kniha určena...................... 5 1.2 Proč první kroky?.......................... 5 2 Začínáme 6 2.1 Hello,

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

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

Základní datové struktury III: Stromy, haldy

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í

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

Programování v C++ 2, 4. cvičení

Programování v C++ 2, 4. cvičení Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Přístupová práva

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký 1 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ů

Více

Programování v C++ 1, 16. cvičení

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é

Více

Základy C++ I. Jan Hnilica Počítačové modelování 18

Základy C++ I. Jan Hnilica Počítačové modelování 18 Základy C++ I 1 Přechod z C na C++ jazyk C++ je nadmnožinou jazyka C z hlediska syntaxe se jedná o velmi podobné jazyky, spolu s dalšími jazyky "céčkovské" rodiny, jako je např. C# každý platný program

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

Dědičnost. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 23.března

Dědičnost. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 23.března Dědičnost Cíle lekce Cílem lekce je naučit se pracovat a využívat dědičnosti při návrhu a tvorbě programů. Lekce je zaměřena hlavně na jednoduchou dědičnost. Bude rovněž vysvětlen rozdíl mezi dědičností

Více

Programování v C++ 2, 7. cvičení

Programování v C++ 2, 7. cvičení Programování v C++ 2, 7. cvičení spojový seznam 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é látky Dědění

Více

Jazyk C# a platforma.net

Jazyk C# a platforma.net Jazyk C# a platforma.net Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Syntaxe jazyka C# - 1. část BI-DNP Evropský sociální fond

Více

KTE / ZPE Informační technologie

KTE / ZPE Informační technologie 4 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň Největší

Více

Programování v C++, 2. cvičení

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

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

Zpracoval: houzvjir@fel.cvut.cz

Zpracoval: houzvjir@fel.cvut.cz Zpracoval: houzvjir@fel.cvut.cz 9. Datový typ ukazatel, přetěžování funkcí, typ reference, vstup a výstup, třídy, staticky vázané metody, dědění, dynamicky vázané metody, abstraktní třídy, polymorfní datové

Více

Úvod do programování 6. hodina

Úvod do programování 6. hodina Úvod do programování 6. 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 Algoritmy Třídění pole: Selection

Více

2. Mřížky / Záplavové vyplňování

2. Mřížky / Záplavové vyplňování 2. Mřížky / Záplavové vyplňování BI-EP2 Efektivní programování 2 LS 2017/2018 Ing. Martin Kačer, Ph.D. 2011-18 Martin Kačer Katedra teoretické informatiky Fakulta informačních technologií České vysoké

Více

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

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++ C++ Akademie SH 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory Za áte níci C++ 20. b ezna 2011 Obsah 1 Prom nné - primitivní typy Celá ísla ƒísla s pohyblivou desetinnou árkou, typ bool 2 Podmínka

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

Pole a kolekce. v C#, Javě a C++

Pole a kolekce. v C#, Javě a C++ Pole a kolekce v C#, Javě a C++ C# Deklarace pole typ_prvku_pole[] jmeno_pole; Vytvoření pole jmeno_pole = new typ_prvku_pole[pocet_prvku_pole]; Inicializace pole double[] poled = 4.8, 8.2, 7.3, 8.0; Java

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

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

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

Více

Ukazatele, dynamická alokace

Ukazatele, dynamická alokace Ukazatele, dynamická alokace 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 Mazanec Karel Richta,

Více

Pokročilé haldy. prof. Ing. Pavel Tvrdík CSc. Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010

Pokročilé haldy. prof. Ing. Pavel Tvrdík CSc. Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Pokročilé 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í algoritmy (I-EFA) ZS 2010/11,

Více

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

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

Více

Jazyk C# a platforma.net

Jazyk C# a platforma.net Jazyk C# a platforma.net Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Syntaxe jazyka C# - 2. část BI-DNP Evropský sociální fond

Více

Definice uživatelského typu. Uživatelem definované typy. Součinové datové typy. Součtové datové typy. FLP - Uživatelem definované typy

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

Více