Home page

BPPC home page

výuka home page


BPPC – praktické programování v C++

Náplň cvičení

náplň přednášek najdete zde



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ý vstupnačí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í

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ů

Projekt
DU/projekt

Nahlášení zvoleného tématu projektů a spolupracovníků.
formulace_zadání projektu

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,
konzultace zadání, dokončení formulace zadání

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 polerealizujte 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
DU/prj

Hodnocení zadání
Tvorba hlavičkového souboru projektu

8



Cvičení

V 10-tém týdnu 25.11.2011 se píše půl-semestrální test. Nutno se registrovat v IS z důvodu rozdělení do dvou učeben.

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

tvorba zdrojové části, konzultace, checker

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
Odevzdání prj – zdroje

Příklad 1

Virtuální metody

Příklad 2

Dodělání
RTTI

13

Cvičení

Obhajoba projektů

DU / prj

Odevzdání dokumentace

Ukončení

Body ze cvičení

 

 

 

 

 

Poslední úpravy 2011-11-21