Warning
This page is located in archive.

Implementační zkouška

Implementační zkouška se skládá z imlementace jednoduchého výpočetního problému s využitím dodaných knihoven demonstrující použití např. grafického výstupu nebo uložení obrázku. Implementační zkouška je realizována v počítačových učebnách s využitím konfigurace OS vycházející z prostředí používaného během semestru. Počítače jsou připojeny k počítačové síti, ale přístup na Internet není povolen. Proto je nutné registrovat (zapsat) se na implementační zkoušku, aby bylo možnév předstihnu vytvořit příslušný uživatelský učet (domovské adresáře jsou nově vytvořeny). V domovské složce jsou importovány potřebné soubory pro implementační zkoušky. Také to znamená, že je nutné spolehnout se pouze na vlastní znalost Cčka, případné použití knihovních funkcí lze najít v manuálových stránkách, např. man fopen. Případné nepříliš používané knihovní funkce bude oznameny buď na zadání nebo během implementační zkoušky.

Úloha na implementační zkoušce je zpravidla koncipována na méně než 180 minut. V ojedinělých případech je možné čas na vypracování prodloužit, ale zpravidla ne více než o 1,5 hodiny.

Typickými úlohami implementační zkoušky je řešení nějakého výpočetního problému, který lze vizualizovat formou výpočetního gridu zpravidla reprezentovaného jako souvislý blok paměti, který lze přímo zobrazit nebo uložit jako obrázek. Funkce pro zobrazení a uložení jsou součástí výchozích zdrojových kódů importovaných do domovských adresářů.

Výchozí soubory, kompilace a linkování s využitím knihovny třetí stran

Domovský adresáře pro implementační zkoušku obsahuje základní nastavení pro editor gedit (v ~/bin/gedit/setup.sh) a vim (viz ~/.vimrc). Dále obsahuje výchozí zdrojové soubory s ukázkou uložení obrázku ve formátu ppm. Součástí výchozích zdrojových souborů (v adresáři ~/prg-exam/demo-xwin) je také příklad zobrazení grafického okna a uložení obrázku v jiném formátu s využitím knihoven třetích stran. Příklad nastavení parametrů kompilátoru je uveden v přiloženém Makefile a kromě využití knihoven instalovaných v systému je také využito lokalně instalované knihovny v domovském adresáři. Využití přiloženého Makefile, podobně jako ostatních výchozích zdrojových souborů není vyžadováno, je to však velmi výhodné.

Pro využití knihovních funkcí je nutné při linkování sdělit jakou knihovnu program vyžaduje argumentem -l, např. -ljpeg. V případě umístění knihovny v nestandardní (nevýchozí) cestě, je nutné také kompilátor (linker) informovat, kde má soubory knihovny hledat. V případě linkování k tomu slouží argumentem -L a v případě kompilace se umístění hlavičkových souborů specifikuje argumentem -I, např.

clang -I$(HOME)/include -c demo.c -o demo.o
clang -L$(HOME)/lib demo.o -ljpeg -o demo

Ukázka možných výchozích souborů v domovském adresáři je dostupná v prg-exam.zip, pro který je vřele doporučeno seznámit se zejména s použitím kompilátoru a nastavení cest ke knihovnám třetích stran. V případě Linuxu, je zpravidla pro knihovny nutné nainstalovat tzv. dev (development) verzi. Z hlediska vyzkoušení si použití knihoven třetích stran je doporučeno zkompilovat si např. jpeg knihovnu do domovského adresáře.

Hodnocení implementační zkoušky

Hlavním cílem implementační zkoušky je ověření schopnosti samostatně napsat krátký funkční program a porozumět (a použít) cizí kód. Jelikož v jazyce C zpravidla každý program závislý na nějaké knihovně, je součástí implementační zkoušky také praktická znalost kompilace programu s využitím knihoven třetích stran.

Není nutné si pamatovat konkrétní nastavení či použití konkrétní knihovny, je plně postačující orientovat se ve způsobu překladu a linkkování programu a být schopen využít dodaných příkladů.

Základní hodnocení výsledného programu se skládá ze tří částí

Podmínky nutné

Program musí jít zkompilovat a spustit v základním nastavení (bez argumentů či s výchozími základní vstupními argumenty) a korektně ukončí svou činnost nebo nahlásí chybu (např. neexistující vstupní soubor) aniž by byl ukončen operačním systémem (např. z důvodu chybného přístupu do paměti).

Získání minimálního počtu bodů

  • Program zpracovává vstupní argumenty - resp. z kódu je zřejmě, že autor je schopen napsat kód zpracování vstupních argumentů a korektně ošetřit případné chyby.
  • Program načte vstup a vytvoří základní výstup (tj. soubor v korektním formátu jako je například obrázek).
  • Zdrojový kód je přehledný, čitelný a čtivý - je využito například nějaké kódovací konvence. Jedno z možných nastavení editoru bude k dispozici v domovském adresáři, např. s využitím nástroje clang-format

clang-format50 -style "{BasedOnStyle: llvm, IndentWidth: 3, BreakBeforeBraces: Linux}"
jehož použití pro editor gedit bude/je uvedeno v dodaných souborech.

  • Program využívá požadované knihovny třetí strany, jejíž použití a kompilace je uvedena v dodaném příkladu, např. ukládá obrázek ve formátu jpeg.

Získání dalších bodů

  • Program je vhodně členěn do funkcí, případně dekomponován na dílčí moduly.
  • Program generuje požadované výstupy, např. další body za barevný obrázek, další výpočet nebo animaci na obrazovce (dle dodaného příkladu).
  • Program vykazuje známky zvládnutí programovacího stylu, např. kromě formátování též volbou vhodných (ideálně v angličtině) jmen proměnných a funkcí.

Hodnocení implementancí

  • Nejde zkompilovat 0b
  • Nejde zkompilovat výchozím makefile (-pedantic -Wall -Werror) až -5b
  • Formátování až -2b
  • Rozdělení do funkcí až -3b
  • Rozdělení do modulů až -1b
  • Padá po spuštění bez argumentů až -2b
  • Neřeší výpočet (zpracování vstupního souboru) až -5b
  • Drobná chybka ve výstupu až -2b
  • Neukládá do jpeg (ikdyž se tak třeba tváří) až -2b
  • Neřeší ppm vs jpg až -2b
  • Nemá animaci až -2b
courses/b3b36prg/resources/exam.txt · Last modified: 2018/05/16 07:57 by faiglj