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

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

  • ČAS: bude
  • 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 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ý 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. 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 červen pravděpodobně většinou nebudu 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 možná ří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.

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 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 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