Obsah

PB161 - podklady pro cvičení - Podzim 2015

Domácí úkoly

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í

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í

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í

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í

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í

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í

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í

  • 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)
  • 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í

  • Založte si SVN repozitář, ukázka základních operací dle návodu nebo videa
  • lokální adresář na PC, podadresáře hw01, hw02, …, hw05, hw06
  • přidání uživatele xtoth1 do repozitáře s právem číst
    • 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
  • 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
      • 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:

  1. 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
  2. autentizace pomocí loginu xVasLoginZPrijmeni a hesla (pokud jste dosud nepoužili, tak je možná sekundární heslo ISu)
  3. dialog ohledně neznámého klíče můžete odkliknout OK (správně byste měli )
  4. 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:

  1. použijte svůj oblíbený editor - pokud jej ještě nemáte, zkuste níže uvedené
  2. editor Pico
    • pico jmeno_souboru.c
    • zobrazení nápovědy Ctrl+G
    • uložení souboru Ctrl+O
    • ukončení editace Ctrl+X
  3. editor Vim
  4. 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
  5. 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:

  1. předpokládá se otevřený terminál na Aise (začínáte ve svém home adresáři)
  2. vstupte do adresáře se zdrojovým souborem (např. cd pb161)
  3. přidejte si aktuální verzi g++: module add gcc-4.8.2
  4. g++ -std=c++11 -pedantic -Wall -o nazev_spustitelneho_souboru nazev_zdrojoveho_souboru.cpp - přeloží soubor do spustitelné podoby
  5. ./nazev_spustitelneho_souboru
QR Code
QR Code public:pb161_cviceni (generated for current page)