Cvičení z Programování II pro pokročilé
Jak se dostat na cvičení
Cvičení najdete v rozvrhu. Sami se na něj ale nemůžete přihlásit (má nulovou kapacitu). Nejdříve nás totiž musíte přesvědčit, že pokročilejší úlohy zvládnete.
Dělá se to následovně:
- V SISu si zapíšete přednášku a standardní cvičení svého kroužku. Pak se přehlásíte na naše cvičení. To má ovšem nulovou kapacitu, takže se zařadíte do čekací fronty.
- Pokud jste absolvovali pokročilé cvičení z Programování 1 a máte dostatek bodů na zápočet (zápočťák mít nemusíte), už jste nás přesvědčili a sami vás přesuneme z fronty na cvičení.
- Jinak se přihlásíte do Poštovní sovy
(přihlašovací token do kurzu je
779d37688a5d
). Tam najdete dvě teoretické úlohy. - Až z libovolné úlohy získáte plný počet bodů, všimneme si toho a přesuneme vás z fronty na cvičení.
- Kdyby nastal jakýkoliv zádrhel, napište nám e-mail na p2x@ucw.cz a pomůžeme vám.
Pokud si nejste jisti, že pokročilejší variantu zvládnete, můžete se zapsat na standardní cvičení a k nám chodit navíc.
Pravidla hry
Zápočet získáte za vypracování zápočtového programu a domácích úkolů za dostatečný počet bodů.
O domácích úkolech i zápočtovém programu si smíte povídat s ostatními, ale konkrétní implementaci napište sami. Není v pořádku opsat kus cizího kódu nebo řešení teoretické úlohy ani od spolužáka, ani z knížky, ani z náhodné webové stránky, ani z výstupu neuronky.
Domácí úkoly
Domácí úkoly jsou dvou druhů:
- Praktické – odladěné programy řešící jednoduché problémy. Odevzdávají se do ReCodExu, který je automaticky testuje. Úkoly je obvykle možné řešit za plný počet bodů po omezenou dobu (např. dva týdny) po zadání, pak se maximální počet bodů redukuje na polovinu.
- Teoretické – u těchto úloh obvykle jde o vymyšlení a popsání efektivního algoritmu. Odevzdávají se pomocí Poštovní sovy.
K získání zápočtu potřebujete alespoň 100 bodů za každý druh domácích úkolů. Úlohy každého druhu budou vypsané za alespoň 150 bodů.
Úkoly je možné odevzdávat opakovaně, započítává se maximum ze získaných bodů přes všechny pokusy.
Zápočtový program
- Téma: libovolné, jaké si vymyslíte, má-li odpovídající obtížnost. Pokud vás ještě múza nepolíbila, podívejte se na náš seznam témat. Přiměřené pro letní semestr jsou úlohy obtížnosti 5 a vyšší.
- Jazyk: libovolný přiměřený úloze, kterou řešíte. Ale na čemkoliv exotickém se prosím předem domluvte.
- Specifikace: Sepište krátký popis toho, co by program měl umět a v jakém jazyce by měl být napsán. Vyhnete se tak tomu, že by váš zápočtový program odevzdaný den před koncem zkouškového období byl odmítnut jako příliš triviální nebo příliš podobný programu někoho z vašich kolegů. Nutno odevzdat do Sovy do konce dubna.
- Repozitář: Velice doporučujeme používat při vývoji zápočťáku nějaký verzovací systém, například Git. Práci commitujte průběžně, budete mít nejen přehled o své práci, ale také zálohu :)
- Dokumentace: Nedílnou součástí zápočtového programu je dokumentace, a to jak uživatelská (vysvětující, jak se program ovládá), tak programátorská (ta popisuje, jak program uvnitř funguje; postrádá smysl popisovat každou funkci či proměnnou, zaměřte se spíš na celkový návrh programu a použité algoritmy, pokud jste je sami nevymysleli, uveďte odkazy na zdroje, z nichž jste čerpali). Dokumentace může být v jakémkoliv standardizovaném formátu (třeba čistý text, Markdown nebo PDF; MS Word rozumný není).
- Odevzdání: Zdrojový text i dokumentaci odevzdávejte do Sovy. Pokud používáte Git, stačí poslat odkaz na repozitář. Jinak buď přiložte archiv (ZIP/TAR), nebo odkaz, odkud si jde zápočťák stáhnout. V některých případech po vás budeme chtít, abyste nám zápočťák předvedli – například pokud běží pouze na OS nebo hardwaru, jímž nedisponujeme.
- Odolnost: Zápočtový program musí mít přiměřeně ošetřené vstupy. Tím se myslí, že komunikuje-li s uživatelem, měl by počítat s tím, že uživatel je nešika a občas zadá špatný vstup, a reagovat přiměřeně. Naopak pokud programujete knihovnu funkcí, můžete předpokládat korektní vstupy, byť vám usnadní ladění provádět aspoň základní kontroly.
- Samostatnost: V zápočťáku můžete využívat cizí knihovny. Stejně tak můžete naprogramovat nový modul do cizího programu. V každém případě by mělo být jasně vymezeno, co je vaše dílo a co už ne.