e-x-a.org » NPRG031 Programování 1 2016/17

Trochu informací o cvičení z programování 2

  • ČAS: každý čtvrtek 10:40 v SU2, LS 2016/17.
  • KONTAKT: exa.exa@gmail.com, do předmětu napište NPRG031 (jinak hrozí, že zapadnete do nánosu ostatních mailů).

Zápočet

Na zápočet potřebujete splnit následující podmínky:

  • plnit domácí úkoly v CodExu (požadavek: mít aspoň polovinu bodů)
  • na cvičeních vypadat aktivně a občas přispět k obecnému pokroku aktivitou u tabule (body za tohle jsou vidět v codexu, požadavek: nemít nápadně málo bodů)
  • napsat test
  • vyrobit zápočťák

Pokud už umíte programovat v objektově orientovaném jazyce (tj. C#, C++, Jáva) a myslíte si, že požadavky pro vás budou triviální, dejte mi vědět na hodině nebo mailem, ať se zbytečně nenudíte docházkou.

Zápočťáky

Na zápočet si potřebujete vymyslet, navrhnout a naprogramovat zápočtový program. Mělo by jít o nějaký střední projekt (cca 500-1000 řádků smysluplného kódu) který neotřele řeší nějakou zajímavou nebo zábavnou úlohu. Cílem zápočťáku je prokázat, že umíte správně objektově navrhnout a naprogramovat netriviální kus software. Kromě C# můžete používat i C++ a rozumně i jiné objektovité jazyky.

Vhodná témata jsou miniaturní rychlé hry (obecně jakékoliv hry jsou pro objektový návrh velice vhodné), miniaturní programovací jazyky (želva/karel, virtuální/paralelní/magické CPU, forth), kreslítka (fraktální a bezkontextové obrázky ) nebo nějaké pěkné algoritmy a datové struktury.

Inspirace dále např. u Martina Mareše nebo třeba tady

Nevhodná témata jsou věci s příliš nejasným využitím nebo programy co jsou na internetu už dostupné v tisících kopií a různých variantách. Rozšíření zápočťáků z Programování 1 je možné, ale uvědomte si, že např. piškvorky mají určité rozšiřitelnostní limity.

Na zápočťáku se hodnotí:

  • kvalita kódu (čitelnost a struktura)
  • kvalita implementace (nechcípe to, nepočítá to špatně)
  • rozsah (a přiměřená obtížnost řešené úlohy)
  • dodržení termínů (za zmeškání termínu budu přidávat obtížnost)

Termíny:

  • dohodnutí tématu: 31. 3. 2017, 23:59:59.999
  • doporučené odevzdání zápočťáků: 31. 5. 2017. Přes červen pravděpodobně většinou nebudu k dispozici.
  • Konečný termín konečného konce všeho: 15. 9. 2017.

Upozorňuju, že “dohodnutí tématu v termínu” neznamená, že mi 31.3. ve 23:59:59.998 přijde mail. Téma je potřeba prodiskutovat a odsouhlasit. Počítejte s tím, že první návrh většinou neprojde.

Téma a splněnost zápočťáků je evidovaná v SISu v grupíku (teď se tomu možná říká “studijní mezivýsledek”). Zkontrolujte si to, nesrovnalosti hlašte.

Testy

Testy budou praktické — v rámci 2 posledních cvičení (normální a opravný termín) na počítači zpracujete jednoduché zadání. Časový limit je délka cvičení, tj. 90 minut.

Průběh cvičení

23. 2. 2017

Úvod, předběžnosti, IDE C#, crash-course v C-like jazycích. Console, konvertování vstupu na integery a zpátky.

DÚ: Napište mi mail, ať vás přidám do codexu. Další úkoly už budou jen a jen tam.

2. 3. 2017

Pořádnější načítání vstupu. OOP z hlediska uživatele objektů. List, Queue, arraye. Předávání parametrů výstupem nebo referencí.

9. 3. 2017

Objekty vyrobené ze zvířat, zoo, dědičnost, polymorfismus.

16. 3. 2017

Generické funkce a třídy. Soubory.

23. 3. 2017

Ukládání obrázku do BMP. Objektový základ na Dijkstrův algoritmus.

30. 3. 2017

Dijkstra, Loydovo puzzle.

7. 4. 2017

Simulace něčeho.

Bonus!!

Na cvičeních se občas oháním argumenty typu “...ale tohle je fuj”, “...z toho není moc poznat, co to dělá”, případně občas “když budete dělat tohle, budete trpět”. O důvodech podobných pohnutků a o obrovském množství velice praktických poznatků, které vznikly při vývoji jednoho z nejrozšířenějších programovacích prostředí na světě vůbec, se můžete dočíst v knížce E. S. Raymonda The Art of UNIX Programming (online verze). Popisuje i poměrně masivní kus počítačové historie. Pokud poprvé programujete nějaký větší systém, najdete návod (a hodně vytříbených odstrašujících příkladů) o tom, jak to nezmršit. Občas trochu filozofické. Pokud se vám z nějakého důvodu nezamlouvá C#, najdete tam dost pádných argumentů, proč to tak je a proč nemá cenu to řešit.

Jak si program vyzkoušet ve stejném prostředí, jako CodEx?

Na předmětu Úvod do UNIXu se dozvíte, jak se přihlásit na nějaký UNIX v labu, a jak tam editovat soubory a spouštět programy atd. Program si připravte do program.cs, testovací vstup do vstup.in.

  1. Kompilace: mcs program.cs
  2. vypadne z toho program.exe, ten spustíte buď přímo ./program.exe, nebo pokud nemáte binfmt_misc, tak mono program.exe
  3. časování běhu a porovnání vstupu: time ./program.exe <vstup.in >vystup.out
  4. fajn kontrola co je špatně: diff -u vystup.out spravny_vystup.out |less

POZOR: v CodExu z tohoto důvodu většinou nefunguje Console.ReadKey(). Ke konzoli se chovejte jako k souboru a použijte místo toho Console.Read() (pokud opravdu potřebujete jednotlivé znaky) nebo .ReadLine() (a roztrhejte si to na znaky ručně, je to většinou trochu rychlejší).

Shrnutí OOP v C-like jazycích