Obsah
PB161 - podklady pro cvičení - Podzim 2015
Domácí úkoly
- Úkol 6: BigUnsigned
- Úkol 4: Jednoduchý bankovní systém
- Úkol 3: Řádkové semínkové vyplňování
- Úkol 2: Barcodes
- Úkol 1: Dekódovanie signálu
13. přednáška/cvičení [týden 14.12.-18.12.2015] (zvaná přednáška)
Materiály k přednášce
Materiály ke cvičení
- zápočet naostro (příklad dodá cvičící)
- zadání šestého domácího úkolu: BigUnsigned
- speciální vánoční odpovědník: PB161_test10
12. přednáška/cvičení [týden 7.12.-11.12.2015] (přehled C++11/C++14)
Materiály k přednášce
Materiály na cvičení
- Testík z přednášky: PB161_test9
- Programovací úkol na cvičení: C++11/C++14
11. přednáška/cvičení [týden 30.11.-4.12.2015] (návrhové principy a vzory, sémantiky jazyků)
Materiály k přednášce
Materiály ke cvičení
- Zápočtový příklad nanečisto: dodá cvičící
- Zadání pátého domácího úkolu: Vyvážený binární strom (bonus: mapa)
10. přednáška/cvičení [týden 23.11.-29.11.2015] (šablony)
Materiály k přednášce
Materiály ke cvičení
- Testík z přednášky: PB161_test8
- Programovací úkol na cvičení: Práce s šablonami
9. přednáška/cvičení [týden 16.11.-22.11.2015] (friend, přetežování operátorů)
Materiály k přednášce
Materiály ke cvičení
- Testík z přednášky: PB161_test7
- Programovací úkol na cvičení: Přetěžování operátorů
- Zadání čtvrtého domácího úkolu: Jednoduchý bankovní systém
8. přednáška/cvičení [týden 9.11.-15.11.2015] (výjimky, RAII)
Materiály k přednášce
Materiály ke cvičení
- Testík z přednášky: PB161_test6
- Programovací úkol na cvičení: ZORK IV
7. přednáška/cvičení [týden 2.11.-8.11.2015] (vnitrosemestrální písemka)
Materiály k přednášce
Přednáška nebyla, místo ní byla vnitrosemestrální písemka. Vzorové zadání ze 12.00 Vzorové zadání ze 13.00
Materiály ke cvičení
- Testík z přednášky není.
- Zadání třetího domácího úkolu: Řádkové semínkové vyplňování
- Procházení vzorových zadání vnitrosemestrálky, cvičící odpoví na případné dotazy.
- Programovací úkol na cvičení: ZORK III
- funkční objekty (tzv. funktory)
- algoritmy
6. přednáška/cvičení [týden 26.10.-1.11.2015] (kontejnery, iterátory, algoritmy)
Materiály k přednášce
Materiály ke cvičení
- Testík z přednášky: PB161_test5
- Programovací úkol na cvičení: ZORK II
5. přednáška/cvičení [týden 19.10.-25.10.2015] (jmenné prostory, vstupní/výstupní proudy)
Materiály k přednášce
Materiály ke cvičení
- Testík z přednášky: PB161_test4
- Programovací úkol na cvičení: ZORK I
- v druhé části diskuse s cvičícím o multiple dispatch (a případně visitor pattern)
4. přednáška/cvičení [týden 12.10.-18.10.2015] (dynamická alokace, kopírovací konstruktor, přetypování v C++)
Materiály k přednášce
Materiály ke cvičení
- Testík z přednášky: PB161_test3
- Zadání 2. domácího úkolu: Barcodes
- Programovací úkol na cvičení: The Sims (pokračování)
- valgrind a kontrola memory leaks
- g++ -g -pedantic -std=c++11 -Wall -Wextra -o leaks leaks.cpp - pokud použijeme při překladu přepínač -g (debug), tak získáme v následném výpisu valgrindu i čísla řádků s problémy
valgrind -v –leak-check=full ./leaks
- sekce LEAK SUMMARY, ERROR SUMMARY
- žádné ztracené bajty znamenají korektní práci s (de)alokací pouze pro konkrétní běh programu, nikoli obecně
- valgrind v QTCreatoru (menu Analyze) – použití ukáže cvičící
- detekce memory leaks na Windows
- bohužel nelze použit valgrind
- např. Visual Studio obsahuje vlastní nástroj pro detekci (použití funkce _CrtDumpMemoryLeaks() z crtdbg.h, define _CRTDBG_MAP_ALLOC)
#define _CRTDBG_MAP_ALLOC #include <cstdlib> #include <crtdbg.h> void foo() { // kod zpusobujici memory leak _CrtDumpMemoryLeaks(); // vypisu dosud detekovanych leaks pro program v teto chvili // jiny kod, mozny dalsi leak _CrtDumpMemoryLeaks(); // vypisu dosud detekovanych leaks pro program v teto chvili }
3. přednáška/cvičení [týden 5.10.-11.10.2015] (reference, const, přetěžování, statické položky tříd, dědičnost)
Materiály k přednášce
Reklama
Reklama
Chcete si zasoutěžit v programování (v týmech)? Registrujte se na CTU Open! reklama v pdf
BONUS pro studenty PB161:
- 3 měkké body všem účastníkům soutěže
- 10, 7 a 5 tvrdých bodů členům prvních tří týmů z FI (nezávisle na celkovém pořadí)
- 5 tvrdých bodů navíc členům týmů, které se umístí do 5. místa celkově
Materiály ke cvičení
- Testík z přednášky: PB161_test2
- Programovací úkol na cvičení: The Sims
- Psaní testů pomocí catch.hpp vysvětlí cvičící.
- Nezapomeňte si na začátku zakomentovat cíle v CMakeLists.txt tak, aby se kompilovala jen ta část projektu, kterou již máte hotovou.
- Vyzkoušejte si debugging v QT Creatoru, příp. Visual Studiu.
Příklady pro samosudium
Rozdíl mezi přetěžováním (overloading), předefinováním (překrýváním, overriding) a skrýváním (hiding)
- U každé z následujících ukázek určete, jestli se zkompiluje.
- Pokud se podle vás ukázka zkompiluje, určete výstup.
- Pokud se nezkompiluje, určete problém a navrhněte nápravu. Rozmyslete si, jak se bude opravený kód chovat.
- autorem quizů je Petr Pilař
2. přednáška/cvičení [týden 28.9.-4.10.2015] (bez přednášky, státní svátek)
Materiály k přednášce
Nejsou. Místo přednášky bylo samostudium: datový typ string a základy vstupu a výstupu v C++
Materiály ke cvičení
- Testík z přednášky a samostudia: PB161_test1
- Pozor! Odpovědník otvírejte pouze na cvičeních a jen ve chvíli, kdy vám to cvičící řekne. Otevření odpovědníku mimo určenou dobu povede k penalizaci -5 body.
- Zadání 1. domácího úkolu: HW01 Dekódovanie signálu
- Informace o průběžných bodících za aktivitu na cvičeních
- Úkol na cvičení: Pokračování křižovatek
- Při řešení jednotlivých dílčích úkolů si zakomentujte (pomocí '#') ostatní cíle v CMakeLists.txt tak, aby se kompilovalo jen to, co už máte hotovo.
- Založení SVN a otestování odevzdávání domácích úkolů
- Pokud jste tak dosud neučinili, podívejte se na popis v 1. cvičení.
- Ukázka doplnění komentáře ve stylu JavaDoc a generování dokumentace Doxygenem http://cecko.eu/public/doxygen
1. přednáška/cvičení [týden 21-28.9.2015] (Základy OOP, implementace OOP v C++)
Materiály k přednášce
Materiály ke cvičení
- Bez domácího úkolu
- Bez testíku ze cvičení
- Programovací úkoly na cvičení (v pátek bude zveřejněno ukázkové řešení)
- Poznámky:
- jste-li v učebně, kde není nainstalován CMake, stáhněte si stand-alone verzi na http://cmake.org/download (varianta Windows ZIP)
- Pokud pracujete na svých noteboocích a nedaří se vám importovat CMake projekt do QTCreatoru, nainstalujte si CMake
- cvičící vysvětlí jednotlivé části TrafficLight.h
- Pro část Semafor vložíme pro kompilaci pouze soubory trafficlight.h, trafficlight.cpp a trafficlight_demo.cpp
- při implementaci metod v TrafficLight.cpp je nutné použít specifikaci TrafficLight::metoda, aby překladač věděl, že se jedná o funkci třídy TrafficLight
- pokud dostáváme error multiple main, tak bylo vloženo několik souborů s main (main pro TrafficLight a Crossroad)
- zatím nezařazujte catch.hpp, trafficlight_tests.cpp obsahuje take catch.hpp a main
- Testy (Catch)
- jednoduchý framework Catch https://github.com/philsquared/Catch
- přidejte soubor trafficlights_tests.cpp (a odstraňte z překladu trafficlight_demo.cpp)
- přidejte přepínač -Wno-variadic-macros (jinak nastává chyba warning: anonymous variadic macros were introduced in C99)
- cvičící vysvětlí význam TEST_CASE, SECTION, REQUIRE, REQUIRE_FALSE
- Na cvičeních máte možnost praktikovat párové programování, pokud vám to vyhovuje (ale domácí úkoly se vypracovávají vždy samostatně)
- All I really need to know about pair programming I learned in kindergarten: https://dl.acm.org/citation.cfm?id=332848 (přístup z univerzitní sítě nebo přes VPN)
- Je to zajímavé, zábavné - zkuste to!
Odevzdávání domácích úkolů − otestování
- lokální adresář na PC, podadresáře hw01, hw02, …, hw05, hw06
- přidání uživatele xtoth1 do repozitáře s právem číst
- Otestování odevzdání nanečisto
- Vyzkoušejte si proces odevdávání domácích úkolů na testovacím příkladu
- Použijte /home/xtoth1/kontrPublic/odevzdavam pb161 hello nanecisto (nikoli hw01)
- Obdržíte na svůj mail na ISu vyhodnocení vašeho programu.
- Další spuštění skriptu bude obsahovat záměrné vložení zpoždění o 15 minut (tj. můžete odevzdat hned, ale vyhodnocení dojde až za 15 minut)
Témata na samostatnou práci (mělo by být známé z předešlých předmětů)
- Kompilace ukázkového programu Hello world
- Aisa - návod uveden níže
- Aise - kompilace s make (makefile připraven)
- Projekt v QTCreator
- Doplnění komentáře ve stylu JavaDoc a generování dokumentace Doxygenem http://elearning.simontoth.cz/public/doxygen
- Překlad na příkazové řádce na aise (předpřipravený zdrojový kód), ukázka postupu, ukázka chyby překladače, spuštění
- Překlad po částech - samostatně doma
- Preprocessing „g++ -E hello.cpp > hello.i„
- Kompilace „g++ -S hello.i„
- Sestavení „as hello.s -o hello.o„
- Linkování „g++ hello.o„
- Vytvoření projektu v QT Creator, překlad, spuštění
- Windows učebny - spuštění nainstalovaného programu
- Linux učebna B130
- module add qtsdk-5.3.1
- qtcreator
- Tutoriál vytvoření projektu
- Kód na procvičení 1 a 2
- Vytvoření projektu na disku H:\ (windows home, preferováno) nebo J:\ (aisa home)
- Pokud nelze vytvořit nový C++ projekt (viz. tutoriál)
- zvolte možnost Tools→Options→Build&Run→QT versions→Add
- vyberte soubor C:\QT\Qt5.3.1\5.3\mingw482_32\bin\gmake.exe
- zvolte možnost Tools→Options→Build&Run→Kits→Add
- vyplňte pojmenování Name: např. MinGW32
- vyplňte Compiler: MinGW (x86 32bit)
- vyplňte QT version: Qt 5.3.1 (pokud tuto možnost nemáte, chybí vám předchozí krok v QT versions→Add)
- klikněte OK
- (v českém prostředí se jedná o nabídky v Nástroje→Volby→Překlad a spuštění→QT verze→Přidat)
- Nastavení překladových přepínačů pro C++ (QMAKE_CXXFLAGS += -std=c++11 -pedantic -Wall -Wextra)
- Report problémů na jednotlivých strojů - pokud narazíte na jakoukoli nefunčnost instalace na používaném počítači, nahlašte prosím tyto problémy svému cvičícímu - diky.
Připojení na Aisu:
- otevřít SSH terminál
- Windows (B116 a B117) - např. předinstalováné Putty, vyplnit
- Linuxu (B130) - Terminál a příkaz ssh aisa
- zkontrolujte, zda máte správně nastavené kódování (jinak se objevují paznaky v normálním výpisu - typicky a s vlnovkou apod.)
- Window→Translation→Remote character set: UTF-8
- autentizace pomocí loginu xVasLoginZPrijmeni a hesla (pokud jste dosud nepoužili, tak je možná sekundární heslo ISu)
- dialog ohledně neznámého klíče můžete odkliknout OK (správně byste měli )
- stejným způsobem si otevřete ještě jeden další terminál (první bude „překladový“, druhý „editovací“)
Vytvoření a editace souboru na Aise:
- použijte svůj oblíbený editor - pokud jej ještě nemáte, zkuste níže uvedené
- editor Pico
- pico jmeno_souboru.c
- zobrazení nápovědy Ctrl+G
- uložení souboru Ctrl+O
- ukončení editace Ctrl+X
- editor Vim
- vim jmeno_souboru.c
- Jste zoufalí a chcete ven :)? Napiště :q!
- editor ve WinSCP (Windows)
- nástroj umožňující bezpečný přenos souborů mezi Windows a Unix stroji
- stáhněte si Portable Executables verzi z http://winscp.net/eng/download.php#download2
- připojte se na Aisu analogicky jako pro Putty
- vytvořte nový soubor pomocí Shift+F4 (s příponou .c)
- editujte soubor, uložte pomocí Ctrl+S
- zadejte znovu heslo
- v tuto chvíli máte soubor na Aise a můžete jej překládat
- využití namapovaného home adresáře na Aise u Windows strojů na fakultě
- editace souboru libovolným vhodným editorem
- po uložení dojde k propagaci na Aisu a můžete spustit překlad
Překlad programu na Aise:
- předpokládá se otevřený terminál na Aise (začínáte ve svém home adresáři)
- vstupte do adresáře se zdrojovým souborem (např. cd pb161)
- přidejte si aktuální verzi g++: module add gcc-4.8.2
- g++ -std=c++11 -pedantic -Wall -o nazev_spustitelneho_souboru nazev_zdrojoveho_souboru.cpp - přeloží soubor do spustitelné podoby
- ./nazev_spustitelneho_souboru