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
DÚ: 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
.
- Kompilace:
mcs program.cs
- vypadne z toho
program.exe
, ten spustíte buď přímo./program.exe
, nebo pokud nemátebinfmt_misc
, takmono program.exe
- časování běhu, použití připraveného vstupu a uložení výstupu:
time ./program.exe <vstup.in >vystup.out
- 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ší).