BPPC – praktické programování v C++
Náplň cvičení
Během existence kurzu vzniklo několik sad příkladů podle rozsahu výuky a znalostí studentů. Příklady byly vytvořeny většinou tak, aby se každým z nich procvičila určitá vlastnost jazyka. Jelikož si studenti stěžovali, že jsou málo praktické, došlo k jejich spojení do projektů, které se budou postupně tvořit v celém semestru. Původní příklady zůstávají součástí cvičení jako příprava. Jsou vhodné pro ty, kterým vyhovují příklady jednodušší, týkající se jediného tématu. Řádky v tabulce označené jako „Příklad X“ jsou tedy tyto samostatné příklady, které se vztahují k danému cvičení patřícího do většího celku. Je možné je použít jako příklady na domácí cvičení k procvičení jednotlivých vlastností.
Příklady vypracovávané na cvičení
mají kategorii „Cvičení“. Hlavní částí cvičení jsou
zpočátku jednotlivé příklady, následně projekt vypracovávaný v rámci
cvičení. Jedná se o koncept jediného rozsáhlého projektu, který se
řeší v jednotlivých krocích (rozložených do cvičení). To samozřejmě
vyžaduje neustálou práci a dokončování práce ze cvičení. Proto je na
cvičení nutná příprava – připomenout si minulou práci (dokončit
nedodělky a odladit chyby), přečíst si aktuální zadání a snažit se ho
pochopit. Cvičení bude začínat krátkým rozborem úlohy a odpovědí na
dotazy (ohledně minulé práce a aktuálního zadání).
Se zadáním
těchto příkladů byste měli být při příchodu do cvičení seznámeni a
měli byste je mít promyšlené tak, abyste mohli rovnou přistoupit k
řešení.
V sekci Ukol1 a Ukol2 jsou složitější verze projektu
realizovaného v rámci cvičení. Ukol 1 je určen pro všechny studenty,
Ukol 2 je složitější a vyžaduje více úsilí pro zvládnutí. Oba
projekty navazují na látku probranou na přednáškách.
Poslední částí cvičení je projekt, který bude vypracováván doma – Projekt / DU. Tento projekt bude možné konzultovat v rámci cvičení. Konzultace se musí týkat konkrétních, kvalitně definovaných problémů. Projekt bude odevzdáván po částech (průběžná kontrola chyb vyučujícím), které se budou hodnotit samostatně. Výsledný součet bodů bude hodnocením cvičení (bodové hodnocení je průběžné, ale do IS bude zapsáno celkově po odevzdání poslední části projektu). Na tomto projektu by se nemělo pracovat během cvičení. Příklady ze cvičení budou mít přednost i vůči konzultacím projektu.
Z časových a prostorových důvodů
není možné sledovat práci jednotlivých studentů. Proto nemůžeme
splnit přání studentů, abychom je do práce více nutili. Je potřebná
samostatná práce studenta. V případě, že nedokážete vypracovat
správné řešení, využijte skripta ke kurzu. Pokud se vám problém ani
poté nepodaří vyřešit (do cca 5-10 minut), kontaktujte cvičícího.
Snažte se pokládat co nejkonkrétnější dotazy (a ne „mě to
nefunguje“).
Při řešení příkladů by se mělo
postupovat:
- přečíst zadání (pokud je to nutné potom přečíst i
nápovědu)
- promyslet si řešení a stručně si ho načrtnout na papír
- naprogramovat volání funkcí a jejich těl
- vytvořit vzorová
volání funkcí na prozkoušení správnosti řešení (v případě, že to
nefunguje, použít debuger (trasování programu a zobrazování hodnot),
vytvořit testovací vstupní a výstupní (srovnávací) soubory pro
automatickou kontrolu algoritmů po úpravách
!!! Stránky jsou ve vývoji !!!
Týden |
Typ příkladu |
náplň |
1 |
úvod |
Organizace cvičení - cvičící, laboratoř, bezpečnost, plán cvičení, bodování |
Cvičení |
Postup sestavení programu v prostředí MS Visual C (preprocesor, kompilátor, linker, zdrojové a hlavičkové soubory, spustitelné a knihovní soubory (statické a dynamické)). Základní orientace v prostředí - MS Visual C++ |
|
Cvičení |
Cykly, funkce, předávání proměnných – násobilka (kroky zadání 0 - 4) |
|
Příklad 1 |
Formátovaný tisk reálných čísel- cosinus |
|
Příklad 2 |
Jednoduchá grafika – (načtení dat, grafický výstup, cykly) |
|
2 |
Cvičení |
Kontrola minulého cvičení. Pokračování: parametry programu (main), ukládání dat – násobilka (kroky zadání 5 - 7) |
Cvičení |
Formátovaný vstup – načítání dat z disku a jejich zpracování |
|
Příklad 1 |
Makra – použití #define bez a s parametry |
|
Příklad 2 |
bitové operace – práce s bity |
|
Příklad 3 |
Vytvořte interpret jazyka Brainfuck |
|
3 |
Cvičení |
Bitové operace - kódování Base64 |
Cvičení |
Práce s ukazateli - ukazatel jako parametr funkce |
|
Cvičení |
2D pole (ukazatele, práce s dynamickou pamětí, alokace, odalokace) |
|
DU/Projekt |
zadání témat projektu – výběr do příště, |
|
Příklad 1 |
Bitové operace – zjištění velikosti typů, rotace, maskování |
|
Příklad 2 |
Práce s řetězci (dynamické 1D pole) – vytvoření, rušení, délka, spojení, vložení na danou pozici do jiného, srovnání, vyhledávání podstringu ... |
|
4 |
Cvičení |
Komentáře – stavový automat |
Cvičení |
návod k instalaci svn pro odevzdávání projektů |
|
Cvičení |
nástroj pro dokumentování projektů Doxygen |
|
Projekt |
Nahlášení
zvoleného tématu projektů a spolupracovníků. |
|
Příklad 1 |
1D pole – třídění, třídění pomocí indexace – četnost znaků |
|
Příklad 2 |
Prostudujte a doplňte funkci pro morseovku tak aby byla funkční (převodní tabulka je na konci souboru, nutno rozdělit cpp a h soubory) |
|
5 |
Cvičení |
Jednosměrně vázaný seznam – procvičení struktur a ukazatelů |
Cvičení |
Implementujte funkční operátor jako operátor pro přístup k prvkům pole (využijte návrat hodnoty pomocí reference) Reference – práce s prvky v paměti, předávání proměnných do funkcí |
|
Projekt |
základy svn, hesla,
|
|
Příklad 1 |
Binární strom - morseovka |
|
Příklad 2 |
Dodělejte funkce vázaného seznamu (uložení/odebrání ze začátku, konce, daného míst, ...), upravte na dvousměrný seznam, cyklický seznam … využijte pro množinu ... |
|
6 |
Cvičení |
Ukázky tříd komplex a string |
Cvičení |
2D pole – realizujte pomocí struktury, rozšíření stávajících funkcí pro práci se strukturou, funkce pro inicializaci, zrušení, změnu rozměrů, načítání a ukládání dat |
|
Cvičení |
Implicitní parametry – automaticky doplňované při volání funkcí bez parametrů |
|
Cvičení |
Přetěžování funkcí – více stejně pojmenovaných funkcí |
|
Projekt |
Odevzdání zadání |
|
7 |
Cvičení |
Zde by se měl stanovit termín půl-semestrálního testu - předpokládané datum 18.11. Nutno se registrovat v IS. Přemýšlejte o implementaci (způsobu realizace) třídy CPole2D (promyslete také například třídy CKomplex, CString, váš projekt...), zvolte datovou reprezentaci, promyslete vznik a zánik, manipulaci s instancemi třídy z hlediska vnějšího i vnitřního uspořádání. Proveďte návrh třídy kterou budete vypracovávat. |
Cvičení |
Přepracování 2D pole na třídu. Pole musí umožnit dynamickou změnu rozměrů. (Implementujte (a otestujte) - vhodná data, napište konstruktory (implicitní, kopy, konverzní z int, ze dvou prvků, z řetězce) a destruktor, metody pro čtení, zápis, změnu rozměrů), |
|
Cvičení |
Implementace Checker nebo VLD do 2D pole pro kontrolu paměti |
|
Ukol 1 |
Vytvořte projekt a jeho soubory (cpp a h). Hlavičky ošetřete a navrhněte třídy a jejich data. Metody pro nastavení a čtení prvků.Navrhněte vhodné konstruktory a destruktory. |
|
Projekt |
Hodnocení zadání |
|
8 |
Cvičení |
V 10-tém týdnu 19.11.2011 se píše půl-semestrální test. Nutno se registrovat v IS z důvodu rozdělení do dvou časů. rozšíření 2D pole o statická data a metody, friend funkce, Statická data pro počítání objektů vzniklých a aktuálních. Implementujte statické metody pro tisk statických proměnných. Implementujte nastavení pro nastavení a čtení, proveďte rozdělení do hlavičky a zdrojů. Dále pro svou třídu napište základní funkčnost |
Cvičení |
přepracovat 2D pole na obecný typ pomocí šablon (template) |
|
DU/prj |
Konzultace hlavičky, vlastní tvorba, srovnání se zadáním |
|
Příklad 1 |
Šablony ( prostudujte program na výpočet matic realizovaný pomocí šablon, vyzkoušejte si napsat šablony pro jednoduché funkce) |
|
Příklad 2 |
„zabalený“ ukazatel – vytvořte třídu (šablony) vhodnou pro práci s dynamickými proměnnými (ukazateli, inicializace, použití ...) tak aby se zlepšila práce s ukazateli při vyvolání výjimek |
|
9 |
Cvičení |
Členské a nečlenské „funkce“, alokace paměti |
Cvičení |
Pro třídu 2D pole implementujte operátory: rovná se (zřetězení a=b=c, přiřazení a = a), unární ! (true/false, je-li matice naplněná hodnotami k výpočtu, inicializovaná), logické operátory != a ==, operátor >>= (tj. a >>=n kde a je objekt třídy CPole2D a n celé číslo, pro cyklickou rotaci/posun sloupců). Nečlenské operátory (použití friend) viz vstupy a výstupy v příštím cvičení. Konverzní/přetypování ( operator long int – vraci pocet prvků v matici). Bliže viz. Operátory . Operátory by měly souviset s (obecným) 2D polem, a ne s jeho obsahem (Pole bude fungovat s prvky, které musí být schopny (= mít vlastnosti = mít implementované operátory) vytvořít svou kopii (použit operátor =) a zjistit zda-li jsou stejné z důvodu implementace operátorů == a !=, ostatní operátory s hodnotami ani s metodami prvků nepracují. |
|
DU / prj |
Konzultace hlavička |
|
10 |
Cvičení |
Dokončení operátorů |
Cvičení |
Vstupy a výstupy, prostory jmen - implementujte vstupy a výstupy pomocí streamů (na konzolu i do souboru). |
|
DU / prj |
Odevzdání hlavičky |
|
Příklad 1 |
dědění seznamte se s děděním. Připravte rozšíření tříd na dědění a využití virtuálních metod (vlastnosti bázové třídy), přepište |
|
11 |
Cvičení |
rozdělte třídu 2D pole na „obecnou“ část (práce s „tvarem“ matice) a část „nástavbovou“ (matematické operace). Vytvořte základní třídu pro pole a z ní děděním a rozšířením třídu matice Rozdělení třídy pole na základ (rozměry, jejich změny ...) a na specializované - pro držení dat a přístup k nim - vrácení „interpretovaných“ dat na dané pozici ... Rozdělení třídy elementu na bázovou třídu a třídu zděděnou/specializovanou (vytvořit alespoň dvě různé). Pro specializaci využít virtuální funkce. Předvést společnou práci obou (různých) odvozených tříd. propojit moduly a odladit společnou činnost. |
DU / prj |
Práce na zdrojích – program demonstrující činnost třídy, konzultace, hodnocení hlavičky |
|
Příklad 1 |
Rozdělení třídy 2D na základ a nástavbu - vytvoření třídy pro maticový počet a jiné využití (text, piškvorky, šachy ...). Implementace virtuálních funkcí (tisk, rotace, ...) a jejich použití ve společném kódu. |
|
Příklad 2 |
Zjistěte, zda by při tvorbě projektu nepomohla STL, přepracujte (neplatí pro kategorii PRJ!!!) |
|
12 |
Cvičení |
Template – předělejte 2D pole na obecný typ pomocí šablon |
Cvičení |
ze základní třídy vytvořte děděním matici pro znaky (libovolný text, piškvorky ...). V základní třídě vytvořte virtuální metodu tisk a předveďte, že když použijete společně třídy matice (reálná čísla) a matici se znaky, je možné pomocí metody tisk tisknout obě, aniž bychom znali typ matice. |
|
DU / prj |
Tvorba dokumentace. Dokončení zdrojové části, odladění chyb. |
|
Příklad 1 |
||
Příklad 2 |
Dodělání |
|
13 |
Cvičení |
Obhajoba projektů |
DU / prj |
Odevzdání dokumentace. Odevzdání prj – zdroje. Odevzdává se společně ve zdrojových textech s dokumentací generovanou pomocí Doxygen |
|
Ukončení |
Body ze cvičení |
Poslední úpravy 2012-12-06