e-x-a.org » NPRG031 Programování 2 2017/18

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

  • ČAS: každý čtvrtek 12:20, SW2
  • KONTAKT: kratochvil@ksi.mff.cuni.cz, 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 ReCodExu (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 budou vidět v SISu, požadavek: nemít nápadně málo bodů)
  • napsat test (termíny viz. dole)
  • 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ý menší až střední projekt (maximálně 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. Zpracování čehokoliv z jiného předmětu na MFF je fajn.

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 a zapsání do SISu: 31. 3. 2018, 23:59:59.999
  • doporučené odevzdání zápočťáků: na posledním cvičení (pozor, přes zkouškové a prázdniny nemusím být k dispozici!)
  • Konečný termín konečného konce všeho: 15. 9. 2018.

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 říká “studijní mezivýsledek”). Zkontrolujte si to, nesrovnalosti hlašte.

Testy

Testy budou praktické — v rámci posledních cvičení (bude “včasný doporučený” a “normální 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í

Zdrojáky ze cvičení budou tady.

1 (22. 2. 2018)
  • Úvod do C# a C-like jazyků.
  • Console, konverze vstupu na integery a zpět.
  • Výstupní/referenční parametry

: přihlašte se ke správné skupině v ReCodExu!

2 (1. 3. 2018)
  • Objekty a používání objektů z hlediska uživatele, List, Queue, arraye.
  • Dodělali jsme Floyd-Warshalla z minule
  • Načítali jsme integery

Přihlašte se do správné skupiny v ReCodexu! Pokud to z nějakého důvodu nejde, pište mail, přidám vás.

Na cvičení jsme stvořili IntReader, předělal jsem ho na statickou verzi. Můžete ho používat na domácí úkoly.

3 (8. 3. 2018)

Přetěžování operátorů, užitečná třída na Vector, trochu fyziky a simulace střelby z děla.

4 (15. 3. 2018)

Trochu dědičnosti a polymorfismu. Začali jsme vyrábět diskrétní simulaci lesa.

5 (22. 3. 2018)

Pokračování lesní ságy, polymorfní framework na polymorfní diskrétní simulaci polymorfních objektů. Příště to snad už doděláme a budeme moct dělat něco lepšího.

6 (31. 3. 2018)

Zbytek diskrétní simulace. Programování formulářovitých GUI.

7 (5. 4. 2018)
  • Práce se soubory
  • Obrázky
8 (12. 4. 2018)

Cvičení zrušeno.

9 (19. 4. 2018)

Obrázek z pidi verze malování jsme zapsali do BMP.

Dynamické programování — Levenshtein a spol.

10 (26. 4. 2018)

Test 1

11 (3. 5. 2018)

Parsování rekurzivním sestupem (docela vhodný framework na to jak naparsovat cokoliv).

12 (10. 5. 2018)

Multithreading, zámky.

13 (17. 5. 2018)

Herní interfacy — jak něco rozumného pohyblivého nakreslit v OpenGL. Kromě zdrojáku z hodiny je vedle k dispozici i to samé portované do SFML (což se mi na cvičení nepodařilo stihnout nastavit, protože MSVC). Střílí se mezerníkem.

Plán (věci ve frontě)

Bonus!!

Přečtěte si The Art of UNIX Programming (online verze). Velmi relevantní i mimo UNIX.

Jak na linuxu skompilovat aplikaci se System.Windows.Forms?

Stáhněte si do mono knihovnu, která to podporuje (např. na debianu to je libmono-system-windows-forms4.0-cil), načež můžete přidávat assembly reference třeba takhle:

mcs -r:System.Drawing -r:System.Windows.Forms -r:System.Numerics gravitace.cs
Jak si program vyzkoušet ve stejném prostředí, jako ReCodEx?

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, použití připraveného vstupu a uložení výstupu: time ./program.exe <vstup.in >vystup.out
  4. fajn kontrola co je špatně: diff -u muj_vystup.out spravny_vystup.out |less

POZOR: v ReCodExu 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