Programování I

Datum následující přednášky prozatím nebylo stanoveno

Blíží se odevzdání úkolů #U23

Informace o předmětu

Během roku budou průběžně zadávány domácí úkoly, každý z nich ohodnocený nějakým počtem bodů. Za obě pololetí bude vypsáno tolik domácích úkolů, aby za ně celkem bylo možno získat alespoň 150 bodů.

Aby mohl být žák hodnocen, musí v obou pololetích získat za domácí úkoly alespoň 100 bodů. Každý žák navíc bude minimálně jednou v každém pololetí prezentovat své řešení domácího úkolu před třídou. Rozhodujícím faktorem při hodnocení žáka bude závěrečná zkouška skládající se z ústní a písemné části.

Obě části závěrečné zkoušky jsou hodnoceny zvlášť, písemná s váhou 7 a ústní s váhou 10. Prezentace jsou hodnoceny s váhou 5. Žáci mohou navíc dostávat známky za práci v hodině.

Podoba zkoušky

Zkouška se skládá z písemné a ústní části. Na začátku písemné části je zadána jedna úloha, na jejíž naprogramování studenti mají 90 minut. Ústní část se skládá z diskuze o studentově řešení písemné části a z několika otázek na teorii probranou v hodinách.

Co dělat, když něčemu nerozumím?

Co dělat, pokud máte pocit, že si tak docela nejste jistí tím, co děláte?

Především pamatujte na to, že programování je iterativní a proces plný experimentování. Napsat program, který bude funkční už napoprvé, je malý zázrak — hlavní je dělat malé krůčky, které zhruba směřují ke správnému řešení. Dělat chyby je vlastně skoro dobře, protože těmi se toho nejví naučíte.

Koho se zeptat?

Nejjednodušší je zeptat se některého ze svých spolužáků — buďto vám poradí, nebo alespoň zjistíte, že nejste jediní, kdo se ztrácí. Obojí každopádně je fajn.

Taková základní záložní možnost je zeptat se mě. Oceňuji všechny otázky, a nikomu žádnou otázku nevyčítám — i kdybyste se až teď osmělili zeptat na něco, co se dělalo pět přednášek zpátky.

Zdroje na internetu

S obecnějšími otázkami vám pomohou lidé z r/learnprogramming nebo na Stack Overflow. Zvláště druhá zmíněná stránka je takový zlatý grál programátorů, a to i těch profesionálních.

Pokud vám ani na jednom z míst nebudou schopni pomoci, doporučuji napsat na Pyret-Discuss mailing list. Na otázky a nápady tam mimo jiné často reagují také přímo autoři Pyretu, takže je to asi nejlepší Pyretovské místo na internetu.

Zadání úkolů

Všechny úkoly prosím posílejte nejpozději o půlnoci, a to přes messenger nebo přes mail. Nebude-li řečeno jinak, posílejte úkoly v souboru s názvemidUkolu_prijmeni.arr, například u1_wybitul.arr. Pokud je v rámci jednoho úkolů několik podůkolů, uložte je všechny do jednoho souboru a oddělte je prázdným řádkem.

Seznam použitých knihoven můžete nalézt zde.

#U23 ze dne 25. 5. k odevzdání do 31. 5.

Cesta, krok 4

Kapitola 7 (pouze pro poutníky na cestě)

#U21 ze dne 19. 5. k odevzdání do 24. 5.

Cesta, krok 3

Kapitola 5 + 6 (pouze pro poutníky na cestě)

#U22 ze dne 20. 5. k odevzdání do 24. 5.

Functory a Apply(45 b.)

Seznamy, Maybe, Either, Box a PPL

#U20 ze dne 16. 5. k odevzdání do 13. 5.

Cesta, krok 2

Kapitola 3 + 4 (pouze pro poutníky na cestě)

#U17 ze dne 3. 5. k odevzdání do 9. 5.

Cesta, krok 1

Kapitola 2

#U18 ze dne 4. 5. k odevzdání do 4. 5.

List edit distance(40 b.)

Dynamické programování podruhé

#U14 ze dne 30. 3. k odevzdání do 21. 4.

Další purescriptové úkoly(62 b.)

Haló?

#U16 ze dne 27. 4. k odevzdání do 17. 4.

Purescript from the ground up

Výrazy, funkce, závorky, jednoduché funkce, List, Maybe, Either

#U15 ze dne 6. 4. k odevzdání do 12. 4.

Pub crawl(30 b.)

Hospodský maraton po matfyzácku

#U12 ze dne 9. 3. k odevzdání do 23. 3.

Rýmovací výzva

Rýmem ke zdraví

#U13 ze dne 9. 3. k odevzdání do 15. 3.

První Purescriptový úkol: Adress Book(15 b.)

Haló?

#U11 ze dne 9. 2. k odevzdání do 16. 2.

Příprava programovacího prostředí pro Purescript

Ide, build systém, package manager, compiler

#U10 ze dne 24. 11. k odevzdání do 30. 11.

Analýza efektivity kódu(10 b.)

Snaha zrychlit náš současný game of life začíná u analýzy toho, které části vlastně zrychlení nejvíce potřebují

#U9 ze dne 10. 11. k odevzdání do 16. 11.

Conway's game of life(10 b.)

Druhý projektový úkol, který propojuje všechna dosavad probraná témata

#U8 ze dne 6. 11. k odevzdání do 9. 11.

Data!(10 b.)

Ta da!

#U7 ze dne 20. 10. k odevzdání do 2. 11.

Vigenèrova šifra(20 b.)

Váš první projekt

#U6 ze dne 20. 10. k odevzdání do 26. 10.

Rekurze a akumulátory (functions are fun, part 3)(3 b.)

Procvičování rekurzivního přemýšlení na složitějších příkladech o seznamech. Použití akumulátorů je vřele doporučeno

#U5 ze dne 12. 10. k odevzdání do 19. 10.

Rekurze a akumulátory (functions are fun, part 2)(3 b.)

Procvičování rekurzivního přemýšlení na složitějších příkladech o seznamech

#U4 ze dne 21. 9. k odevzdání do 4. 10.

Functions are fun(20 b.)

Funkce volá sebe samu; myšlenkový skok k opakovanému zavolání funkce

#U3 ze dne 15. 9. k odevzdání do 21. 9.

Vlastní funkce(10 b.)

Funkce — tvoření vlastních funkcí a jejich používání k řešení úloh

#U2 ze dne 8. 9. k odevzdání do 14. 9.

Proměnné(7 b.)

Procvičování tvorby a pojmenovávání proměnných

#U1 ze dne 4. 9. k odevzdání do 10. 9.

Generování vlajek(10 b.)

Zopakování práce s obrázky (tvoření, umisťování, spojování)

Zápisky z přednášek

V ústní části zkoušky budou vyžadovány pouze znalosti, které jsou zaznamenány v těchto zápiscích. Přednášky jsou inspirovány knihou Programming and Programming Languages (PAPL), pokud vám tedy něco z přednášek nebude jasné, můžete se zkusit podívat i do ní.

#P14 ze dne 18. 5.

Efekty

Functor, Applicative, Monad

#P13 ze dne 11. 5.

Seznam užitečných funkcí v Purescriptu

Kromě funkcí též typové třídy a nejběžnější balíčky

#P12 ze dne 10. 3.

Základy Purescriptu

Funkce, typy a currying

#P11 ze dne 19. 1.

Zkouška: Pixel Art

Zadání písemné části zkoušky

#P10 ze dne 12. 1.

Pololetní zkouška

Co čekat od písemné a ústní části zkoušky

#P9 ze dne 7. 12.

Jak získat z vašeho 1:1 maximum

Co čekat od 1:1 meetingu a jak se na něj připravit

#P0 ze dne 24. 11.

Seznam in-house knihoven

V průběhu přenášek a úkolů jsem dal dohromady několik pomocných knihoven, zde je jejich úplný seznam

#P8 ze dne 24. 11.

Conway's Game of Life

Záznam o tom, jak probíhá náš GoL projekt

#P7 ze dne 3. 11.

Vlastní datové typy

Ne vše jde pohodlně namodelovat pomocí seznamů, čísel, stringů a booleanů. A přesně pro tyto nám Pyret umožňuje definovat si vlastní typy, které přesně odpovídají našim potřebám

#P6 ze dne 12. 10.

Programování s akumulátory

Funkce se liší nejen tím, jak jednoduše jsou pochopitelné, ale taky tím, jak jsou efektivní. Akumulátory nám často pomáhají zefektivnit rekurzivní funkce

#P5 ze dne 6. 10.

(Spojové) seznamy

Ukázali jsme si, že můžeme jakékoli typy zabalit do seznamů, což jsou sbírky nula a více věcí

#P4 ze dne 21. 9.

Booleany a funkce, které volají samy sebe

Naučili jsme se v rámci algoritmů pomocí if/else rozhodovat, jaký kousek kódu spustit, na základě hodnoty nějaké proměnné. Objevili jsme datový typ "boolean", který vyjadřuje pravdu a nepravdu. A v neposlední řadě jsme si ukázali, že funkce mohou volat samy sebe a naučili jsme se pomocí toho řešit nové sloužité problémy.

#P3 ze dne 15. 9.

Psaní vlastních funkcí

Ve třetí přednášce jsme probírali další nástroje sloužící ke zjednodušení a zpřehlednění kódu: Funkce

#P2 ze dne 8. 9.

Intuice k funkcím, proměnné a kompilátory

Během druhé přednášky jsme si ukázali, jak nám proměnné mohou pomoct vyhnout se opakovanému psaní kódu a jak celý náš program mohou udělat čitejnějším

#P1 ze dne 4. 9.

Úvod do programování, datové typy, manipulace s obrázky

V této přednášce jsme se seznámili s několika drobnostmi ze světa programovacích jazyků a začali jsme programovat v Pyretu