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.

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

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

Více o konstruktorech a destruktorech

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

Abstraktní datové typy

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

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

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

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

Rekurzivní algoritmy

DSA, První krok: máme dokázat, že pro left = right vrátí volání f(array, elem, left, right)

Jazyk C++ I. Šablony 2

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

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

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Kolekce, cyklus foreach

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

Konstruktory a destruktory

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

Programování II. Návrh programu I 2018/19

Datové struktury. alg12 1

Mělká a hluboká kopie

KTE / ZPE Informační technologie

Abstraktní třídy, polymorfní struktury

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Dědění, polymorfismus

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

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

Poslední nenulová číslice faktoriálu

8 Třídy, objekty, metody, předávání argumentů metod

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Šablony, kontejnery a iterátory

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

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

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

Ukazka knihy z internetoveho knihkupectvi

Jazyk C++ I. Polymorfismus

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

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

NPRG030 Programování I, 2018/19 1 / :03:07

Úvod do programování - Java. Cvičení č.4

Pro kontrolu správného formátu hodnoty N použijeme metodu try-catch.

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

1. D Y N A M I C K É DAT O V É STRUKTUR Y

Šablony, kontejnery a iterátory

Dynamická identifikace typů v C++.

Algoritmizace a programování

Zápis programu v jazyce C#

Programovací jazyk Pascal

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

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

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

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

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

dovolují dělení velkých úloh na menší = dekompozice

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

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

Virtuální metody - polymorfizmus

Úvod do programovacích jazyků (Java)

Dynamické datové typy a struktury

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

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

Abstraktní datové typy: zásobník

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

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

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

Algoritmy a datové struktury

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

Úvod do programovacích jazyků (Java)

Generické programování

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

Dynamické datové struktury I.

PODPROGRAMY PROCEDURY A FUNKCE

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2

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

Objektové programování

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

konstruktory a destruktory (o)

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Časová a prostorová složitost algoritmů

Dědičnost (inheritance)

Syntaxe vyjímek. #include <iostream> #include <string> using namespace std; // Trida vyjimek class Vyjimka { private:

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

OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů Standardně zavedené proudy

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

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

Středoškolská technika 2017 PROGRAM NA GENEROVÁNÍ PRVOČÍSEL

PREPROCESOR POKRAČOVÁNÍ

Stromy, haldy, prioritní fronty

NMIN102 Programování /2 Z, Zk

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

Dynamické datové struktury IV.

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

Správa paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Zpracoval:

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Jazyk C# (seminář 6)

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

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

Transkript:

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 pro vyhledání položky v binárním stromu. 4) Vysvětlete využití výjimek (v jazyce C++). 5) Co je to destruktor, kdy je volán? 6) Jaký má vliv první středník v následujících příkazech: while (n < 10) ; n ++ ; 7) Vyberte vhodný příkaz pro vyhledávání hodnoty v seznamu: a) while (p->key!= value && p!= NULL) p = p->next; b) while (p!= NULL && p->key!= value) p = p->next; Výběr zdůvodněte. 8) Napište deklaraci šablony třídy, která bude představovat prvek spojového seznamu. 9) Slovy popište význam následující deklarace: int * f ( int, int * ); Na následující stránce jsou další tři příklady

10) Nechť jsou dány deklarace: class A class B : public A class C : public B A * p = new B; Jaké budou typy a hodnoty následujících výrazů: dynamic_cast < B * > (p) dynamic_cast < C * > (p) 11) Nechť jsou dány deklarace: class A virtual void f (); void g (); class B : public A virtual void f (); void g (); A * p = new B; Které funkce budou zavolány následujícími příkazy? p->f (); p->g (); 12) Nechť je dána procedura pro násobení matic: const N = 100; type pole = array [1..N, 1..N] of real; procedure mult (var v: pole; var a, b: pole); var i, j, k: integer; s: real; begin for i := 1 to N do for j := 1 to N do begin s := 0; for k := 1 to N do s := s + a [i,k] * b [k,j]; v [i,j] := s; Nalezněte chybu při použití této procedury v následující situaci: mult (D, D, E); Navrhněte vhodnou opravu.

Informatika 10.9. 2013 Příklad 1: Const n = 100; Var a: array [1..n] of real; Procedure QuickSort (ii, jj: integer); Var i, j, s: integer; h, t: real; Begin i := ii; j := jj; s := (i + j) div 2; h := a [s]; (* pivot *) while i <= j do begin while a[i] < h do i := i + 1; while a[j] > h do j := j - 1; if i <= j then begin t := a[i]; a[i] := a[j]; a[j] := t; i := i + 1; j := j - 1; if ii < j then QuickSort (ii, j); if i < jj then QuickSort (i, jj); Begin QuickSort (1, n); End. Příklad 2: class Node int key; Node * prev; Node * next; Node * first, * last; void insert_last (int new_key)

Node * n = new Node; n->key = new_key; n->next = NULL; n->prev = last; } if (last == NULL) first = n; else last->next = n; Příklad 3: class Node int key; Node * left, right; Node * root; Node * search (int value) Node * p = root; while (p!= NULL && p->key!= value) if (p->key < value) p = p->left; else p = p->right; } return p; // ukazatel na nalezenou polozku, nebo NULL pokud hodnota nebyla nalezena } Příklad 4: Výjimky dovolují přerušit výpočet a pokračovat v místě pro ošetření chyby či neobvyklé situace. Výjimku lze vyvolat příkazem throw výraz; nebo výjimka vznikne chybou v programu (dělení nulou, použití nulového ukazatele, ) Příkaz try zachycuje výjimky vzniklé v příkazu následujícím po klíčovém slově try. Příkaz try obsahuje jednu nebo více částí catch pro zpracování vzniklých výjimek. Při zachycení výjimky se vyhledá část catch jejíž parametr typově odpovídá vzniklé výjimce. Pokud vhodná část catch neexistuje šíří se výjimka dále. Pokud není výjimka ošetřena v původní funkci, šíří se výjimka do funkcí, které původní funkci volaly. (Pokud se pro výjimku nenalezne vhodná konstrukce catch, je zavolána standardní funkce terminate.)

Příklad 5: Destruktor je metoda třídy volaná v okamžiku zániku instance. Příklad deklarace class C private: int * p; C () p = NULL; } // konstruktor ~C () if (p!= NULL) delete p; } // destruktor Instance dynamické proměnné zanikne při volání operátoru delete. C * u; u = new C; delete u; Instance lokální proměnné zanikne při opuštění oblasti viditelnosti ve které byla proměnná definována. C v;... /* zde je volán destruktor */ } Globální a statické proměnné zanikají při ukončení programu. Příklad 6: První středník reprezentuje prázdný příkaz, který je tělem cyklu: while (n < 10) ; Pokud je n < 10 je tento cyklus nekonečný. Pokud je n >= 10 neproběhne tělo cyklu ani jednou. Po cyklu následuje příkaz pro zvětšení proměnné n. Příklad 7: while (p!= NULL && p->key!= value) p = p->next; V okamžiku kdy zpracováváme poslední prvek seznamu (nebo pokud je seznam prázdný), proměnná p obsahuje nulový ukazatel, a proto nelze vyčíslit výraz p->key. Zvolím variantu, která nejprve testuje ukazatel, zda není nulový. Pokud je první operand před && nepravdivý, druhý operand se nevyhodnocuje. Příklad 8: template <class T> class Node T value; Node <T> * next;

Příklad 9: Funkce f vracející jako výsledek ukazatel na celé číslo (int). Funkce má parametry typu int a ukazatel na int. Příklad 10: dynamic_cast <B*> (p) je typu B* a ukazuje (po přetypování) na objekt p dynamic_cast <C*> (p) je typu C* a má nulovou hodnotu Příklad 11: p->f () volá funkci B::f (funkci f ze třídy B), neboť f je virtuální. p->g () volá funkci A::g, neboť g není virtuální. Příklad 12: V případě volání procedury mult (D, D, E) odkazuje parametr v a parametr a na stejnou proměnnou. Všechny parametry jsou předávány odkazem. Při uložení první hodnoty do výsledného pole v dojde změně levého operandu a. Tomu lze zabránit tím, že vstupní operandy budeme předávat hodnotu. Řádku procedure mult (var v: pole; var a, b: pole); nahradíme řádkou procedure mult (var v: pole; a, b: pole);