Poznámky k úvodu do programování
Cvičení k předmětu NMIN101 Programování I

Martin Holub


Preambule

Tato stránka slouží studentům MFF UK v Praze pro komunikaci veškerých oznámení nebo informací (včetně doporučení, požadavků, návodů, tipů apod.) souvisejících se cvičením k předmětům Programování I a Programování II.

 

1. Kontaktní informace

Kontakt na vyučujícího
Základním a defaultním způsobem komunikace je email. Pokud nemám dovolenou, čtu email každý pracovní den. Jestliže se chcete setkat osobně (zpravidla na Malostranském náměstí), měli byste se předem dohodnout emailem. Telefonní linku můžete použít pro řešení urgentních záležitostí, obecně však nemohu zaručit svou permanentní přítomnost na telefonu (je lepší se domluvit předem emailem).

  • Email: holub@ufal.mff.cuni.cz
  • Telefon do kanceláře: 221 914 365
  • Kancelář: Malostranské náměstí 25, 4. patro, č. 424

Plánovaná dovolená

  • 14.1. až 18.1. 2019

Konsultační hodiny
V průběhu semestru poskytuji konsultace po individuální dohodě. Ohlaste se předem emailem a navrhněte 2–3 termíny, kdy se vám to hodí. V období zvýšeného zájmu o konsultace obvykle vypisuji pravidelné konsultační hodiny 1–2 krát týdně.

 

2. Doporučená literatura

Pro úvod do programování doporučuji následující literaturu (seřazeno dle obtížnosti):

  • Pavel Topfer: Základy programování v úlohách.
    Velmi jednoduché úložky, často i s vzorovým řešením.
  • Pavel Satrapa: Pascal pro zelenáče.
    Výborná učebnice pro úplné začátečníky. Mnoho příkladů.
  • Pavel Topfer: Sbírka úloh z programování.
    Převážně pouze zadání úloh vhodných k procvičení. Neobsahuje řešení. Pro některé úlohy je však uvedena nápověda.
  • Pavel Topfer: Algoritmy a programovací techniky.
    Trošičku pokročilejší než předchozí knihy. Důraz na algoritmy, nikoliv na jazyk. Vhodné zejména pro druhý semestr.
  • Texty vystavené na stránkách přednášejícího Pavla Topfera.
    Zejména Rekurze a pro druhý semestr pak Dynamické datové struktury.

Všechny uvedené knižní publikace jsou v omezeném množství kopií dostupné v knihovně MFF na Malostranském náměstí.

 

3. Požadavky na zápočet

Při rozhodování o udělení zápočtu přihlížím k následujícímu:

  • Docházka na cvičení z programování a aktivita na hodinách.
  • Domácí úkoly odevzdané do Codexu. Úkoly by měly být řádně odladěny a odevzdány v požadovaném termínu. Pokud termín nestihnete, můžete úkol odevzdat i po termínu. Namátkově kontroluji také kvalitu vašeho kódu. Plagiarismus netoleruji; pokud jej odhalím, znamená to vaši diskvalifikaci.
  • Písemný test na hodině. Pro udělení zápočtu stačí, pokud uspějete v jednom z předem oznámených termínů.
  • Kvalita zápočtového projektu. Kvalitně musí být zpracován nejen samotný program, ale také náležitá dokumetace. Student svou práci obhajuje v osobním rozhovoru s vyučujícím.
  • Praktický test složený u přednášejícího. Tato podmínka pro udělení zápočtu je nutná absolutně.

Uvedené požadavky jsou nakonec posuzovány jako celek. Pokud je tedy student slabší v některém z bodů, může to dohnat zvýšeným úsilím v jiném ohledu. V případě mých pochybností o vašich schopnostech je obvyklé individuální přezkoušení.

 

4. Termíny

  • Zadání zápočtových projektů je třeba si dohodnout do konce semestru. Za tímto účelem je nutná krátká osobní konsultace. Specifikaci zadání musí každopádně schválit vyučující. Student je povinen specifikaci svého zadání písemně zpracovat ve formě krátkého dokumentu a předložit jej vyučujícímu emailem. 
    • Téma by si měl každý student vybrat a rezervovat již před vánocemi! Viz vysvětlení a nabídka níže.
       
  • Termín pro odevzdání zápočtového projektu – bude upřesněn; každopádně to však bude až po skončení zkouškového období.
     

 

5. Zápočtové projekty v ZS 2018/19

Témata zápočtových projektů
Nabízená témata berte jako orientační náměty pro svou práci. Konkrétní přesné zadání bude určeno vždy individuálně. V prvním kroku si student volí některé z uvedených témat, nebo (v zimním semestru výjimečně) navrhuje nějaké téma vlastní. Pokud vyučující téma schválí, student vypracuje návrh specifikace zadání svého zápočtového úkolu a domluví si osobní konsultaci s vyučujícím. Zpravidla je specifikace zadání upravena, doplněna nebo upřesněna. Jakmile je konkrétní zadání schváleno, student pracuje na svém programu a na doprovodné dokumentaci. Svou práci nakonec obhajuje jako celek. Obhajoba probíhá formou rozhovoru s vyučujícím; před tím student musí svou práci odevzdat emailem (posílejte zásadně jeden zip balíček obsahující text programu, dokumentaci v pdf formátu a testovací data, v případě potřeby další přílohy).

Konkrétní nabízená témata pro ZS 2018/19 zveřejním v prosinci. Své preference můžete komunikovat buď osobně nebo emailem. Zadání zápočtového projektu však individuálně určuje vyučující (zpravidla na základě dohody se studentem). 

Konkrétní nabízená témata můžete vidět zde. Zadání zápočtového projektu však individuálně určuje vyučující. Své preference můžete komunikovat buď osobně nebo emailem.

 

6. Hinty

 

7. Úlohy k procvičení ducha a programovacích dovedností

  • Kolikrát je třeba hodit kostkou, aby padla všechna čísla 1 až 6?
    Opakovaně házíme perfektní hrací kostkou a pokaždé, když padne nějaké číslo, které dosud nepadlo, zapíšeme jej na seznam. Činnost ukončíme, jakmile seznam obsahuje všech 6 čísel. Otázka zní, kolik hodů (průměrně) provedeme během uvedeného postupu? Z matematického hlediska jde o střední hodnotu počtu provedených hodů.
  • Obr v lese – zadání úlohy zde.
  • Pravděpodobnost neklesající posloupnosti
    Hodíme perfektní hrací kostkou k-krát. Jaká je pravděpodobnost, že posloupnost čísel, která padnou, bude neklesající?
  • Maximalizace nahodilé matice pomocí operace S-MAX – zadání
  • Chromý střelec na šachovnici se zakázanými políčky
    Na šachovnici s danými (obecně obdélníkovými) rozměry je dáno startovní a cílové políčko. Existuje posloupnost tahů střelcem vedoucí ze startovního do cílového? Zakázaná políčka nelze ani navštěvovat, ani přeskakovat. -- Programujte nejjednodušším způsobem, tj. rekurzí. Ukázkový výstup zde.
        Použijte připravený kód strelec.zip a doprogramujte rekurzivní proceduru.