IB015 Neimperativní programování (podzim 2018)
Organizace předmětu
Přednášky
- V podzimním semestru 2018 se přednášky konají v úterý 12:00 – 13:50 v D1.
- Účast na přednáškách není povinná (avšak je silně doporučovaná, na cvičeních se nesetkáte se vším).
Hodnocení a povinnosti během semestru
Pro úspěšné absolvování předmětu je potřeba splnit následující podmínky:- Získat alespoň 4 body z domácích úloh v Haskellu a zároveň alespoň 2 body z domácích úloh v Prologu.
- Celkem je možné nasbírat 10 bodů za domácí úlohy v Haskellu a 5 bodů za úlohy v Prologu.
- Domácí úlohy jsou zveřejňovány každý týden. Studenti si musí sami hlídat termíny odevzdání jednotlivých úkolů.
- Úspěšně absolvovat zápočtovou písemku na konci semestru.
- Zápočtová písemka se skládá z 5 příkladů testujících nutné minimum znalostí, které musí získat úspěšný absolvent předmětu. Například: Naprogramujte tuto rekurzivní funkci na seznamech (Haskell), otypujte tento výraz (Haskell), vyhodnoťte tento výpočet (Haskell), napište jednoduchý predikát pracující se seznamy (Prolog), nakreslete výpočet tohoto dotazu (Prolog), …
- Pro úspěšné absolvování zápočtové písemky je potřebné získat 4,5 z 5 bodů, tj. toleruje se nejvýše jedna nezávažná chyba.
- Termín zápočtové písemky je poslední týden semestru. Neúspěšní studenti mají jednu možnost opravy začátkem ledna. Student, který ani v opravném termínu nevypracuje zápočtovou písemku na dostatečný počet bodů, získá známku X.
- Získat minimálně 10 bodů v součtu za závěrečnou zkoušku a domácí úlohy.
- Závěrečná zkouška testuje schopnost vytvořit netriviální program v Haskellu a Prologu.
- Závěrečná zkouška je písemná na papír.
- Závěrečná zkouška je bodována v rozsahu 0-50 bodů.
- Body získané za závěrečnou zkoušku a domácí úlohy se sečtou a podle počtu získaných bodů bude uděleno následující hodnocení:
- E za [10,20) bodů
- D za [20,30) bodů
- C za [30,40) bodů
- B za [40,50) bodů
- A za [50,65] bodů
- Je tedy zřejmé, že studenti, jež splní podmínky 1 a 2 a zároveň získají alespoň 10 bodů z domácích úloh, mohou být úspěšně hodnoceni stupněm E bez nutnosti účastnit se závěrečné zkoušky.
Cvičení
- Cvičení nejsou povinná, jsou však silně doporučená – naším cílem je, abyste si mohli procvičit látku bez toho, abyste se vším museli prokousat sami.
- Noste si na cvičení i pero a papír – některé úlohy se výrazně lépe řeší bez počítače, bude se vám hodit i pro kreslení stromů a pod.
- Prosíme vás, abyste chodili primárně na cvičení, která máte zapsaná. Nahradit si občas cvičení jinde samozřejmě není problém, dejte to však dotyčnému cvičícímu dopředu vědět (ideálně emailem).
- Všechna cvičení jsou rozvrhována do učeben s počítači a vlastní notebook se nepředpokládá. Jestli chcete používat počítač vlastní, klidně můžete, nachystejte si však na něm ještě před prvním cvičením (!) vše potřebné (viz další sekci).
- Nemáte-li zájem navštěvovat cvičení, přihlaste se do skupiny 09, abyste nezabírali jiným studentům místo ve standardních skupinách. Skupina 09 se nerozvrhuje, studenti v této skupině se neúčastní žádných cvičení. Ke konzultacím s vyučujícími lze využít diskusní fórum.
Používaný software
Všechny používané nástroje jsou již nainstalovány v učebně. Jestli chcete na cvičení používat vlastní notebook, zprovozněte si prosím níže uvedené nástroje ještě před prvním cvičením.Případné problémy s instalací můžete psát do diskusního fóra (na cvičení na řešení problémů s instalací nebude žádný čas).
Haskell
Standardem pro tento semestr je překladač Glasgow Haskell Compiler (GHC) verze 8.0 nebo vyšší (doporučujeme instalovat nejnovější).- Linux: Pokud je
ghc
verze nejméně 7.10 k dispozici v repozitářích vaší distribuce, instalujte přímo z repozitáře. - Windows, Mac OS X: Stáhněte GHC ze stránek výrobce.
module add ghc
. Modul je nutné přidávat při každém přihlášení, příp. zanést do vašeho .bashrc. Prolog
Nástroje pro jazyk Prolog budou potřeba až v druhé polovině semestruStandardem pro jazyk prolog bude překladač SWI Prolog verze 7.0 nebo vyšší (doporučujeme instalovat nejnovější, ale jestli máte v repozitáři své distribuce alespoň 7.0, klidně nainstalujte verzi z repozitáře).
- Linux: Pokud je
swipl
k dispozici v repozitářích vaší distribuce, instalujte přímo z repozitáře. - Windows, Mac OS X: Stáhněte SWI Prolog ze stránek výrobce.
Domácí úlohy
- Každý týden bude zadán domácí úkol, za který bude možné získat 1-2 body.
- Domácí úkoly vypracovávejte samostatně. Spolupráce vícero lidí je zakázána. Viz disciplinární řád FI MU.
- Pokud přebíráte v řešení kód z jiného zdroje (internetový tutoriál, fórum, kniha, …), nezapomeňte příslušnou část kódu označit a uvést zdroj (vydáváte-li ji za svou vlastní práci, dopouštíte se plagiátorství a tím se vystavujete riziku disciplinárního stíhání).
- Většinou budou úlohy realizované formou odpovědníku, třikrát v průběhu semestru bude zadána větší úloha k odevzdání přes odpovědník nebo odevzdávárnu. V obou případech bude odkazován z interaktivní osnovy.
- Ve všech případech bude úloha/odpovědník dostupný hned v úterý po přednášce a čas na vypracování bude do středy následujícího týdne (tj. 9 dní).
- Při vypracovávání domácích úkolů můžete používat interpret jazyka Haskell/Prolog.
- Odpovědníky je možné zodpovědět pouze jednou (není-li u konkrétního úkolu uvedeno jinak), s časovým limitem 2 hodiny, a prohlídka odpovědníků je možná až po ukončení období pro odevzdávání. Spadne-li vám připojení v průběhu odpovídání, odpovědník je možné otevírat znovu, dokud neuplynou 2 hodiny od prvního otevření.
- Odpovědníky budou mít více podúloh, každá bude hodnocena samostatně desetinami bodu.
Úlohy typu "naprogramujte funkci"
- Součástí odpovědníků budou i úlohy typu naprogramujte funkci, v těchto případech se jedná o úlohy automaticky opravované na shodné chování se vzorovým řešením.
- Textové pole v ISu podporuje syntaktickou kontrolu (vyžaduje JavaScript), pod odpovídacím polem byste měli vidět tlačítko pro kontrolu syntaxe. Kontrola syntaxe kontaktuje externí server, a tedy může mít zpoždění v řádu sekund. I přes kontrolu syntaxe je však silně doporučeno řešení vyzkoušet v interpretru, testy běží až po odevzdání.
- Pokud není v otázce řečeno jinak, můžete si definovat libovolně mnoho pomocných funkcí. Není-li uvedeno jinak, předpokládejte načtenou standardní knihovnu, vyhněte se proto jménům funkcí, která by vytvářela kolize (v případě pochybností si to odzkoušejte v interpretru, nebo kontrolou syntaxe).
- V případě špatné odpovědi se v prohlídce odpovědníku dozvíte, co bylo špatně (nešlo zkompilovat, typová chyba, liší se výstup, …). Pokud se jedná o výstup rozdílný od vzorového řešení, naleznete ve výstupu nejprve několik řádků s konkrétními vstupy a na posledním řádku pak konkrétní (lišící se) výstupy. Někdy však netestujeme přímo vaši funkci, ale používáme pomocnou funkci, proto výstupy nemusí úplně sedět; budeme se však snažit zachovat čitelnost.
- Mějte, prosím, trpělivost s ISem, vyhodnocování úloh není okamžité (řádově sekundy na úlohu) a pokud se sejde více úloh v jeden okamžik, tak se úlohy vyhodnocují postupně.
- Vyhodnocování úloh je časově omezené. Limity by měly být nastaveny tak aby nevyžadovaly optimální řešení, ale snažte se aby vaše řešení nebylo příliš neoptimální. Například pokud jde úlohu vyřešit snadno v lineárním čase a vaše řešení bude v exponenciálním čase a kvůli tomu neprojde přes timeout, nemusíte dostat body.
- Pokud narazíte na nějaký problém s touto službou – například když u odpovědi máte, že server neodpovídá, nebo si myslíte, že jsme neuznali správné řešení (které vám v interpretru funguje!), napište do diskusního fóra nebo kontaktujte správce externí služby, kterým je Vladimír Štill.