Cvičení z Programování I (PRG030)
skupina I31 a I32, pondělí 12:20 v S7/SW2
Zápočtové programy
Obecné informace
Zápočtová práce je povinná pro získání zápočtu. Zde se nachází potřebné informace týkající se jejího vypracování.
Téma zápočtové práce si vyberete (zaberete) zasláním specifikace zápočtového programu (viz specifikace).
Zápočtová práce by měla být přiměřeně obtížná (tzn. nemělo by to být vaše životní dílo, ale také by to neměl
být kousek kódu, který napíšete za víkend).
V případě jakýchkoli nejasností raději nejprve konzultujte problém se mnou (mailem nebo osobně).
Specifikace
Ve specifikaci popíšete, co vlastně budete dělat. Specifikace by měla být stručná (řádově pár vět) a pokud možno přesná.
Zkuste se více krotit při vymýšlení všech možných featur. Když naimplementujete něco navíc, je to bezva, když něco nestihnete, je to mrzuté.
Pro inspiraci se můžete podívat na specifikaci vzorové zápočtové práce.
Analýza (rozbor)
Po odeslání specifikace se zamyslete nad způsobem řešení zvolené úlohy a popište ji.
Výsledkem by měla být několik stránek dlouhá analýza problému, ve které popíšete zvolené algoritmy,
datové struktury, způsoby načítání dat atd. Tato analýza bude ve výsledku také součástí dokumentace.
Co by měla obsahovat?
- Formálnější specifikaci (jako úvod).
- Platformu, kompilátor (případně IDE), použité knihovny a další technické detaily ohledně implementace.
- Předběžný (hrubý) popis uživatelského rozhraní. Jestli bude grafické nebo
textové, jaké nabídne možnosti atp. Pokud potřebujete vstup ze souboru,
jaký (přibližně) bude mít formát.
- Přehled a popis nejdůležitějších algoritmů a datových struktur. Není nutné
popisovat, jak fungují nejzákladnější algoritmy a struktury (např.
třídění, pole, fifo, ...). Pokud chcete použít nějaké složitější věci a
zároveň nejsou esenciální ve vašem zápočťáku, můžete místo popisu uvést
odkaz na článek, webovou stránku (třeba do Wikipedie) apod.
- Odhad časové a paměťové složitosti vašich řešení.
- Nástin implementace - zda budete používat procedurální, objektový,
případně jiný způsob psaní kódu. Nástin dělení kódu do modulů a API mezi
nimi.
- Pokud máte nějaké dilema, které neumíte vyřešit v tuto chvíli, popište jej
také (včetně alternativ, mezi kterými se rozhodujete) a zmiňte důvod, proč
se nemůžete rozhodnout. Typický příklad - váháte mezi dvěma algoritmy,
které jsou asymptoticky stejně rychlé, ale reálně může být jeden
rychlejší. Rozhodnete se, až si oba napíšete a vyzkoušíte, který skutečně
rychlejší je.
Jak ji psát?
- Měl by to být plně strukturovaný dokument - dělení do logických celků,
nadpisy atd. V přpadě delších dokumentů neuškodí ani obsah nebo číslování
kapitol.
- Dokument tohoto typu by měl mít úvod a závěr. V úvodu seznamíte čtenáře
s tím, co vlastně budete dělat (zopakujete specifikaci v nějaké čtivé
formě), a naopak v závěru můžete uvést věci, které se jinam nehodily (vaše
ambice, nerozhodnuté problémy, které chcete nechat, aby se vyvrbily až
v implementaci...)
- Při psaní používejte krátké odstavce - co odstavec, to jedna myšlenka.
Vyvarujte se psaní viktoriánských románů a dlouhých odstavců (špatně se to čte).
Na druhou stranu pište celými větami a lidsky (ne heslovitě).
- Nebojte se pracovat s definicemi. Přesně si pojmenujte termíny, proměnné
a jiné věci, které používáte v popisu. Vyhněte se konstrukcím typu
"v druhém poli mám uložené hodnoty, co mi spočítala ta třetí funkce".
- Při popisu algoritmů používejte radeji odrážky (nebo číslování kroků), než
dlouhé odstavce. Většinou to lépe vypadá a lépe se to čte. Koneckonců
algoritmus je vlastně posloupnost kroků (odrážek).
- Pokud je to vhodné, používejte ukázky kódu. Když popisujete nějaký
aplikační interface, není na škodu uvést pár hlaviček funkcí, nebo
typových definic (pokud už máte jasno, jak budou vypadat). Stejně tak
pokud máte problém, který napíšete na pár řádků v (pseudo)pascalu, dejte
takovému zápisu přednost před několika nesrozumitelnými odstavci
souvislého textu.
- Vzorce sázejte jako vzorce. Důležité vzorce pojmenujte, nebo očíslujte,
abyste se na ně mohli snadno odkazovat. Delší matemtatické zápisy pište
samotné na řádek.
- Obrázky a příklady by měly být součástí dokumentu, ve kterém je analýza.
Tzn. analýza je jeden dokument, ne deset souborů v různých formátech.
Další poznámky:
- Psát je nutno tak, abych byl schopen to přečíst. Tzn. v češtině nebo
angličtině (jiné jazyky nejsou povoleny). Text může obsahovat maximálně
tolik pravopisných chyb, aby význam (a čtenáč) neutrpěl újmu.
- Používat smíte formáty: plain text, RTF, DOC, ODF, PDF, PS, HTML.
Silně doporučuji PDF.
Pro lepší představu se podívejte na analýzu vzorové zápočtové práce.
Implementace a odevzdávání
Při implementaci zápočtové práce dejte pozor, aby výsledný kód byl rozumně čitelný (tzn. dodržujte odsazení, pište komentáře atd.).
Součástí práce je také patřičná dokumentace, která je vlastně rozšířením a doladěním analýzy.
Při psaní dokumentace doporučuji nechat se alespoň trochu inspirovat stránkami pana
Kryla, ale není to podmínkou.
Hotovou práci je třeba opatřit sadou testovacích dat, na kterých ukážete všechny záludnosti vašeho programu
(samozřejmě pokud to pro danou úlohu má smysl - pro piškvorky data asi nevymyslíte).
Práci byste měli odevzdávat kompletní (tj. zdroják + dokumentace + testovací data) a zejména funkční.
Snažte se odevzdávat to nejlepší už na první pokus a ne stylem "zkusíme to, třeba to projde".
Časem zde bude zveřejněna vzorová zápočtová práce, abyste se mohli inspirovat.
Zabraná témata
$model = new UsersDataModel(19);
$works = $model->getWorks();
if ($works) {
?>
Jméno | Zadáno | Analýza | Dokončeno | Téma a popis práce |
foreach ($works as $work) {
echo "\n{$work->name} | \n";
echo "{$work->started} | \n";
echo "{$work->analyzed} | \n";
echo "{$work->finished} | \n";
echo "{$work->caption}\n{$work->text} | \n
\n";
}
?>
} else {
?>