IB015 Neimperativní programování (podzim 2017)

Organizace předmětu

Přednášky

  • V podzimním semestru 2017 jsou přednášky každé úterý od 12:00 do 13:40 v posluchárně 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í

Pro úspěšné absolvování předmětu je potřeba úspěšně udělat I. část zkoušky a mít alespoň 5 bodů z domácích úloh. Celkové hodnocení (známka) je určeno počtem bodů, které každý student získá během semestru za domácí úkoly, aktivitu na cvičeních a za II. část závěrečné zkoušky. Celkem je v předmětu možné získat 55 bodů:
  • Domácí úlohy: 0-15 bodů (jeden úkol každý týden: 9x odpovědník za 1 bod + 3x úkol za 2 body)
  • Aktivita/úkoly na cvičeních: 0-5 bodů (možnost získat skoro na každém cvičení, limit za semestr max. 5 bodů)
  • II. část závěrečné zkoušky: 0-35 bodů
Závěrečná zkouška se skládá ze dvou částí (ukázku konkrétního zadání uvidíte během semestru):
  • Část I (nutné minimum): Skládá se z několika otázek, které musíte vypracovat správně, abyste prošli předmětem. 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), ...
  • Část II (hlubší znalosti): Několik otázek z průběhu celého semestru.

Známkování

Nutné podmínky úspěšného ukončení:
  • úspěšně složit I. část zkoušky
  • body z domácích úloh ≥ 5
Výsledné hodnocení dle získaných bodů (N = domácí úlohy + II. část zkoušky + body za aktivitu na cvičeních):
  • A: 45 ≤ N
  • B: 35 ≤ N < 45
  • C: 25 ≤ N < 35
  • D: 15 ≤ N < 25
  • E: 0 ≤ N < 15
  • F: jestliže nesplnil podmínky úspěšného ukončení

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).
  • Na cvičeních je možné získat bonusové body za aktivitu, o jejich rozdělování rozhoduje cvičící a jejich počet je omezen (viz část o hodnocení předmětu).
  • 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).

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í nemusí být čas).

Haskell

Standardem pro tento semestr je překladač Glasgow Haskell Compiler (GHC) verze 7.10.3 nebo vyšší (doporučujeme instalovat nejnovější).
  • Linux: Pokud je ghc 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.

Prolog

Nástroje pro jazyk Prolog budou potřeba až v druhé polovině semestru
Standardem pro jazyk prolog bude překladač SWI Prolog verze 7.0 nebo vyšší (doporučujeme instalovat nejnovější, ale jestli máte v repozitáří 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. Maximální počet bodů získaných z domácích úkolů je omezen (viz část o hodnocení předmětu).
  • 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 čás kódu označit a uvést zdroj (vydáváte-li ji za svou vlastní práci, dopouštíte se plagiátorství).
  • Většinou budou úlohy realizované formou odpovědníku, třikrát v průběhu semestru bude větší úloha k odevzdání přes odpovědník nebo odevzdávárnu.
  • 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, 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í. 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í. Předpokládejte však 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 exponeniciá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.