Tato stránka již není aktuální. Od podzimu 2016 se informace k předmětu PB161 nachází zde.

PB161: Programování v jazyce C++ - Podzim 2015

Rozcestník

Konzultační hodiny

  • Nebojte se v hojné míře konzultovat problémy s domácími úkoly nebo probíranou látkou s učiteli|/cvičícími předmětu.
  • Využijte primárně možnost konzultace problémů přímo na hodině nebo od studentských poradců (viz níže).

Nástroje a jejich manuály

Hlavní:

Základ použití IDE QT Creator, základ ladění (debugging) v IDE QT

Základ použití verzovacího systému SVN

Základ použití dokumentačního programu Doxygen

Doplňkové:

Základ použití IDE Eclipse ve Windows a použití Eclipse v Linuxu.

Základ ladění (debugging) v IDE Eclipse

Základ ladění (debugging) v IDE Code::Blocks a také zde.

Základ použití IDE Visual Studio 2005 a ladění ve Visual Studiu 2005 (použitelné s drobnými změnami i pro VS 2010, pozor, nepoužívá defaultně pro překlad gcc a toleruje nestandardizované rozšíření)

Základ ladění (debugging) v IDE Code::Blocks a také zde.

Pravidla pro cvičení z PB161

29. 9. 2015: přidána informace o nahrazování odpovědníků

Verze platná pro podzimní semestr 2015 (16.9.2015)

Shrnutí nejdůležitějších bodů:

  • Cvičení jsou povinná, povoleny jsou dvě neomluvené (na studijním oddělení) neúčasti.
  • Základní domácí úkoly je možné odevzdávat opakovaně, ale max. 3x a max. do času deadline zadání daného úkolu.
  • Odevzdání úkolu je nutné oznámit vyučujícímu spuštěním speciálního skriptu (detaily viz. pravidla odevzdávání, odevzdání naostro).
  • Úkoly lze odevzdávat definovaným způsobem „nanečisto“. Student získá automaticky výsledky některých hodnotících testů, aniž by přišel o body.
  • Zhruba v polovině semestru proběhne bodovaný průběžný test (namísto přednášky v D3, odpovědní testové archy).
  • Na začátku většiny cvičení proběhne krátký 5min testík z látky probírané na přednášce (celkem 10x). Testík probíhá formou odpovědníku v ISu. Pozor! Otevření odpovědníku mimo dobu cvičení nebo z jiného místa než učebny, v níž cvičení probíhá, bude hodnoceno -5 body.
    • V případě omluvené neúčasti na cvičení (nutné doložit omluvenku na studijní oddělení) je možno zameškané testíky vyplnit v náhradním termínu: na nejbližším cvičení po skončení absence.
  • Zápočet je udělen za docházku a souhrnný zisk alespoň 65 bodů za domácí úkoly, průběžný test, testíky na cvičení a úspěšné vypracování zápočtového příkladu na hodině. Nové! Nutnou podmínkou pro získání zápočtu jsou alespoň čtyři úkoly hodnocené nenulovým počtem bodů.
  • Pro připuštění ke zkoušce je nutné získat zápočet.
  • Zkoušku lze získat po získání zápočtu a za souhrnný zisk alespoň 95 bodů získaných pro zápočet + body za zkouškový test.
  • Nové! Body získané za bonusové části domácích úkolů a body získané za aktivitu na cvičeních jsou tzv. měkké body: nepočítají se do limitu 65, resp. 95 bodů pro zápočet a zkoušku, ale mohou zlepšit známku (viz níže bodové rozložení předmětu).
  • Na cvičeních bude pro psaní programů jako základní IDE využíván QT Creator 2.4.1. Student může využívat jiné IDE (např. Code::Blocks, Visual Studio, Eclipse…), pokud jej preferuje. Domácí úlohy úlohy se ale odevzdávají a kontrolují na Aise s využitím překladače gcc (viz. způsob odevzdávání).
  • Je možné absolvovat cvičení formou párového programování (záleží na domluvě se cvičícím), u domácích úloh je nicméně potřeba aby každý student vypracoval svoje vlastní řešení.

Průběh cvičení

  • Detaily k jednotlivým cvičením včetně zadání domácích úkolů jsou dostupné zde.
  • V prvním týdnu se mají studenti seznámit s překladačem jazyka C++ pod operačním systémem Unix na příkazové řádce, překladem s využitím prostředí QT, způsob zadávání a odevzdávání domácích úkolů a detaily hodnocení.
  • Na cvičeních je vyžadována aktivní práce na zadaných příkladech, které se tématicky vztahují k probrané látce a řešeném domácím úkolu. Cvičící aktivně poskytuje pomoc při řešení případných problémů a upozorňuje na použití dobrých programovacích návyků. Využijte přítomnost cvičícího pro konzultaci problémů!
  • Na cvičeních se pracuje primárně ve vývojovém prostředí QT Creator s využitím překladače gcc. Součástí výuky je i používání debuggeru a dalších vývojových nástrojů - jejich aktivní použití na cvičeních bude vyžadováno. Studenti ovládající dobře jiné vývojové IDE jej mohou použít s tím, že odevdávané domácí úkoly musí jít kompilovat pomocí gcc na aise (viz. Odevzdávání).
  • Nové! V roce 2015 budeme na cvičeních i při řešení domácích úkolů používat normu C++11, tzn. překládáme pomocí g++ -std=c++11.

Domácí úkoly

  • Během semestru bude zadáno 5 domácích úkolů + 1 navíc. Ten je určen především proto, aby mohli nahnat body ti, kterým se v předchozích úkolech moc nedařilo. Z hlediska bodování apod. je všech 6 příkladů rovnocenných.
  • Součástí tvorby programu je také jeho důkladné otestování. Doporučujeme nechat si program otestovat jinou osobou (kolegou), kterého posadíte do role uživatele. V cizím programu se snáze odhalí chyba, než když ho testujete sám - při testování vlastního programu myslíme stejně jako při jeho vytváření.
  • Programy píší zásadně v jazyce C++11 bez nenormalizovaných rozšíření.
  • Programy musí zachovávat požadovaný způsob komunikace s uživatelem (formu vstupu a výstupu, názvy souborů, parametry funkcí včetně main apod.) Program nesmí vyžadovat jiná vstupní data nebo parametry příkazového řádku, než je uvedeno v zadání.

Bodování domácích úkolů

Body za konkrétní domácí úkol se skládají z následujících částí:

  • Míra funkčnosti programu po konci odevzdávání [0 … 9 bodů] (počítá se dosažené maximum ze všech pokusů)
  • Bonus za kompletně funkční program po konci odevzdávání [0 … 3 bodů]. Pokud je příklad napoprvé odevzdán jako plně funkční a dodržuje konvence o vhodném způsobu programování v jazyce C++, tak student získává 3 body. Za každou opravu cvičícím s nalezenou chybou je z tohoto bonusu stržen 1 bod. Pokud není program po konci odevzdávání plně funkční, není tento bonus vůbec udělen.
  • Body za korektní vypracování bonusového rozšíření příkladu [0 … 4 body]. Nové! Tyto body jsou tzv. měkké, tedy se nepočítají do limitu 65, resp. 95 bodů pro zápočet, resp. zkoušku. I zde platí, že bonus je udělovám pouze plně funkčním řešením.
  • Výjimečný bonus za velmi vtipné, originální, zvlášť efektivní nebo formou zpracování vzorné řešení [max. 2 body za příklad]. I tyto body jsou měkké.
  • Nové! Odevzdané domácí úkoly jsou při testování kontrolovány nástrojem valgrind. Pokud při testování valgrind nalezne chyby (memory leaky, nesprávná práce s pamětí, čtení neinicializované paměti), jsou z daného testu odečteny dvě pětiny (40 %) bodů.

Příklad 1: Student odevzdá úkol napoprvé kompletně funkční program bez bonusového rozšíření. Získává 9 + 3 = 12 bodů.

Příklad 2: Student odevzdá program s chybou, opraví ji a při druhém odevzdání je program plně funkční. Získává 9 + (3 - 1) = 11 bodů.

Příklad 3: Student odevzdá program s chybou, opraví ji, ale i při druhém odevzdání je v programu přítomná chyba. Další opravu již z důvodu konce odevzdávání nestihne. Program tak není plně funkční (řekněme že nefunguje jeden ze tří testů). Získává (9 - 1×3) + 0 = 6 body.

Příklad 4: Student odevzdá program s chybou těsně před koncem odevzdávací periody. Cvičící vyhodnotí a v programu je chyba. Další opravu student již odevzdávat nemůže. Program tak není plně funkční (řekněme že nefungují dva ze tří testů). Získává (9 - 2×3) + 0 = 3 body.

Příklad 5: Student odevzdá program s chybou. Cvičící vyhodnotí a student chybu při dalším odevzdání opraví. Opravený program je plně funkční. Získává 9 + (3 - 1) = 11 bodů. Student ale riskoval výrazně méně bodů, viz. příklad 4.

Příklad 6: Student odevzdá úkol napoprvé kompletně funkční program, pouze v bonusu za 2 body je chyba. Kdyby bonus neopravil, získává 12 (tvrdých) bodů (korektnost bonusu se do korektnosti celého úkolu nepočítá). Pokud bonus opraví, získá 9 + (3 - 1) = 11 tvrdých bodů a 2 měkké body.

Příklad 7: Student odevzdá úkol kompletně funkční program bez bonusu (i na několikátý pokus). Může se pokusit dodatečně odevzdat jednou verzi s bonusem.

Příklad 8: Student odevzdá úkol sice kompletně funkční, ale s chybami ve správě paměti (řekněme, že v jedné větvi výpočtu zapomněl na delete a jeho program obsahuje memory leak, který se ale projeví jen při některých vstupech). Úkol prochází třemi testy, každý je za 3 body. Při jednom testu valgrind objeví chybu, při zbývajících dvou ne. Student dostane 3 + 3 + (3 * 3/5) = 7.8 bodů.

Odevzdání domácích úkolů

Pravidla odevzdání

  • Počínaje 1. úkolem se domácí úkoly odevzdávají.
  • Termín nejzaššího odevzdání úkolu je uveden vždy na stránce se zadáním úkolu. Termín je striktní, úkoly odevzdané po termínu cvičící neakceptují.
  • Každý program má v zadání uvedeno, jak se má jmenovat; tyto názvy je třeba dodržovat - vyučujícím to umožňuje kontrolu, včetně automatického odevzdání nanečisto. Speciálně si zkontrolujte velke a malé písmenka všech odevzdávaných souborů.
  • Odevzdáním se rozumí uložení zdrojového programu do SVN repozitáře a spuštění skriptu (viz. dále), který informuje vás i cvičícího o výsledku automatické kontroly. Pouhé uložení programu do repozitáře nestačí - vyučující neví, zda je to již konečný tvar programu a nemůže dost dobře pořád kontrolovat, zda už byl program odevzdán.
  • Zdrojový program nesmí při překladu výše uvedeným překladačem a parametry hlásit chyby ani varování. Pokud jsou při překladu nalezeny chyby nebo varování (používáme na překlad -Werror), testy se vůbec nespouští a student přichází o jeden odevzdávací pokus.
  • Celý program musí být uložen v souborech se jmény výslovně požadovanými v zadání. Pokud je v zadání požadováno pouze vytvoření určité části programu, musíte pro ni sestavit svůj testovací program main pro vlastní odzkoušení, i když cvičící použije jiný testovací main.
  • Nespoléhejte na úkony prováděné s vašimi funkcemi/proměnnými ve vámi dodaném mainu (např. inicializace proměnných apod.). Při opravě bude typicky použit jiný main a tyto úkony se neprovedou!
  • Odevzdávání úkolů je nezávislé na cvičeních. Odpadne-li proto cvičení (např. kvůli státnímu svátku), nijak to neovlivňuje termín odevzdání domácího úkolu.

Pracujte samostatně!

  • Příklady musí student zpracovat samostatně. Tento požadavek nevylučuje možnost společného posouzení metody řešení (algoritmu) s jinými studenty, ale samotné naprogramování musí být vlastní prací. Bude-li zjištěno okopírování zdrojového textu (byť jenom částečné) od jiného studenta nebo z jiného zdroje, bude (u obou studentů) oceněno 0 body z daného domácího úkolu (pozor na podmínku čtyř úkolů s nenulovým počtem bodů). Případy jasného opisování budou navíc předány disciplinární komisi.
  • Podobně bude postiženo odevzdání programu vytvořeného zcela nebo zčásti další osobou (třeba získanou z internetu). Vyučující mají k dispozici prostředky, jak zjistit, zda program není nadměrně podobný programu jiného studenta (včetně programů odevzdaných v předchozích semestrech)!
  • Nad odevzdanými domácími úlohami probíhá automatická kontrola opisu (se zpoždění, každý úkol s každým). Pokud dojde k nalezení příliš podobného programu, budou potrestání oba autoři odevzdaných úkolů udělením 5 záporných bodů navíc k anolaci bodů za řešení. Vážnější případy budou předány disciplinární komisi.
  • Neposkytujte své programy „jako inspiraci“ jiným studentům, mnohokrát se stalo, že student takto získaný program (s mírnými změnami) opsal a odevzdal a za podvod byl postižen i původní autor!
  • Nové! Je zakázáno jakkoli, kdekoli a kdykoli zveřejňovat kód svých řešení (a bude hodnoceno stejně jako opisování: 0 bodů z daného úkolu), a to i po termínu odevzdávání úkolů!

Pracujte zavčas!

  • Obtížnost úkolů se postupně zvyšuje, počítejte i s malými desítkami hodin na vypracování pokročilejších úkolů.
  • Nenechávejte si vypracování úkolů na poslední chvíli - častým důvod neudělání předmětu je postupný skluz při vypracování úkolů, který vede k neodevzdání úkolů.
Pokud budete mít podezření na technickou nefunkčnost Kontru (netýká se tedy konkrétních neprocházejících testů apod.), napište prosím na Michal Mikloš, nejprve ale prosím zkontrolujte:
  • Nechodí vám email s vyhodnocením
    • Každé odevzdávání má vloženu záměrnou prodlevu 15 minut, reálné vyhodnocení může trvat dalších 5-10 minut.
    • Pokud vám email nepřijde ani po 30 minutách, zkontrolujte prosím spambox, zda neskončil tam.
  • Máte nastaveno právo pro xtoth1 pro čtení u SVN repozitáře
  • V odevzdávacím repozitáři máte všechny soubory a jsou v korektním adresáři

Založení odevzdávacího SVN repozitáře

  • Založte si SVN repozitář na Aise
  • Přidejte uživatele xtoth1 s právem číst (read), nikoho dalšího nepřidávejte (jinak by vaše soubory byly přístupné k potenciálnímu opisování).
  • Vytvořte si na lokálním PC adresář PB161 s podadresáři hw01, hw02, …, hw05.
  • Spojte adresář PB161 s SVN repozitářem (viz. návod SVN)
  • Vytvořený repozitář NIKDY nemažte. Pokud potřebujete odstranit nějaký soubor, smažte jej v lokálním adresáři a proveďte commit. Smazání repozitáře (např. přes administrativní rozhraní na fadmin) bude penalizováno -5 body (takové smazání nám způsobuje netriviální problémy pro provoz kontroly domácích úkolů).

Způsob odevzdání

Vypracovaný úkol lze odevzdat „nanečisto“ (pokusně, není bodováno) a „naostro“ (v případě nalezení chyb může dojít ke stržení bodů). Nanečisto lze zkoušet odevzdávat příklad bez omezení. Naostro lze příklad odevzdávat pouze v omezenou dobu a s omezeným počtem pokusů (viz. níže). Zde předpokládáme, že máte korektně vytvořen SVN repozitář, nastavenu cestu k němu atp. (viz. založení odevzdávacího repozitáře)

  • Odevzdání nanečisto:
    • Vypracovaný domácí úkol lze odevzdat „nanečisto“ a v případě zjištění problémů dopracovat.
    • Při odevdávání nanečisto nepíšete svému cvičícímu žádný mail ani mu jinak neoznamujete odevzdání.
    • Odevzdání nanečisto provedete tímto způsobem:
      • Nahrajte odevzdávané soubory do vašeho repozitáře.
      • Spusťte skript /home/xtoth1/kontrPublic/odevzdavam pb161 hw0X nanecisto (např. '/home/xtoth1/kontrPublic/odevzdavam pb161 hw01 nanecisto')
      • Za cca 15 minut obdržíte na univerzitní email vyhodnocení vašeho programu.
    • Důležité: Fakt, že vám odevzdání nanečisto neukazuje žádnou chybu neznamená, že ji váš program neobsahuje. Tato chyba může být zachycena rozšířenou sadou testů při odevzdání naostro a může vést ke stržení bodů. Odevzdání nanečisto slouží jako pomocná doplňková služba a nenahrazuje dostatečné otestování odevzdávaného programu. Speciálně nelze uplatňovat argument, že odevzdání nanečisto chybu nenalezlo a tak by body neměly být strženy.
  • Odevzdání naostro:
    • Všechny odevzdávané programy musí být přeloženy a zkontrolovány na počítači Aisa, neboť na něm je bude kontrolovat i vyučující.
    • Pro překlad se používá překladač g++ -std=c++11 -pedantic -Wall -Werror. (Nové! Všimněte si přepínače -std=c++11.)
    • Odevzdání naostro - spuštění skriptu:
      • Nakopírujte odevzdávané soubory do vašeho SVN repozitáře (viz. výše)
      • Spusťte skript /home/xtoth1/kontrPublic/odevzdavam pb161 hw0X naostro (např. '/home/xtoth1/kontrPublic/odevzdavam pb161 hw01 naostro')
      • Za cca 15 minut obdržíte na fakultní email (email ve tvaru login@fi.muni.cz) vyhodnocení vašeho programu. Další mail obdrží i váš cvičíci a na jeho základě vám budou přiděleny body do poznámkového bloku.
    • Vypracovaný nebo opravený úkol lze odevzdat maximálně 3x.
    • Cvičící má na opravu nahlášeného odevzdaného řešení úkolu 1 týden (typicky ale bude opraveno dříve) a zapisuje výsledek pokusu do poznámkového bloku na ISu. Může studentovi poskytnout dodatečnou informaci o povaze problému, pokud se nějaký vyskytl.
    • Student po obdržení automatického mailu s vyhodnocením nemusí čekat na opravu od cvičího a může provést další odevzdání opraveného příkladu (oprava na základě informací z přijatého mailu) dříve než bude předchozí odevzdání opraveno cvičícím.
    • Pokud je cvičícím úkol shledán zcela v pořádku, jsou uděleny do poznámkového bloku zapsány body. Pokud není úkol do uplynutí konce odevzdávání v pořádku, přidělí cvičící pouze část bodů odpovídající míře fungování aktuálního stavu programu.
    • Po cca 5 týdnech od zadání úkolu dochází ke zveřejnění ukázkového řešení příkladu.
  • Pokud vyučující nalezne v opravovaném programu chyby, oznámí je studentovi (obvykle mailem a zápisem do poznámkových bloků). Do poznámkového bloku zapíše stav odevzdání příkladu včetně krátkého popisu zjištěného problému. Např. „při záporných datech havaruje na výpočtu odmocniny.“
  • K některým složitějším cvičením mají studenti k dispozici testovací data, u všech cvičení si mohou na vzorovém řešení ověřit, jak by měl program pracovat. Vzorová řešení jsou u některých úkolů studentům k dispozici v přeloženém tvaru, po uplynutí doby na odevzdávání bude zveřejněno i ukázkové řešení úkolu.

Ukázkový případ

  1. Student vypracuje příklad a odevzdá „nanečisto“.
  2. Výsledky odevzdání nanečisto ukazují na chybu. Student chybu opraví, ale zatím neztrácí žádné body. Další odevzdání nanečisto již neukazuje na žádnou další chybu.
  3. Student odevzdává „naostro“ a spouští skript informující cvičícího.
  4. Cvičící nalezne rozšířenou sadou testů další chybu, vyplní studentovi do poznámkového bloku snížení získatelných bodů a pošle studentovi popis nalezené chyby.
  5. Student chybu opraví a znovu odevzdává „naostro“ (předtím může využít pro kontrolu opět odevzdání nanečisto).
  6. Cvičící nenalezne další chybu a zapisuje studentovi do poznámkového bloku záznam se získanými body.

Zápočet

Na základě absolvování cvičení dostává student od svého vyučujícího zápočet. Podmínkou pro bezproblémové získání zápočtu je splnění následujících kritérií:

  1. Maximálně 2 absence ve cvičení (více pouze na základě lékařského potvrzení atp; toto potvrzení musí být v požadovaném termínu odevzdáno na studijní oddělení FI).
  2. Celkové bodové skóre z domácích úkolů, průběžného testu a testíků na cvičení ne horší než 65 bodů. Toto skóre ovlivňuje i známku ze zkoušky. Nové! Do tohoto limitu se nezapočítávají tzv. měkké body z bonusů a za aktivitu na cvičení.
  3. Nové! Alespoň čtyři domácí úkoly s nenulovým hodnocením (tj. jakékoli hodnocení, které není přesně 0).
  4. Uspěšné vypracování praktického zápočtového příkladu v rámci zápočtového týdne přímo na hodině v navštěvované seminární skupině.
  • Jestliže student uvedené požadavky nesplní - zejména, pokud byl uvedený limit téměř dosažen - může mu vyučující umožnit získání zápočtu po splnění dodatečných požadavků (například vypracování dalšího příkladu, dodatečné vypracování nepovinného příkladu nebo přepracování některého odevzdaného a odsouhlaseného příkladu znovu jiným způsobem).
  • Práci studenta ve cvičení kontroluje a zápočty uděluje výhradně vyučující jeho seminární skupiny. Proti jeho rozhodnutí se lze odvolat k přednášejícímu.
  • Zápočet se de facto dává i studentům, kteří předmět končí zkouškou; v tomto případě se však nezapisuje běžným způsobem do IS, ale pouze se provede zápis do poznámkového bloku.

Bodové rozložení předmětu

Tento semestr je zavedeno následující bodování předmětu. Tabulka představuje přehled bodového rozložení:

Způsob získání bodů Celkový počet bodů
Domácí úkoly 6*12 = 72
Extra body za bonusy v domácích úkolech 10+ (měkké body)
Extra body za aktivitu na hodině 10+ (měkké body)
Další extra body za aktivitu, nalezení chyby v zadaní, etc… neomezeno
- -
Zápočtový příklad není bodován (hodnocení ANO/NE)
Průběžný test 20
Krátké testíky na cvičení 10 * 3
- -
Závěrečný zkouškový test 80

Zápočet je udělen za zisk alespoň 65 (tvrdých) bodů (součet Domácí úkoly + Průběžný test + testíky na cvičení + bonusy), minimálně čtyři domácí úkoly s nenulovým hodnocením a úspěšné vypracování zápočtového příkladu na hodině.

Počet získaných bodů Hodnocení
>= 170 bodů A
>= 150 bodů B
>= 130 bodů C
>= 110 bodů D
>= 95 bodů E
< 95 bodů F
>= 65 bodů Započteno

Pozn. V případě, že student, který končí předmět zkouškou, nedosáhne 95 tvrdých bodů, je hodnocen stupněm F nezávisle na počtu měkkých bodů.

Příklad: Student A má 100 bodů, z toho 10 měkkých. Je hodnocen stupněm F (nesplnil podmínku 95 tvrdých bodů). Student B má 120 bodů, z toho 20 měkkých. Je hodnocen stupněm D (splnil podmínku 95 tvrdých bodů, a proto se do jeho hodnocení počítají všechny body).

QR Code
QR Code public:pb161 (generated for current page)