Sada úkolů pro předmět DSA

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

Download "Sada úkolů pro předmět DSA"

Transkript

1 Sada úkolů pro předmět DSA A7B36DSA Ing. Martin Chlumecký Katedra počítačů ČVUT v Praze, FEL Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

2 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Domácí úkoly z předmětu DSA Domácí úkoly Domácí úkoly mají dvě varianty: lehčí a těžší. Lehčí varianta je za jeden bod, těžší vzhledem k větší míře samostatné práce za čtyři body. U řešitelů těžších domácích úkolů se předpokládá znalost Featherweight Javy. Přístupové údaje k repozitáři URL vašeho repozitáře je https://cvut.repositoryhosting.com/svn/cvut_<login>/ URL pro brouzdání po vašem repozitáři na webu je https://cvut.repositoryhosting.com/trac/cvut_<login>/browser Login je vaše uživatelské jméno v síti ČVUT Počáteční heslo je shodné s vaším uživatelským jménem (není se sítí ČVUT synchronizováno) URL pro přihlášení do administračního rozhraní na webu je https://cvut.repositoryhosting.com

3 Zadání lehčích domácích úkolů Lehčí domácí úkoly odevzdávejte přes repozitář. Každý úkol umístěte do adresáře homeworks a souboru homework<n>.java, kde <n> je číslo úkolu. Všechny odevzdávané třídy dělejte neveřejné (aby mohly být v jednom souboru) a neumísťujte je do žádného balíčku. Kromě vašeho kódu neodevzdávejte nic jiného - třídy a rozhraní, která jsou součástí zadání, si k vašemu kódu přilinkujeme sami. Pokud chcete ve zdrojácích používat češtinu, používejte kódování ISO Pokud se ještě s testovacím systémem objeví problémy, dejte o nich (mailem) vědět přednášejícímu nebo cvičícím - jinak se nápravy nedočkáte. První Naimplementujte třídu Homework1 implementující rozhraní Mergesort. interface Mergesort { int[] getfirsthalfof(int[] array); // vrati nesetridenou kopii prvni poloviny (horni celou cast) pole array int[] getsecondhalfof(int[] array); // vrati nesetridenou kopii druhe poloviny (dolni celou cast) pole array int[] merge(int[] firsthalf, int[] secondhalf); // slije prvky v firsthalf a secondhalf do jednoho pole a vrati ho int[] mergesort(int[] array); // vrati setridenou kopii pole array Druhý Naimplementujte třídu Homework2 implementující rozhraní Matrix. Násobení matic musí být implementováno Strassenovým algoritmem, tzn. metoda times volaná na netriviální matici (matici větší než 1 1) musí svůj výsledek získat pouze pomocí volání metod plus, minus a times na podmaticích. Všechny vaše metody by měly fungovat s jakoukoli korektní implementací rozhraní Matrix. /** Rozhrani Matrix reprezentuje ctvercovou matici, jejiz rozmer je mocnina dvojky. interface Matrix { /* Vrati rozmer matice. int getsize(); /* Vrati prvek na indexu n, m (1 <= n <= getsize(), 1 <= m <= getsize()). int getelement(int n, int m); /* Vrati levou horni podmatici. Matrix gettopleftsubmatrix(); /* Vrati pravou horni podmatici. public Matrix gettoprightsubmatrix(); /* Vrati levou dolni podmatici. public Matrix getbottomleftsubmatrix(); /* Vrati pravou dolni podmatici. public Matrix getbottomrightsubmatrix(); /* Vrati soucet matic this a other (muzete predpokladat, ze this.getsize() == other.getsize()).

4 public Matrix plus(matrix other); /* Vrati rozdil matic this a other (muzete predpokladat, ze this.getsize() == other.getsize()). public Matrix minus(matrix other); /* Vrati soucin matic this a other (muzete predpokladat, ze this.getsize() == other.getsize()). public Matrix times(matrix other); class Homework2 implements Matrix { /** Vytvori novou matici (muzete predpokladat, ze contents je ctvercove pole, jehoz rozmer je mocnina dvojky). public Homework2(int[][] contents) { /*... /* Zbytek tridy Homework2. Třetí Naimplementujte třídu Homework3 implementující rozhraní HeapStorage a třídu Heap. Za korektní implementaci třídy Homework3 získáte jeden bod, za korektní implementaci třídyheap další. interface DSAComparable<E> { /** Vrati true, pokud je this (ostre) mensi nez other, false jinak. boolean less(e other); /** Vrati nejmensi prvek ze vsech prvku typu E (tzn. prvek, ktery je mensi nez * jakykoli jiny prvek typu E). Vracena hodnota nezavisi na this, jen na E. E getleastelement(); /** Vrati nejvetsi prvek ze vsech prvku typu E (tzn. prvek, ktery je vetsi * nez jakykoli jiny prvek typu E). Vracena hodnota nezavisi na this, jen na E. E getgreatestelement(); /** Rozhrani HeapStorage reprezentuje pole, do ktereho si halda uklada svoje prvky. interface HeapStorage<E extends DSAComparable<E>> { /** Vrati aktualni velikost HeapStorage. int getsize(); /** Vrati true, pokud je aktualni velikost HeapStorage nulova. boolean isempty(); /** Vrati prvek na indexu index (1 <= index <= getsize()). Pokud je index

5 * mensi nebo roven nule, vrati nejvetsi prvek. Pokud je index vetsi nez * velikost pole, vrati nejmensi prvek. V obou pripadech muzete predpokladat, * ze v HeapStorage je alespon jeden prvek. E getelement(int index); /** Prohodi prvky na indexech index a index2 (1 <= index, index2 <= getsize()). void swap(int index, int index2); /** Odstrani posledni prvek (tzn. snizi velikost teto HeapStorage) a vrati jeho hodnotu. E extractlast(); /** Vlozi prvek a vrati jeho index. Muzete predpokladat, ze ve spodnim poli je dost mista. int insertlast(e element); class Homework3<E extends DSAComparable<E>> implements HeapStorage<E>{ /** Vytvori novy objekt HeapStorage nad polem elements, jeho velikost je stejna jako delka pole. Homework3(E[] elements) { /* kod /* metody /** Trida Heap reprezentuje haldu (s maximem ve vrcholu). class Heap<E extends DSAComparable<E>> { HeapStorage<E> storage; /** Vytvori haldu nad danym HeapStorage (tzn. zavola algoritmus build heap). Heap(HeapStorage<E> storage) { /* kod /** Zavola algoritmus heapify nad uzlem na indexu index. void heapify(int index) { /* kod /** Vlozi do haldy novy prvek. Muzete predpokladat, ze v poli uvnitr HeapStorage na nej misto je. void insert(e element) { /* kod

6 /** Odstrani a vrati z haldy maximalni prvek. E extractmax() { /* kod /** Vrati true, pokud je halda prazdna. boolean isempty() { /* kod /** Pomoci algoritmu trideni haldou vzestupne setridi pole array. static <E extends DSAComparable<E>> void heapsort(e[] array) { /* kod Soutěž Pokud chcete, můžete se zúčastnit soutěže o nejelegantnější implementaci třetího domácího úkolu. Kritéria elegance jsou zejména: srozumitelnost kódu, jeho kompaktnost a jeho snadná modifikovatelnost. Pro přihlášení do soutěže pošlete přednášejícímu, uzávěrka přihlášek je shodná s datem odevzdání úkolu, tj O vítězi rozhodně porota složená z cvičících předmětu, hlavní cena je bod za aktivitu. Čtvrtý Naimplementujte třídu DSAHashTable (kvůli omezení Javy musíte generické pole alokovat takto: (Set<Pair<K, V> >[]) new Set<?>[size]). import java.util.iterator; import java.util.set; /** Trida Pair reprezentuje dvojici (klic, hodnota). class Pair<K,V> { K key; V value;

7 Pair(K k, V v) { key = k; value = v; public int hashcode() { return key.hashcode() + 3 * value.hashcode(); public boolean equals(object other) { if (! (other instanceof Pair<?,?>)) return false; Pair<?,?> o = (Pair<?,?>) other; return key.equals(o.key) && value.equals(o.value); /** Trida DSAHashTable reprezentuje rozptylovaci tabulku se zřetězením (první varianta v učebnici). class DSAHashTable<K,V> { /** Vytvori prazdnou instanci DSAHashTable, delka vnitrniho pole je nastavena na size, obsah vnitrniho pole * je inicializovan na prazdne mnoziny. DSAHashTable(int size) { /* kod /** Ulozi dvojici (key, value) do rozptylovaci tabulky. Pokud uz v tabulce je jina dvojice se stejnym klicem, * je smazana. Klic ani hodnota nesmi byt null. Pokud by pocet dvojic v tabulce po vykonani put mel vzrust nad * dvojnasobek delky vnitrniho pole, vnitrni pole zdvojnasobi. void put(k key, V value) { /* kod /** Vrati hodnotu asociovanou s danym klicem nebo null, pokud dany klic v tabulce neni. V get(k key) { /* kod /** Smaze dvojici s danym klicem. Pokud v tabulce dany klic neni, nedela nic. void remove(k key) { /* kod /** Vrati vnitrni pole. Prvni vnitrniho pole mohou byt instance trid v balicku java.util, tzn. nemusite psat * vlastni implementaci rozhrani java.util.set. Set<Pair<K,V>>[] getarray() { /* kod /** Pro dany klic vrati index v poli. Jako hashovaci funkce se pouzije key.hashcode. int getindexof(k key) { /* kod /** Pokud je pocet prvku mensi nebo roven dvojnasobku delky vnitrniho pole, vrati true, jinak vrati false. boolean isbigenough() { /* kod /** Zmeni delku vnitrniho pole, nainicializuje jej prazdnymi mnozinami a zkopiruje do nej vsechny dvojice. void resize(int newsize) { /* kod

8 /** Vrati iterator pres vsechny dvojice v tabulce. Iterator nemusi mit implementovanou metodu remove. Iterator<Pair<K,V>> iterator() { /* kod Pátý Naimplementujte třídu Tree. import java.util.iterator; interface DSAComparable<E extends DSAComparable<E>> { boolean lessorequal(e other); boolean greater(e other); boolean equal(e other); class Node<E extends DSAComparable<E>> { E contents; private Node<E> parent; Node<E> left, right; /** Vrati naslednika (tzn. uzel obsahujici nejblizssi vyssi hodnotu) tohoto uzlu. Node<E> succ() { if (right!= null) { Node<E> temp = right; while (temp.left!= null) temp = temp.left; return temp; else { Node<E> temp = this; Node<E> parent = this.parent; while (parent!= null && parent.right == temp) { parent = parent.parent; temp = temp.parent; return parent; Node(E elem, Node<E> parent) { this.contents = elem; this.parent = parent;

9 void setparent(node<e> p) { parent = p; /** * Trida Tree reprezentuje binarni vyhledavaci strom, ve kterem pro kazdy uzel n plati * n.left == null n.left.contents.lessorequal(n.contents) a * n.right == null n.right.contents.greater(n.contents). class Tree<E extends DSAComparable<E>> { Node<E> root; /** Vrati minimum z tohoto stromu nebo null, pokud je strom prazdny. E minimum() { /* kod /** Vrati minimum ze zadaneho podstromu nebo null, pokud je podstrom prazdny. E subtreemin(node<e> n) { /* kod /** Vrati maximum z tohoto podstromu nebo null, pokud je strom prazdny. E maximum() { /* kod /** Vrati maximum ze zadaneho podstromu nebo null, pokud je podstrom prazdny. E subtreemax(node<e> n) { /* kod /** Vlozi prvek do stromu, pripadne duplicity ponechava (tzn. stejny prvek muze * byt ve stromu vickrat). void insert(e elem) { /* kod /** * Projde strom smerem za uzlem s hodnotou elem a vrati: * - uzel s hodnotou elem, pokud existuje, * - posledni potkany koncovy uzel (=uzel s maximalne jednim potomkem), pokud uzel s hodnotou elem neexistuje nebo * null pokud je cely strom prazdny. Node<E> find(e elem) { /* kod /** Vrati true, pokud tento strom obsahuje prvek elem. boolean contains(e elem) { /* kod /** Odstrani jeden vyskyt prvku elem z tohoto stromu. void remove(e elem) { /* kod /** Vrati iterator pres cely strom (od nejmensiho po nejvetsi). Iterator<E> iterator() { /* kod /** Vrati iterator prochazejici pres interval [lowerbound, higherbound] vcetne. Iterator<E> boundediterator(e lowerbound, E higherbound) { /* kod /** Vrati korenovy uzel tohoto stromu. Node<E> getrootnode() { /* kod

10 Šestý Dynamické programování je vlastně rekurze zkřížená s memoizací. Samotný rekurzivní popis algoritmu je pro každou úlohu jiný, ale memoizace je pořád stejná - řešení podúloh se zaznamenává do tabulky a znovupoužívá, když je potřeba. Vaším úkolem je naprogramovat metodu Machine.solve, ve které bude právě ta memoizace. Metodasolve by při zavolání měla: 1. mrknout do tabulky a pokud v ní řešení už je, vrátit ho, 2. pokud v tabulce řešení není, měla by si ze zadané úlohy vytáhnout možná podřešení a vybrat to nejlepší (s nejvyšší hodnotou) a 3. před vrácením nejlepšího řešení by si ho měla uložit do tabulky. import java.util.hashmap; import java.util.hashset; import java.util.map; import java.util.set; /** Trida Pair reprezentuje dvojici. class Pair<First, Second> { First first; Second second; Pair(First f, Second s) { first = f; second = s; First getfirst() { return first; Second getsecond() { return second; /** Instance rozhrani Task reprezentuji optimalizacni ulohu. interface Task<T extends Task<T, S, W>, S extends Solution<T, S, W>, W extends Comparable<W>> { /** Vrati vsechna mozna (ne nutne optimalni) reseni teto ulohy. Vzdy vrati alespon jedno reseni. Set<S> getpossiblesolutions(); /** Instance rozhrani Solution reprezentuji reseni nejake konkretni optimalizacni ulohy.

11 interface Solution<T extends Task<T, S, W>, S extends Solution<T, S, W>, W extends Comparable<W>> { /** Vrati hodnotu tohoto reseni. W getworth(machine<t, S, W> m); class Machine<T extends Task<T, S, W>, S extends Solution<T, S, W>, W extends Comparable<W>> { Map<T, Pair<S, W>> cache = new HashMap<T, Pair<S, W>>(); Pair<S, W> solve(t task) { /* kod class RodTask implements Task<RodTask, RodSolution, Integer> { final int length; final int[] table; final Set<RodSolution> sols = new HashSet<RodSolution>(); static int instancecount; RodTask(int length, int[] table) { this.length = length; this.table = table; for (int i = 1; i <= length; i++) sols.add(new RodSolution(i, length - i, table)); instancecount++; public Set<RodSolution> getpossiblesolutions() { return sols; public int hashcode() { int code = length; for (int i : table) code += 3 * i; return code; public boolean equals(object o) { if (!(o instanceof RodTask)) return false; RodTask other = (RodTask) o; if (length!= other.length table.length!= other.table.length) return false; for (int i = 0; i < table.length; i++) if (table[i]!= other.table[i]) return false;

12 return true; class RodSolution implements Solution<RodTask, RodSolution, Integer> { final int first; final int rest; final int[] table; RodSolution(int first, int rest, int[] table) { this.first = first; this.rest = rest; this.table = table; public Integer getworth(machine<rodtask, RodSolution, Integer> m) { int worth = table[first]; if (rest > 0) worth += m.solve(new RodTask(rest, table)).getsecond(); return worth; Sedmý Naprogramujte B-strom. import java.util.list; /** Instance tridy Tree reprezentuji B-strom. class Tree { /** Koren tohoto stromu. Node root; /* atributy /** Vytvori prazdny B-strom se zadanou kapacitou uzlu. Kapacita uzlu je * maximalni pocet klicu, ktere se v jednom uzlu mohou objevit. Tree(int nodecapacity) { /* kod

13 /** Indikuje, jestli tento strom obsahuje zadany klic. boolean contains(integer key) { /* kod /** Prida zadany klic do stromu. Pokud tento strom zadany klic uz obsahuje, * neudela nic. void add(integer key) { /* kod /** Odebere zadany klic ze stromu. Pokud tento strom zadany klic neobsahuje, * neudela nic. void remove(integer key) { /* kod /* kod class Node { /* atributy /** Vrati klice ulozene v tomto uzlu serazene vzestupne. List<Integer> getkeys() { /* kod /** Vrati ukazatele na podstromy ulozene v tomto uzlu serazene v poradi odpovidajicim * poradi klicu. Pozor: vzdy musi platit, ze pocet_ukazatelu_na_podstromy = pocet_klicu + 1, * u listovych uzlu proto musite vracet seznam nullu. List<Node> getsubtrees() { /* kod Zadání těžších domácích úkolů První

14 Ve Featherweight Javě naimplementujte datovou strukturu v C. Okasaki: Purely Functional Data Structures označovanou jako persistent binary random-access list. Pro počáteční nasměrování a dodatečné informace kontaktujte přednášejícího. Základní knihovnu FJ z minulého semestru najdete nahttps://cvut.repositoryhosting.com/trac/cvut_lectures/browser/lecture14/src/lecture14/lecture14.java Druhý Naimplementujte níže uvedené třídy a rozhraní a s jejich pomocí napište následující algoritmy: řazení vkládáním, řazení sléváním, quicksort, quick seleck a řazení haldou. Pokud bude potřeba, můžete níže uvedenou strukturu tříd obohatit o nové metody nebo mírně změnit, ale měli byste zachovat stejného ducha. /** Instance implementujici toto rozhrani reprezentuji multimnozinu, * ktera se po vytvoreni uz nezmeni. interface ImmutableMultiset<E> { /** Vrati sjednoceni teto a zadane multimnoziny. ImmutableMultiset<E> union(immutablemultiset<e> other); /** Vrati rozdil teto a zadane multimnoziny. ImmutableMultiset<E> difference(immutablemultiset<e> other); /** Vrati, zda tato multimnozina obsahuje zadany prvek. ImmutableBoolean contains(e elem); /** Vrati velikost teto multimnoziny. ImmutableInteger size(); /** Instance teto tridy reprezentuji prazdnou multimnozinu. class EmptyMultiset<E> implements ImmutableMultiset<E> { static <E> EmptyMultiset<E> createemptymultiset(); /** Instance teto tridy reprezentuji multimnozinu s jednim prvkem. class SingletonMultiset<E> implements ImmutableMultiset<E> { static <E> SingletonMultiset<E> createsingletonmultiset(e elem); /** Instance teto tridy reprezentuji sjednoceni dvou multimnozin. class Union<E> implements ImmutableMultiset<E> { static <E> Union<E> createunion(immutablemultiset<e> first, ImmutableMultiset<E> second);

15 /** Instance teto tridy reprezentuji rozdil dvou multimnozin. class Difference<E> implements ImmutableMultiset<E> { static <E> Difference<E> createdifference(immutablemultiset<e> first, ImmutableMultiset<E> second); /** Instance implementujici toto rozhrani reprezentuji sekvenci, * ktera se po vytvoreni uz nezmeni. interface ImmutableSequence<E> { /** Vrati spojeni teto a zadane sekvence. ImmutableSequence<E> concat(immutablesequence<e> other); /** Vrati podsekvenci zadane sekvence. Prvni prvek sekvence ma index nula. ImmutableSequence<E> subsequence(immutableinteger from, ImmutableInteger to); /** Vrati delku teto sekvence. ImmutableInteger size(); /** Vrati prvek na zadanem indexu. Prvni prvek ma index nula. E elementat(immutableinteger position); /** Instance teto tridy reprezentuji prazdnou sekvenci. class EmptySequence<E> implements ImmutableSequence<E> { static <E> EmptySequence<E> createemptysequence(); /** Instance teto tridy reprezentuji sekvenci delky jedna. class SingletonSequence<E> implements ImmutableSequence<E> { static <E> SingletonSequence<E> createsingletonsequence(e elem); /** Instance teto tridy reprezentuji spojeni dvou sekvenci. class Concatenation<E> implements ImmutableSequence<E> { static <E> Concatenation<E> createconcatenation(sequence<e> first, Sequence<E> second); /** Instance teto tridy reprezentuji podsekvenci nejake sekvence. class Subsequence<E> implements ImmutableSequence<E> { static <E> Subsequence<E> createsubseqence(sequence<e> seq, ImmutableInteger from, ImmutableInteger to); /** Instance teto tridy reprezentuji cele cislo, ktere se po vytvoreni jiz nezmeni. interface ImmutableInteger { /** Vrati soucet tohoto a zadaneho cisla. ImmutableInteger plus(immutableinteger other);

16 /** Vrati rozdil tohoto a zadaneho cisla. ImmutableInteger minus(immutableinteger other); /** Vrati soucin tohoto a zadaneho cisla. ImmutableInteger times(immutableinteger other); /** Vrati podil tohoto a zadaneho cisla. ImmutableInteger dividedby(immutableinteger other); /** Indikuje, zda je toto cislo mensi, nez zadane. ImmutableBoolean less(immutableinteger other); /** Indikuje, zda je toto cislo shodne jako zadane. ImmutableBoolean equal(immutableinteger other); /** Indikuje, zda je toto cislo vetsi, nez zadane. ImmutableBoolean greater(immutableinteger other); /** Instance teto tridy reprezentuji konstantu. class Constant implements ImmutableInteger { static Constant createconstant(int c); /** Instance teto tridy reprezentuji soucet dvou cisel. class Plus implements ImmutableInteger { static Plus createplus(immutableinteger first, ImmutableInteger second); /** Instance teto tridy reprezentuji rozdil dvou cisel. class Minus implements ImmutableInteger { static Minus createminus(immutableinteger first, ImmutableInteger second); /** Instance teto tridy reprezentuji soucin dvou cisel. class Product implements ImmutableInteger { static Product createproduct(immutableinteger first, ImmutableInteger second); /** Instance teto tridy reprezentuji podil dvou cisel. class Division implements ImmutableInteger { static Division createdivision(immutableinteger first, ImmutableInteger second); /** Instance implementujici toto rozhrani reprezentuji pravdivostni hodnotu, * ktera se po vytvoreni jiz nezmeni. interface ImmutableBoolean {

17 /** Vrati negaci teto hodnoty. ImmutableBoolean not(); /** Vrati konjunkci teto a zadane hodnoty. ImmutableBoolean and(immutableboolean other); /** Vrati disjunkci teto a zadane hodnoty. ImmutableBoolean or(immutableboolean other); /** Instance teto tridy reprezentuji pravdu. class True implements ImmutableBoolean { static True createtrue(); /** Instance teto tridy reprezentuji nepravdu. class False implements ImmutableBoolean { static False createfalse(); /** Instance teto tridy reprezentuji negaci nejake pravdivostni hodnoty. class Negation implements ImmutableBoolean { static Negation createnegation(); /** Instance teto tridy reprezentuji konjunkci dvou pravdivostnich hodnot. class Conjunction implements ImmutableBoolean { static Conjunction createconjunction(immutableboolean other); /** Instance teto tridy reprezentuji disjunkci dvou pravdivostnich hodnot. class Disjunction implements ImmutableBoolean { static Disjunction createdisjunction(immutableboolean other); /** Instance teto tridy reprezentuji multimnozinu. Obsah multimnoziny je reprezentovan * v promenne inner. class DSAMultiset<E> { ImmutableMultiset<E> inner; /* Vytvori a vrati prazdnou multimnozinu. static DSAMultiset createemptymultiset(); /* Vytvori a vrati multimnozinu s jednim prvkem. static <E> DSAMultiset<E> createsingletonmultiset(e elem); /* Prida zadany prvek do teto multimnoziny.

18 void add(e elem); /* Prida vsechny prvky v zadane multimnozine do teto multimnoziny. void addall(dsamultiset<e> ms); /* Odstrani zadany prvek z teto multimnoziny. void remove(e elem); /* Odstrani vzechny prvky v zadane multimnozine z teto multimnoziny. void removeall(dsamultiset<e> elem); /* Vyrobi kopii teto multimnoziny. DSAMultiset<E> clone(); /* Vrati velikost teto multimnoziny. ImmutableInteger size(); /* Indikuje, zda tato mnozina obsahuje zadany prvek. ImmutableBoolean contains(e elem); /** Instance teto tridy reprezentuji sekvenci. Obsah sekvence je reprezentovan * v promenne inner. class DSASequence<E> { ImmutableSequence<E> inner; /* Vytvori a vrati prazdnou sekvenci. static DSASequence createemptysequence(); /* Vytvori a vrati multimnozinu o delce jedna. static <E> DSASequence<E> createsingletonsequence(e elem); /* Pripoji zadanou sekvenci do teto sekvence. DSASequence<E> append(dsasequence<e> other); /* Pripoji zadanou sekvenci na zacatek teto sekvence. DSASequence<E> prepend(dsasequence<e> other); /* Vrati podsekvenci teto sekvence (jako nezavisly objekt). DSASequence<E> subseq(immutableinteger from, ImmutableInteger to); /* Vrati velikost teto sekvence. ImmutableInteger size(); /* Vrati prvek na zadanem indexu, prvni prvek ma index nula. E elementat(immutableinteger elem);

Stromy, haldy, prioritní fronty

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

Více

Abstraktní datové typy: zásobník

Abstraktní datové typy: zásobník Abstraktní datové typy: zásobník 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 Abstraktní datové typy omezené rozhraní

Více

Generické programování

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

Více

typová konverze typová inference

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

Více

1 2 3 4 5 6 součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

1 2 3 4 5 6 součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů: Úloha č.: max. bodů: skut. bodů: 1 2 3 4 5 6 součet cvičení celkem 20 12 20 20 14 14 100 známka UPOZORNĚNÍ : a) Písemná zkouška obsahuje 6 úloh, jejichž řešení musí být vepsáno do připraveného formuláře.

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

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

20. Projekt Domácí mediotéka

20. Projekt Domácí mediotéka Projekt Domácí mediotéka strana 211 20. Projekt Domácí mediotéka 20.1. Základní popis, zadání úkolu V projektu Domácí mediotéka (Dome) se jednoduchým způsobem evidují CD a videa. Projekt je velmi jednoduchý

Více

Algoritmy a datové struktury

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

Více

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615) IB108 Sada 1, Příklad 1 ( ) Složitost třídícího algoritmu 1/-Sort je v O n log O (n.71 ). Necht n = j i (velikost pole, které je vstupním parametrem funkce 1/-Sort). Lehce spočítáme, že velikost pole předávaná

Více

14.4.1. Typický prvek kolekce pro české řazení

14.4.1. Typický prvek kolekce pro české řazení 14.4. Co všechno by měl mít typický prvek kolekce 177 Poznámka: Třídy BigInteger, BigDecimal a Date budou vysvětleny v částech [15./183, [16./185 a [18.1./204. 14.4.1. Typický prvek kolekce pro české řazení

Více

Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy

Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy Volné stromy Úvod do programování Souvislý, acyklický, neorientovaný graf nazýváme volným stromem (free tree). Často vynecháváme adjektivum volný, a říkáme jen, že daný graf je strom. Michal Krátký 1,Jiří

Více

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto:

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto: 20. Programovací techniky: Abstraktní datový typ, jeho specifikace a implementace. Datový typ zásobník, fronta, tabulka, strom, seznam. Základní algoritmy řazení a vyhledávání. Složitost algoritmů. Abstraktní

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

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

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

Java a XML. 10/26/09 1/7 Java a XML

Java a XML. 10/26/09 1/7 Java a XML Java a XML Java i XML jsou přenositelné V javě existuje podpora pro práci s XML, nejčastější akce prováděné při zpracování XML: načítání XML elementů generování nových elementů nebo úprava starého zápis

Více

boolean hasnext() Object next() void remove() Kolekce

boolean hasnext() Object next() void remove() Kolekce 11. Kontejnery Kontejnery Kontejnery jako základní dynamické struktury v Javě Kolekce, iterátory (Collection, Iterator) Seznamy (rozhraní List, třídy ArrayList, LinkedList) Množiny (rozhraní Set, třída

Více

2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky

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

Více

Programování v Javě I. Leden 2008

Programování v Javě I. Leden 2008 Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Leden 2008 Radek Kočí Seminář Java Programování v Javě (1) 1/ 45 Téma přednášky Datové typy Deklarace třídy Modifikátory

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

Programování v Javě I. Únor 2009

Programování v Javě I. Únor 2009 Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Únor 2009 Radek Kočí Seminář Java Programování v Javě (1) 1/ 44 Téma přednášky Datové typy Deklarace třídy Modifikátory

Více

Úvod Přetěžování Generika Kolekce Konec. Programování v C# Další jazykové konstrukce. Petr Vaněček 1 / 31

Úvod Přetěžování Generika Kolekce Konec. Programování v C# Další jazykové konstrukce. Petr Vaněček 1 / 31 Programování v C# Další jazykové konstrukce Petr Vaněček 1 / 31 Obsah přednášky Přetěžování metody operátory Generika Kolekce třídy rozhraní 2 / 31 Překrytí vs. přetížení Rozdíl ve způsobu deklarace metody/operátoru

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

Čipové karty Lekařská informatika

Čipové karty Lekařská informatika Čipové karty Lekařská informatika Následující kód je jednoduchou aplikací pro čipové karty, která po překladu vytváří prostor na kartě, nad kterým jsou prováděny jednotlivé operace a do kterého jsou ukládány

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

Výčtový typ strana 67

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

Více

Principy objektově orientovaného programování

Principy objektově orientovaného programování Principy objektově orientovaného programování Třídy a objekty 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 C E T

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

Kolekce, cyklus foreach

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

Více

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 Úlohy- 2.cvičení 1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 2. Převeďte dané desetinné číslo do dvojkové soustavy (DEC -> BIN): a) 0,8125 10 b) 0,35 10

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

Objektově orientované programování v PHP 5. Martin Klíma

Objektově orientované programování v PHP 5. Martin Klíma Objektově orientované programování v PHP 5 Martin Klíma OOP & PHP 5 V PHP 5 konečně značné rozšíření OOP Blíží se to moderním programovacím jazykům jako Java nebo C# Výhody OOP Zapouzdření (nové modifikátory

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

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

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni! Java práce s řetězci Trochu povídání.. Řetězce jsou v Javě reprezentovány instancemi tříd StringBuffer a String. Tyto třídy jsou součástí balíčku java.lang, tudíž je možno s nimi pracovat ihned bez nutného

Více

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620 Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620 1. Vymezení pojmů Strom: Strom je takové uspořádání prvků - vrcholů, ve kterém lze rozeznat předchůdce - rodiče a následovníky - syny.

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Vyhledávání, vkládání, odstraňování Vyhledání hodnoty v nesetříděném poli Vyhledání hodnoty v setříděném poli Odstranění hodnoty z pole Vkládání hodnoty do pole Verze pro akademický

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

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

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

Více

Obrázek. Základní popis, zadání úkolu. Struktura tříd,

Obrázek. Základní popis, zadání úkolu. Struktura tříd, Obrázek Základní popis, zadání úkolu Pracujeme na projektu Domecek, který je ke stažení na http://java.vse.cz/. Po otevření v BlueJ vytvoříme instanci třídy Obrazek a zavoláme metodu kresli(). Výsledkem

Více

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

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

Více

Projekt Obrázek strana 135

Projekt Obrázek strana 135 Projekt Obrázek strana 135 14. Projekt Obrázek 14.1. Základní popis, zadání úkolu Pracujeme na projektu Obrázek, který je ke stažení na http://java.vse.cz/. Po otevření v BlueJ vytvoříme instanci třídy

Více

1. Programování proti rozhraní

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

Více

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false Logické operace Datový typ bool může nabýt hodnot: o true o false Relační operátory pravda, 1, nepravda, 0, hodnoty všech primitivních datových typů (int, double ) jsou uspořádané lze je porovnávat binární

Více

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha ANT Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Více

UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/

UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/ UJO Framework revoluční architektura beans verze 0.80 http://ujoframework.org/ Pavel Pone(c), září 2008 Historie rok 2004 upravené objekty z frameworku Cayenne nevýhodou byla špatná typová kontrola rok

Více

Třídící algoritmy. Insert Sort. Bubble Sort. Select Sort. Shell Sort. Quick Sort. Merge Sort. Heap Sort.

Třídící algoritmy. Insert Sort. Bubble Sort. Select Sort. Shell Sort. Quick Sort. Merge Sort. Heap Sort. Třídící algoritmy. Insert Sort. Bubble Sort. Select Sort. Shell Sort. Quick Sort. Merge Sort. Heap Sort. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká

Více

11.5.2012. Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

11.5.2012. Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9 Obsah přednášky 9 Základy programování (IZAPR, IZKPR) Přednáška 9 Základy dědičnosti, přístupová práva Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií

Více

1. Téma 12 - Textové soubory a výjimky

1. Téma 12 - Textové soubory a výjimky 1. Téma 12 - Textové soubory a výjimky Cíl látky Procvičit práci se soubory s využitím výjimek. 1.1. Úvod Program, aby byl programem, my mít nějaké výstupy a vstupy. Velmi častým případem je to, že se

Více

7. Dynamické datové struktury

7. Dynamické datové struktury 7. Dynamické datové struktury Java poskytuje několik možností pro uložení většího množství dat (tj. objektů či primitivních datových typů) v paměti. S nejjednodušší z nich, s polem, jsme se již seznámili.

Více

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA gklir@binghamton.edu

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA gklir@binghamton.edu A Tutorial Advances in query languages for similarity-based databases George J. Klir Petr Krajča State University of New York (SUNY) Binghamton, New York 13902, USA gklir@binghamton.edu Palacky University,

Více

Datové struktury obsah přednášky 1. Úvod 2. Třídy Type-wrapper (obalový typ) pro primitivní typy automatické převody 3. Automatické převody mezi

Datové struktury obsah přednášky 1. Úvod 2. Třídy Type-wrapper (obalový typ) pro primitivní typy automatické převody 3. Automatické převody mezi Datové struktury obsah přednášky 1. Úvod 2. Třídy Type-wrapper (obalový typ) pro primitivní typy automatické převody 3. Automatické převody mezi primitivními a obalovými typy 4. Třídy odkazující sama na

Více

Algoritmizace a programování

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

Více

Projekty pro výuku programování v jazyce Java

Projekty pro výuku programování v jazyce Java JIHOČESKÁ UNIVERZITA V ČESKÝCH BUDĚJOVICÍCH Pedagogická fakulta Katedra informatiky Akademický rok: 2006/2007 TEZE BAKALÁŘSKÉ PRÁCE Projekty pro výuku programování v jazyce Java Jméno: František Přinosil

Více

Základní datové struktury

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

Více

10 Generické implementace

10 Generické implementace 10 Generické implementace Main Entry: 1 ge ner ic Pronunciation: j&-'ner-ik Function: adjective Etymology: French générique, from Latin gener-, genus birth, kind, class 1 a : relating to or characteristic

Více

Seminář Java II p.1/43

Seminář Java II p.1/43 Seminář Java II Seminář Java II p.1/43 Rekapitulace Java je case sensitive Zdrojový kód (soubor.java) obsahuje jednu veřejnou třídu Třídy jsou organizovány do balíků Hierarchie balíků odpovídá hierarchii

Více

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová Struktura třídy, operátory, jednoduché algoritmy, junit 2. cvičení Alena Buchalcevová Cíle cvičení seznámit se s rozhraním (interface) v Javě seznámit se s testováním při vývoji (makety, JUnit) naučit

Více

NIO. Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

NIO. Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha NIO Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Více

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

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

Více

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

Vytváření a použití knihoven tříd

Vytváření a použití knihoven tříd Vytváření a použití knihoven tříd 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 Prostory jmen motivace spolupráce

Více

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/04.0006

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/04.0006 Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/04.0006 Lekce 1 Jazyk Java Tento projekt je spolufinancován Evropským sociálním fondem

Více

15. Projekt Kalkulačka

15. Projekt Kalkulačka Projekt Kalkulačka strana 143 15. Projekt Kalkulačka 15.1. Základní popis, zadání úkolu Pracujeme na projektu Kalkulačka, který je ke stažení na java.vse.cz. Po otevření v BlueJ vytvoříme instanci třídy

Více

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí: Metody řazení ve vnitřní a vnější paměti. Algoritmy řazení výběrem, vkládáním a zaměňováním. Heapsort, Shell-sort, Radix-sort, Quicksort. Řazení sekvenčních souborů. Řazení souborů s přímým přístupem.

Více

Náplň. v.0.03 16.02.2014. - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

Náplň. v.0.03 16.02.2014. - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění Náplň v.0.03 16.02.2014 - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění Spojení dvou samostatně setříděných polí void Spoj(double apole1[], int adelka1, double

Více

OOPR_05. Případové studie

OOPR_05. Případové studie OOPR_05 Případové studie 1 Přehled probírané látky příklad skládání objektů - čára příklad skládání objektů kompozice a agregace přetížené konstruktory pole jako datový atribut 2 Grafický objekt - čára

Více

Java efektivně. Lukáš Zapletal liberix.cz. Pokročilejší techniky programování v Javě

Java efektivně. Lukáš Zapletal liberix.cz. Pokročilejší techniky programování v Javě Lukáš Zapletal liberix.cz Pokročilejší techniky programování v Javě Tato prezentace vychází kompletně z knihy J. Blocha: Effective Java (A-W 2001) u nás Java efektivně - 57 zásad softwarového experta (Grada

Více

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Bridge. Známý jako. Účel. Použitelnost. Handle/Body Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době

Více

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

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

Více

Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu

Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu Procesy, vlákna Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu Implementace vláken one-to-one o implementace na úrovni jádra o každé vlákno je pro

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

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo didaktického materiálu EU-OPVK-VT-III/2-ŠR-303 Druh didaktického materiálu DUM Autor RNDr. Václava Šrůtková Jazyk čeština

Více

Proměnné a datové typy

Proměnné a datové typy Proměnné a datové typy KAPITOLA 2 V této kapitole: Primitivní datové typy Proměnné Opakování Mezi základní dovednosti každého programátora bezesporu patří dobrá znalost datových typů. Ta vám umožní efektivní

Více

Vaše jistota na trhu IT. Balíčky. Rudolf Pecinovský rudolf@pecinovsky.cz

Vaše jistota na trhu IT. Balíčky. Rudolf Pecinovský rudolf@pecinovsky.cz Vaše jistota na trhu IT Balíčky Rudolf Pecinovský rudolf@pecinovsky.cz Problémy velkých aplikací Rozsáhlé aplikace používají velké množství názvů objektů a jejich zpráv, které různé části programu sdílí

Více

19. Projekt Adventura

19. Projekt Adventura Projekt Adventura strana 189 19. Projekt Adventura 19.1. Základní popis, zadání úkolu Pracujeme na projektu Adventura, který je ke stažení na java.vse.cz. Po otevření v BlueJ vytvoříme instanci třídy Hra.

Více

Datové struktury strana 81

Datové struktury strana 81 Datové struktury strana 81 10. Datové struktury Tato kapitola popisuje, jak uchovávat více instancí stejného typu (stejné třídy) nebo jeho podtypů. Vzhledem k tomu, že je to poměrně častá úloha, většina

Více

Základy vytěžování dat

Základy vytěžování dat Základy vytěžování dat předmět A7Bb36vyd Vytěžování dat Filip Železný, Miroslav Čepek, Radomír Černoch, Jan Hrdlička katedra kybernetiky a katedra počítačů ČVUT v Praze, FEL Evropský sociální fond Praha

Více

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

Více

11. Dědičnost. Dědičnost strana 103

11. Dědičnost. Dědičnost strana 103 Dědičnost strana 103 11. Dědičnost V této kapitole si vysvětlíme jeden ze základních pojmů objektově orientovaného programování dědičnost (inheritance). S ní souvisejí i následující témata: předek a potomek

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

Rozklad problému na podproblémy

Rozklad problému na podproblémy Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy zadaný problém rozložíme na podproblémy pro řešení podproblémů zavedeme abstraktní příkazy s pomocí abstraktních

Více

ADT Seznam. dynamická množina. prvky vkládáme a vyjímáme na libovolné pozici (místě) v jejich posloupnosti (sekvenci) zásobník a fronta vs.

ADT Seznam. dynamická množina. prvky vkládáme a vyjímáme na libovolné pozici (místě) v jejich posloupnosti (sekvenci) zásobník a fronta vs. ADT Seznam dynamická množina prvky vkládáme a vyjímáme na libovolné pozici (místě) v jejich posloupnosti (sekvenci) zásobník a fronta vs. seznam Příklad řádek znaků na obrazovce (model) abcd - okamžitá,

Více

Reranking založený na metadatech

Reranking založený na metadatech České vysoké učení technické v Praze Fakulta informačních technologií Katedra softwarového inženýrství Reranking založený na metadatech MI-VMW Projekt IV - 1 Pavel Homolka Ladislav Kubeš 6. 12. 2011 1

Více

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1 1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1 1. Prvocisla: Kratky ukazkovy priklad na demonstraci baliku WEB. Nasledujici program slouzi pouze jako ukazka nekterych moznosti a sluzeb,

Více

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Návrh a tvorba WWW stránek 1/14. PHP a databáze Návrh a tvorba WWW stránek 1/14 PHP a databáze nejčastěji MySQL součástí balíčků PHP navíc podporuje standard ODBC PHP nemá žádné šablony pro práci s databází princip práce s databází je stále stejný opakované

Více

Konstruktory překladačů

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

Více

Paradigmata programování 1

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

Více

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

První kapitola úvod do problematiky

První kapitola úvod do problematiky První kapitola úvod do problematiky Co je to Flex Adobe Flex je ActionSript (AS) framework pro tvorbu Rich Internet Aplications (RIA), tedy knihovna AS tříd pro Flash. Flex používáme k vytvoření SWF souboru

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

návrhový vzor Singleton.

návrhový vzor Singleton. KAPITOLA 2 Návrhový vzor Singleton Jazyk PHP 5 vám pomocí klíčových slov public, protected a private umožňuje kontrolovat, kdo získá přístup k určitým atributům a metodám třídy. Dále vám jazyk PHP 5 umožňuje

Více

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů ÚVODNÍ ZNALOSTI datové struktury správnost programů analýza algoritmů Datové struktury základní, primitivní, jednoduché datové typy: int, char,... hodnoty: celá čísla, znaky, jednoduché proměnné: int i;

Více

7. Datové typy v Javě

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

Více

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín Kolekce ArrayList napsal Pajclín Tento článek jsem se rozhodl věnovat kolekci ArrayList, protože je to jedna z nejpoužívanějších. Tento článek není kompletním popisem třídy ArrayList, ale budu se snažit

Více

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti. Intervalové stromy Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme průběžně provádět tyto dvě operace: 1. Změna jednoho čísla v posloupnosti. 2. Zjištění součtu čísel

Více

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

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

Semestrální práce 2 znakový strom

Semestrální práce 2 znakový strom Semestrální práce 2 znakový strom Ondřej Petržilka Datový model BlockFileRecord Bázová abstraktní třída pro záznam ukládaný do blokového souboru RhymeRecord Konkrétní třída záznamu ukládaného do blokového

Více