Cvičení z programování v C++ ZS 2016/2017 Přemysl Čech

Podobné dokumenty
Domácí úkoly 2013/14

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

Šablony, kontejnery a iterátory

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

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

Šablony, kontejnery a iterátory

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

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

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

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

Standardní algoritmy vyhledávací.

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

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

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

Jazyk C++ I. Šablony

Hornerovo schéma. je algoritmus výpočtu hodnoty polynomu P(x) v bodě x 0. eliminuje výpočet i-té mocniny převodem na postupné násobení.

Domácí úkoly Pokročilé programování v C++ LS 2015/2016. NPRG051 Pokročilé programování v C / DÚ

PB přednáška (23. listopadu 2015)

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

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

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

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

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

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

Jazyk C++ II. STL knihovna kontejnery část 1

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

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

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

Šablony funkcí a tříd (Templates) Genericita

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

PROGRAMOVÁNÍ V C++ CVIČENÍ. Michal Brabec

Základní datové struktury

Třídy a struktury v C++

Hrátky s funkcemi. PV173 Programování v C++11. Vladimír Štill, Jiří Weiser. Fakulta Informatiky, Masarykova Univerzita. 29.

Chování konstruktorů a destruktorů při dědění

Jazyk C++ I. Polymorfismus

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

24. listopadu 2013, Brno Připravil: David Procházka

Vector datový kontejner v C++.

Mělká a hluboká kopie

Programování v C++ VI

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

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

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

Konec a tak. PB173 Programování v C++11. Vladimír Štill, Jiří Weiser. Fakulta Informatiky, Masarykova Univerzita. 15.

Generické programování

Funkční objekty v C++.

bonus (max +2 body): bezpečné řešení v debug módu a[x][y] (a.rows()[x][y] a.cols()[x][y]) odchytávat všechny nedefinované akce

Výčtový typ strana 67

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

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

Dědění, polymorfismus

PB161 Základy OOP. Tomáš Brukner

Jazyk C++ I. Šablony 2

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

Lineární datové struktury

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

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

Šablonové metaprogramování v C++ Miroslav Virius KSI FJFI ČVUT

Zpracoval:

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

IRAE 07/08 Přednáška č. 7. Začátek (head)

typová konverze typová inference

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

Jakub Čermák Microsoft Student Partner

Semestrální projekt. Předmět: Programování v jazyce C. Zadání: Operace s maticemi. Uživatelský manuál. ver. 1.0

Kolekce, cyklus foreach

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

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

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

Dynamické datové struktury IV.

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.

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

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

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

Objektově orientované programování v jazyce Python

1. Dědičnost a polymorfismus

Iterátory v C++. int pole[20]; for (int *temp = pole, temp!= &pole[20]; temp++) { *temp = 0;

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

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

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

Jazyk C++ I. Šablony 3

Více o konstruktorech a destruktorech

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

NPRG031 Programování II 1 / :25:46

Abstraktní datové typy

Jazyk C++ II. Šablony a implementace

Objektově orientované programování v jazyce Python

Jazyk C++ II. STL knihovna kontejnery část 2

Objektové programování

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

Abstraktní třídy, polymorfní struktury

Programátorské večery. Tomáš Herceg Microsoft Student Partner

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

Semestrální práce 2 znakový strom

Programování v jazyku C# II. 5.kapitola

Martin Flusser. December 15, 2016

Úvod do programovacích jazyků (Java)

Programování se šablonami

10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++

Transkript:

Cvičení z programování v C++ ZS 2016/2017 Přemysl Čech

cíl: vytvořit třídu inf_system pro ukládání informací o studentech a zaměstnancích působících na fakultě příklad použití: int main() { inf_system inf_system; inf_system.insert("pepa", "Skoba", student, 602111222, "Francouzska 1, Praha"); inf_system.insert("jarda", "Vomacka", student, 777123456, "Belgicka 28, Brno"); inf_system.insert("franta", "Vomacka", teacher, 608456789, "Italska 11, Praha"); auto result = inf_system.find<2>(student); print_vector(result); } auto count = inf_system.erase<1>("vomacka"); //vrátí 2 a smaže 2 řádky void print_vector(const vector<inf_system::row_def_const_ptr>& vector) { for (const auto& r : vector) { cout << get<0>(*r) << " " << get<1>(*r) << " " << get<2>(*r) << " " << get<3>(*r) << " " << get<4>(*r) << endl; } }

inf_system - má 5 sloupečků s hodnotami: Jméno (std::string) Příjmení (std::string) Pozice (enum) např. enum position { student, teacher, external_worker }; Telefon (size_t nebo int) Adresa (std::string) třída nemá pevné rozhraní, avšak použití by ideálně mělo odpovídat příkladu funkce podmínkou splnění úkolu je implementace tří funkcí insert vloží nový řádek (záznam) do systému se všemi informacemi find specifikován číslem sloupce, podle kterého se hledá čísla sloupců jsou počítány od 0 parametr funkce je daného typu podle zvoleného sloupce vrátí seznam řádků ze systému (nejlépe odkazem (pointer *), const ) podle hledaného klíče v daném sloupci erase opět specifikován číslem sloupce parametr je správně typovaný podle vybraného sloupce vymaže všechny záznamy, u kterých se na dané pozici shoduje parametr s hodnotou záznamu vrací počet smazaných řádků

primární cíl aby vše fungovalo správně sekundární cíl efektivita a úspora předpoklad v systému se bude často využívat funkce find nutná implementace efektivního prohledávání struktury => zakomponování indexů (např. std::map< > či multimap< >) indexy je možné využít i pro funkci erase nutné zakomponovat opravy indexů po vykonání insert a erase také se zamyslete nad složitostí, paměťovou náročností, úhledností kódu a celkovou efektivitou vašeho řešení a snažte se ho optimalizovat pro úspěšné splnění úkolu je nutné naimplementovat indexy!

Jak by mohla vypadat třída v hlavičkovém souboru enum position { student, teacher, external_worker }; class inf_system { //first name, last name, position, telephone, address typedef std::tuple<std::string, std::string, position, size_t, std::string> row_def; typedef const row_def * row_def_const_ptr; template<size_t idx> using type = typename std::tuple_element<idx, row_def>::type; void insert(const std::string& first_name, const std::string& last_name, const position& position, const size_t& telephone, const std::string& address); template<size_t idx> std::vector<row_def_const_ptr> find(const type<idx>& value) {... } }; template<size_t idx> size_t erase(const type<idx>& value) {... }

nastudujte si práci s třídou std::tuple< > std::tuple_element< >::type, std::get< >( ), std::make_tuple( ), std::forward_as_tuple( ), slajdy z přednášky o šablonách (template) pro tvorbu indexů využijte ideálně polymorfismus (dědičnost) předek nemusí být generický (šablona), potomek může být např. class abstr_index { }; template<size_t idx> class index : abstr_index { }; //abstraktní předek //potomek už může být pro konkrétní sloupec

různé sloupce se stejnými typy musí mít odlišné indexy např. inf. systém má 3x typ std::string pozor na volání funkcí se správnými typy parametrů např. std::string vs char * správně ošetřit indexy pro různé instance systémů inf_system inf1; inf_system inf2; inf1.find<0>( ); inf2.find<0>( ); správně ošetřit kopírování informačních systémů kopírování by mělo být řízené kontejnerovou logikou inf_system inf1; inf1.insert( ); inf2 = inf1; inf2.find<0>( );

termín: 12.1.2017 23:59 čtvtek před posledním cvičením pozor na přeložitelnost bez chyb a ideálně warningů nemusíte testovat na všech platformách - primárně Windows + VS na začátek každého souboru vložte komentář typu // Karel Vomacka NPRG041 2016/2017 vaše řešení vložte do Grupíčku - neposílejte emailem! správné soubory do správných sloupečků! du1.h definice třídy a implementace šablonových funkcí du1.cpp implementace ostatních (nešablonových funkcí) ukázka použití informačního systému