Toto je starší verze dokumentu!


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

Opravy po začátku semestru jsou zde uvedeny a v textu podtrženy (pokud je to možné):

  • 28.9.2014 Odevzdávání úloh dle C++11 - soubor cpp11 v repozitáři úlohy

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).
  • Konzultační hodiny přednášejícího:
  • Konzultační hodiny studentských poradců:

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

Verze platná pro podzimní semestr 2014 (10.9.2014)

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 ve třetině 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ý 5 min testík z látky probírané na přednášce (celkem 10x).
  • 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ě.
  • 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.
  • 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í).
  • Pokud se rozhodnete absolvovat cvičení formou párového programování (dva studenti společně vypracovávají domácí úkoly), obržíte za každý úkol 75 % ze získaných bodů a vypracováváte povinně šestý (jinak nepovinný) domácí úkol (více viz. párové programování).

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

Průběh cvičení - párové programování

  • Během prvních dvou týdnů se můžete rozhodnout pro absolvování předmětu formou párového programování (dva studenti u jednoho počítače)
  • Párové programování není povinné, můžete cvičení absolvovat samostatně
  • Pokud jste nikdy o párovém programování neslyšeli, přečtěte si tento článek: http://www2.yk.psu.edu/~sg3/cmpbd205/assign/week01/ACMarticlePairProgramming.pdf
  • Párové programování vede obecně k lepšími a robustnějšímu kódu a je prakticky používána ve firmách (blíže na cvičení)
  • Rozhodnutí a rozdělení párů proběhne na základě spolupráce na prvním cvičení (budete mít možnost si potenciální partnery vyzkoušet)
  • Ustavené páry nelze (s výjimkou vážných situací) v průběhu semestru měnit
  • Studenti pracující v páru mají o něco méně práce a proto získávají za domácí úkoly pouze 75 % bodů, které by získal samostatně pracující student a vypracovávají jeden úkol navíc, díky kterému mají možnost získat zbylých 25 % bodů.
  • Oba studenti v páru získávají za domácí úkolu stejný počet bodů (ostatní bodování je nadále individuální). Zápočtový příklad a zkoušku absolvují již samostatně.
  • Domácí úkol odevzdává vždy jen jeden z dvojice. Po vyhodnocení jsou body zapsány oběma.

Domácí úkoly

  • Během semestru bude zadáno 5 domácích úkolů + 1 bonusový.
  • Od 2. týdne studenti samostatně vytvářejí zadané programy (domácí úkoly). Program se obvykle nepodaří beze zbytku dokončit během cvičení; je proto nutno program odevzdat do data uvedeného na začátku zadání domácího úkolu (položka 'Absolutní konec odevzdávání:').
  • 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 se píší zásadně v jazyce ISO/IEC ISO/IEC 9899:1999 (C99) 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 jazyku C/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]
  • Výjimečný bonus za velmi vtipné, originální, zvlášť efektivní nebo formou zpracování vzorné řešení [max. 2 body za příklad]

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. Oprava se mu vyplatí, protože odevzdaním napodruhé ztrácí pouze jeden bod. Získává 9 + (3 - 1) + 2 = 13 bodů (z 14 maximálně možných). I kdyby bonus neopravil, tak získává 11 bodů, korektnost bonusu se do korektnosti celého příkladu nepočítá).

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.

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.
  • 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!
  • Odpadne-li cvičení (např. pro státem uznaný svátek), studenti zpracují příklad na ně plánovaný samostatně v termínu, jako kdyby cvičení neodpadlo. Příklady, které měly být do dne odpadlého cvičení odevzdány, je třeba odevzdat nejpozději následující pracovní den.

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 až 10 trestnými body resp. projednáním u disciplinární komise, program bude považován za chybný a vrácen k novému naprogramování. 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!

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ů.

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++ -ansi -pedantic -Wall -Werror.
    • 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.
  • Pokud chcete odevzdat úlohu vyžadující kompilaci dle C++11, tak do adresáře s odevzdanou úlohou v repozitáři vložte i (klidně prázný) soubor se jménem cpp11 (bez přípony).

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.
  3. 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ů
Povinné domácí úkoly 5*12 = 60
Extra body za rozšířené varianty zadání 10+
Extra body za aktivitu na hodině 10+
Další extra body za aktivitu, nalezení chyby v zadaní, etc… neomezeno
- -
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 bodů (součet Domácí úkoly + Průběžný test + testíky na cvičení + bonusy) a úspěšného 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
QR Code
QR Code public:pb161 (generated for current page)