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: 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ý 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ů.

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

Plán (věci ve frontě)
  • Crash-course C-like jazyků, IDE pro C#, Console, konverze vstupu na integery a zpět.
  • Objekty a používání objektů z hlediska uživatele, List, Queue, arraye
  • Výstupní/referenční parametry
  • Objektově orientované programování
    • Koncept objektového programování, přetěžování funkcí a operátorů
    • Dědičnost a polymorfismus
    • Generické funkce a třídy
  • Praktikum programování (všechno asi nestihneme):
    • Práce se soubory
    • Obrázky
    • Dijkstra
    • Simulace všeho možného, praktikum uživatelských interfaců:
      • Střílení
      • Gravitace
      • 3D grafika
    • Diskrétní simulace
    • Vícevláknové programování
    • Dynamické programování
    • Parsování

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