PB071: Programování v jazyce C - Jaro 2012

Opravy po začátku semestru jsou zde uvedeny a v textu podtrženy (pokud je to možné), pokud jde o změnu informací pro zakončení předmětu:

  • zatím nic

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í 14-14: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)
    • Probíhá od druhého týdne semestru
    • Úterý 12:00 - 13:00, Vladimír Štill
    • Úterý 13:00 - 14:00, David Klaška
    • Středa 16:00 - 17:00, Juraj Kolčák
    • Čtvrtek 11:00 - 12:00, Jiří Weiser

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 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 PB071

Verze platná pro jarní semestr 2012 (18.2.2012)

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 (celkem 10x).
  • 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 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í).

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, v dalších pak překladem s využitím prostředí QT Creator, 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 2.4.1 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ů + 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 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í.
  • 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ů.
  • 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ář PB071 s podadresáři hw01, hw02,…,hw05
  • Spojte adresář PB071 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 pb071 hw0X nanecisto (např. '/home/xtoth1/kontrPublic/odevzdavam pb071 hw01 nanecisto')
      • Za cca 15 minut obdržíte na fakultní email (email ve tvaru login@fi.muni.cz) 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č gcc -std=c99 -pedantic -Wall -Wextra -Werror.
    • Odevzdání naostro - spuštění skriptu:
      • Nahrajte odevzdávané soubory do vašeho repozitáře
      • Spusťte skript /home/xtoth1/kontrPublic/odevzdavam pb071 hw0X naostro (např. '/home/xtoth1/kontrPublic/odevzdavam pb071 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) 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í 3 týdenního intervalu 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ž 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: