PB161: Programování v jazyce C++

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

  • 3.10.2011 přidána informace o NEmazání SVN repozitářů a související penalizace

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:
    • Pondělí 13-13:50, místnost B420, Petr Švenda
  • Konzultační hodiny studentských poradců:
    • v hlavní místnosti počítačové haly, v části vyhrazené pro notebooky, u sloupu (2. řada stolů nalevo od vstupu, nebo někde poblíž, je-li plno)
    • Úterý 17:00 - 18:00, Tomáš Brukner
    • Středa 15:50 - 16:50, Petr Pilař
    • Čtvrtek 13:00 - 14:00, Lukáš Ručka

Informace ke srovnávacímu testu

  • Složení testu je podmínka pro získání souhlasu, pokud nemáte absolvován předmět PB071
  • Pokud již máte předmět zapsán (nikoli pouze registrován), tento test se vás netýká
  • Poslední možný termín srovnávacího testu bude ve čtvrtek 29.9. v 14 hod v místnosti B130
  • Dostavte se 10 minut před začátkem a přineste si vhodný identifikační průkaz
  • Test se píše na počítači a obsahuje 3 části: teoretické otázky, schopnost porozumnět existujícímu kódu a vytvoření vlastního jednoduchého kódu (např. napište funkci, která alokuje dynamické pole a na pozici x uloží faktoriál z čísla x. Pole je vhodným způsobem vráceno z funkce)
  • Připravte si funkční heslo na počítač aisa (login a heslo - často sekundární heslo na IS). POZOR, liší se od vašeho přihlašovacího účtu na IS.
  • Zažádejte si v ISu o výjimku, jinak vám nemohu po úspěšném absolvování testu souhlas udělit

Nástroje a jejich manuály

TBD: Základ použití IDE Code::Blocks

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

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

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

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

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

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

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

Pravidla pro cvičení z PB161

Verze platná pro podzimní semestr 2011 (19.9.2011)

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.
  • Po 6. týdnu 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.
  • Zápočet je udělen za docházku a souhrnný zisk alespoň 55 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ň 90 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 Code::Blocks s C/C++ rozšířením. Student může využívat jiné IDE (např. QT Creator, 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í).

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

Domácí úkoly

  • Během semestru bude zadáno 5 domácích úkolů.
  • 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 2 týdnů od zadání s jednou dodatečnou opravou v dalším týdnu (přesné datum uvedeno u zadání příkladu). Poslední takový program bude zadán v tom týdnu, který s ohledem na termín umožní odevzdání v posledním (zápočtovém) týdnu.
  • 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 … 6 bodů] (počítá se dosažené maximum ze všech pokusů)
  • Bonus za kompletně funkční program po konci odevzdávání [0 … 6 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á 6 bodů. Za každou opravu cvičícím s nalezenou chybou jsou z tohoto bonus strženy 2 body. 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á 6 + 6 = 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á 6 + (6 - 2) = 10 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ávací/opravné periody nestihne. Program tak není plně funkční (řekněme že nefunguje jeden ze tří testů). Získává (6 - 1×2) + 0 = 4 body.

Příklad 4: Student odevzdá program s chybou těsně před koncem 2 týdenní odevzdávací periody. Cvičící vyhodnotí a student má 1 týden na opravu. V programu ale stále zůstane 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á (6 - 2×2) + 0 = 2 body.

Příklad 5: Student odevzdá program s chybou těsně před koncem 2 týdenní odevzdávací periody. Cvičící vyhodnotí a student má 1 týden na opravu. Opravený program je plně funkční. Získává 6 + (6 - 2) = 10 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 nevyplatí, protože odevzdaním napodruhé stejně ztrácí 2 body. Získává 6 + 6 = 12 bodů (z 14 maximálně možných, korektnost bonusu se do korektnosti celého příkladu nepočítá).

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

Pravidla odevzdání

  • Počínaje 1. úkolem se domácí úkoly odevzdávají.
  • 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í.
  • 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ů.
  • 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!

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

  • 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:
      • Nakopírujte odevzdávané soubory do vašeho SVN repozitáře (viz. výš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 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.
    • 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.
    • Pokud je nalezen problém, student jej znovu odevzdává až ve chvíli, kdy je přes poznámkový blok zadáno vyhodnocení předchozího pokusu.
    • 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).
    • Odevzdávání úkolu je možné provádět pouze do 4 týdnů od jeho zadání (přesné datum je uvedeno u zadání úkolu). Poté je povoleno odevzdání pouze jediné opravy. Toto omezení může v kombinaci s týdnem na opravu cvičícím omezit maximální počet odevzdání opraveného úkolu. Např. pokud odevzdáte poprvé příklad těsně před vypršením 4 týdenního limitu, budete příklad moci opravovat pouze jednou.
    • 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í 4 týdenního intervalu a jedné případné opravy v pořádku, přidělí cvičící pouze část bodů odpovídající míře fungování aktuálního stavu programu.
    • Po 6 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 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ž 55 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 překročen jen málo - 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+
Další extra body za aktivitu, nalezení chyby v zadaní, etc… neomezeno
- -
Průběžný test 20
Krátké testíky na cvičení 10 * 2
- -
Závěrečný zkouškový test 80

Zápočet je udělen za zisk alespoň 55 bodů (součet Domácí úkoly + Průběžný test + testíky na cvičení + bonusy na cviceni) 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
>= 90 bodů E
< 90 bodů F
>= 55 bodů Započteno
Navigation
Languages
Překlady této stránky: