BPPC – praktické programování v C++
Náplň cvičení 2018
Důležité
přednášky pro tvorbu DU/projektu – všechny.
Mimořádně
důležité přednášky: Obecný popis objektů (tvorba zadání), Rozbor
projektu.
!!! Stránky jsou ve vývoji !!!
Cvičení
upravené pro Zimní semestr 2018/19: 1-8
Týden 1:
Úvod |
Organizace cvičení - cvičící, laboratoř, bezpečnost, plán cvičení, bodování, páteční cvičení oborného základu |
Cvičení |
Vstupní test – opakování jazyka C – konzultace výsledků |
Cvičení |
|
Procvičení |
Práce se soubory, zjištění statistiky znaků v souboru |
Procvičení |
Jednoduchá grafika – (načtení dat, grafický výstup, cykly) |
Projekt DU |
Zjistěte, co je ADT (abstraktní datový typ; základní vlastnosti; např. wikipedia;) |
Týden 2
Projekt |
Co je ADT? Jaké má základní vlastnosti? |
Cvičení |
Kontrola dokončení příkladu z minulého cvičení |
Cvičení |
Procvičení neobjektových vlastností (tisk, new, delete, výjimky) |
Procvičení |
Vytvořte interpret jazyka Brainfuck |
Projekt DU |
Jaké jsou základní ADT? Jaké jsou jejich vlastnoti? Jak se jmenují jejich základní funkce/operace? (Fronta/zásobník/množina/asociativní pole/strom... ; List/Stack/Set/Queue/...) Zdroj např. wikipedia z hesla ADT/příklady; zde. |
Týden 3
Projekt |
Jaké jsou základní ADT? Jaké jsou jejich vlastnoti? Jak se jmenují jejich základní funkce? |
Cvičení |
Kontrola dokončení příkladu z minulého cvičení |
Cvičení |
Příklad pro seznámení se s prací pomocí Reference – práce s prvky v paměti, předávání proměnných do funkcí a z funkcí pomocí reference. |
Cvičení |
Procvičení neobjektových vlastností 2 (reference, přetěžování funkcí, namespace) |
Procvičení |
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) |
Procvičení |
Binární strom - morseovka |
Projekt DU |
Seznamte se s pojmy: lineární (spojový) seznam (jednosměrný/obousměrný/cyklický(kruhový)); (datový struktura) strom. Jak se tvoří struktura seznamu/stromu? Jak se vkládají a vybírají prvky (jednoduchý algoritmus)? |
Týden 4
Projekt |
Co
je lineární seznam? Jaký je jeho základní realizační prvek
(struktura pro uzel/node) a jaké má vlastnosti? Jaké má základní
modifikace? |
Cvičení |
Kontrola dokončení příkladu z minulého cvičení |
Cvičení |
|
Procvičení |
Podobné
zadání 2D pole trochu jinak pro procvičení. V dalším cvičení bude zadáno rozšíření. |
Projekt DU |
Co znamená, že je lineární seznam (či ADT) intruzivní nebo neintruzivní? Jak tento princip funguje pro prvky vkládané pomocí hodnoty či ukazatele? Jak funguje pro prvky uchovávané (v seznamu) pomocí ukazatele nebo hodnty? Jak realizovat různé varianty kombinací vkládání a uchování pomocí hodnoty či ukazatele. |
Týden 5
Projekt |
Co znamená, že je lineární seznam (či ADT) intruzivní nebo neintruzivní? Jak tento princip funguje pro prvky vkládané pomocí hodnoty či ukazatele? Jak funguje pro prvky uchovávané (v seznamu) pomocí ukazatele nebo hodnty? Jak realizovat různé varianty kombinací vkládání a uchování pomocí hodnoty či ukazatele. |
Cvičení |
Kontrola dokončení příkladu z minulého cvičení |
Cvičení |
|
Procvičení |
2D pole rozšíření (reference, const, dokončení včetně funkcí „pro pokročilé“) |
Projekt DU |
Lineární seznam (fronta, …) se snažte tvořit tak, aby mohl pracovat jak se základními typy (int, double, .., enum...) tak s nově definovanými složenými typy (třídy, struktury). |
Týden 6
Projekt |
Realizace lineární seznam – řešení problémů |
Cvičení |
Kontrola dokončení příkladu z minulého cvičení |
Cvičení |
Stručné seznámení s tvorbou projektu. Práce ve skupinách. |
Cvičení |
Vytvořte základní konstruktory a destruktor pro třídu CVector |
Projekt |
|
Projekt DU |
Vytvoření tří- nebo
čtyřčlenných skupin, které budou na projektu pracovat společně.
Zvolit datové typy – jednoduchý, složený. Zvolit typ
kontejneru.
Jednoduchý typ:
Základní datové typy (mimo bool), (zvolte jednu z možností): |
Týden 7
Projekt |
Volba skupin a názvů tříd pro dané skupiny vypracování projektu. Nahlášení zvoleného tématu projektů a spolupracovníků. |
Cvičení |
Kontrola dokončení příkladu z minulého cvičení |
Cvičení |
Nástroj pro dokumentování projektů Doxygen |
Procvičení |
Projekt 2D pole jako třída a dokumentace – založení třídy a základní komentář v Doxygen |
Procvičení |
Ukázky tříd komplex a string |
Projekt DU |
Nainstalujte si Doxygen a Graphviz |
Týden 8
Projekt |
Základy
svn, jména a přístupová hesla. Návod k práci s svn
pro pro postupné vypracování a odevzdávání projektů. Adresářová
struktura. Význam dodaných projektů. Stávající dokumentace a její
úpravy. Stávající kód a jeho úpravy. |
Cvičení |
Seznámení se základní třídou projektu CItem a prací s ní.
Doporučení pro tvorbu vlastních tříd do projektu včetně testů a
komentářů v Doxygen. |
Procvičení |
Pokračování 2D pole jako třída – konstruktory, statické metody a datové členy |
Procvičení |
Template – předělejte 2D pole na obecný typ pomocí šablon |
Projekt DU |
1) Nainstalujte si svn.
Nastavte si svn. Zkuste se připojit a ověřte funkčnost (checkout,
update, změna kódu/textu, commit). |
Týden 9
Projekt |
Konzultace projektu – při problémech uložte aktuální verzi do svn. Poznačte si číslo revize. Do komentáře komitu co nejlépe popište problém. Napište mail cvičícímu se subjektem „konzultace v svn cislo_revize“ a názvem skupiny. To je: „konzultace v svn 145 ut11_fronta1“ bez dalšího textu. Pokusíme se podívat a dáme vám vědět. Konzultace na cvičeních jen nejnutnější dotazy – hlavní náplní je sekce „Cvičení“. |
Cvičení |
Doplnění konstruktorů o počítání vzniklých a aktuálně existujících prvků pomocí statických proměnných. Tisk těchto hodnot před, uprostřed a na konci programu. TDD – unit testy na počítání objektů. |
Procvičení |
Operátory pro třídu CVector (unární + (nejjednodušší, vrací referenci), unární – (liší se od + vracením hodnoty); operátor = (vrací *this, kontrola varianty a=a), operátor == (vrací bool) , konverzní operátor int (vrací počet prvků), friend operátor * pro double * CVector (friend funkce), ...) |
Procvičení |
Pokračování 2D pole jako třída - operátory |
Projekt DU |
Přečtěte
si loňské připomínky k odevzdání zadání
a snažte se uvedených nedostatků vyvarovat. |
Týden 10
Projekt |
PRJ poslední konzultace CItem (2x) a zadání Project – odevzdání |
Cvičení |
|
Cvičení |
|
Projekt |
Tvorba
hlavičkového souboru ke kontejneru v adresáři Project –
odevzdání týden 12. Psát společně hlavičky metod, volání (bez
kontroly činnosti) v main a dokumentovat. Main demonstruje činnost
všech metod kontejneru. Musí splňovat podmínky původního zadání
(počty a typ metod/funkcí). |
Týden 11
Přednášky |
Pozvánka na poslední přednášku: |
Projekt |
CItem
a zadání projektu Projekt - hodnocení a rozbor nejčastějších chyb.
Jak opravit výtky opravujících. |
Cvičení |
Vstupy
a výstupy, prostory jmen - implementujte vstupy
a výstupy pomocí
streamů (na konzolu i do souboru). |
Procvičení |
Vytvořte třídu CMatice, která zdědí základní vlastnosti ze
třídy pro obecné 2D pole. |
Projekt |
Práce
na hlavičkovém souboru projektu. Vytvořte hlavičky metod a funkcí
podle zadání projektu. Těla mohou být prázdná (hodnocení kódu a
testů je až součástí konečného odevzdání), ale musí již vracet
správný datový typ (hodnota, reference, return Value; …).
Projekt bude řádně dokumentován (viz. dokumentace u CItem). |
Týden 12
Projekt |
Poslední konzultace hlavičkového souboru a main v Projekt - odevzdání |
Cvičení |
Dědění. Volání konstruktorů a destruktorů, virtuální metody - příklad |
Cvičení |
„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 |
Projekt |
Zadání tvorby kódu, testů a finalizace projektu (dokumentace, zdroje, testy, main). |
Týden 13
Projekt |
Hodnocení
a rozbor nejčastější chyby v hlavičkovém souboru a main v Project.
Jak opravit výtky opravujících. |
Cvičení |
Dokončení příkladů z minulých cvičení |
Cvičení |
konzultace C++ |
Projekt |
Finalizace tvorby kódu, testů a projektu (dokumentace, zdroje, testy, main). Opravení minulých bugů (přeměna na bugfix). Změny oproti již odevzdaným částem (např. v zadání) jsou povoleny. Stránka Dokumentace - popis změn oproti původnímu zadání; popis třídy (filozofie návrhu; volba datových členů; rozviňte popis ze zadání podle skutečné realizace);známé nedostatky; Závěr: možné vylepšení; důvod ponechaných nedostatků (rozsah několik delších vět). Komentáře pro doxygen dokumentaci: souborů; namespace ; třídy; funkcí; metod; proměnných Přítomné metody musí množstvím a typem odpovídat původnímu zadání. U parametrů metod preferujte reference a const (včetně this). Operátory by měly respektovat vlastnosti standardních typů (ne/měnit prvky, když to ne/dělají standardní operátory ...) Tři testovací metody na autora. Testovány budou významné metody kontejneru. Každá testovací metoda bude obsahovat alespoň tři Asserty (významově různé). Minimálně dva z těchto Assertů musí pracovat s neprázdným objektem kontejneru. Jeden z testů každého autora bude pracovat s pamětí (tj. bude kontrolovat metodu kontejneru pracující s pamětí pomocí metod knihovny check). Na kvalitu a rozsah testů se podívejte v testech u Citem. Testy musí fungovat pro všechny čtyři Citemy. V main volejte všechny (public) metody. Musí fungovat pro všechny CItemy. V hlavičce kontejneru nadefinujte pro každý CItem namespace a v něm dvě metody TestStringKontejner0 a TestStringKontejer1 pro získání vzorových testovacích řetězcú pro kontejner s daným Citem - řetězce budou obsahovat 3-5 prvků.Pomocí těchto metod se v mainu inicializují dvě proměnné typu kontejner - s jejich pomocí demonstrujte činnost metod/operátorů. (např. vytiskněte vstupní proměnné, název operace a výsledek) Main nebude vyžadovat vstup z klávesnice - vstupní stream demonstrujte pomocí istrsream. U kódu těl se hodnotí celková kvalita realizace. Metoda musí pracovat a správně reagovat i na vstupní proměnnou, která nemá platná data („prázdná“, neinicializovaná proměnná). Tento seznam se bude upřesňovat na základě dotazů. |
|
Projekt
|
Formulace
zadání |
|
Dědění |
dědění
seznamte se s děděním. |
|
Cvičení |
Další náměty pro procvičování:
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.
Zjistěte, zda by při tvorbě projektu nepomohla STL, přepracujte (neplatí pro kategorii PRJ!!!)
Implicitní parametry – automaticky doplňované při volání funkcí bez parametrů
Přetěžování funkcí – více stejně pojmenovaných funkcí
Implementujte funkční operátor jako operátor pro přístup k prvkům pole (využijte návrat hodnoty pomocí reference)
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.
Implementace Checker nebo VLD do 2D pole pro kontrolu paměti
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.
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ů)
přepracovat 2D pole na obecný typ pomocí šablon (template)
Šablony ( prostudujte program na výpočet matic realizovaný pomocí šablon, vyzkoušejte si napsat šablony pro jednoduché funkce)
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
Členské a nečlenské „funkce“, alokace paměti
Poslední úpravy 2018-11-07