e-x-a.org » NPRG030 Programování 1 2017/18

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

  • ČAS: každé pondělí 10:40 v SW2, ZS 2017/18.
  • KONTAKT: exa.exa@gmail.com, do předmětu napište NPRG030 (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žadavky: aspoň polovinu bodů celkem, aspoň polovinu z druhé poloviny semestru)
  • na cvičení se hodí občas přijít a vypadat aktivně a přítomně (když vás v lednu před zkouškovým uvidím poprvé, předpokládám potíže)
  • napsat test (budou zhruba 3, stačí cca 50% celkových bodů)
  • vyrobit zápočťák

Pokud už umíte programovat v nějakém jazyce s pointery (tj. C, Pascal) a myslíte si, že požadavky pro vás budou triviální a můžete je bez potíží splnit rovnou, dejte mi vědět na hodině nebo mailem.

Zápočťáky

Na zápočet potřebujete vymyslet, navrhnout a naprogramovat zápočtový program. Mělo by jít o nějaký menší projekt (cca 200 až 500 řá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 dát do kupy konzistentní kus software.

Vhodná témata jsou miniaturní rychlé hry, zpracovávače a formátovače textu, miniaturní programovací jazyky (želva/karel, malinké virtuální CPU, forth), kalkulačky, všelijaké generátory (bludiště, fraktální a bezkontextové obrázky ), zpracovávače a upravovače obrázků a zvuků, pomůcky pro jiné matfyzácké úlohy (numerická řešení rovnic, limity, derivace, matice, ...) nebo nějaké pěkné algoritmy a datové struktury (nějaké lepší stromy nebo haldy).

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.

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: Začátek prosince
  • odevzdání zápočťáků: Polovina března

Pozor, “dohodnutí tématu v termínu” neznamená, že mi poslední den ve 23:59:59 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
  • První test bude na začátku listopadu
  • Druhý test bude na začátku prosince
  • Třetí test bude na začátku ledna (pokud bude potřeba)

Výsledky testů jsou vidět v SISu!

Průběh cvičení

bude.

Bonusy!

  • Při soubojích s CodExem se může hodit seznam chybových kódů pascalu
  • 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é.
Jak vyrobit rozumný uživatelský interface pro jednoduchou zápočťákovou hru?

Třeba takhle.

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

Potřebujete stroj s nějakým UNIXem (můžete si nainstalovat třeba virtuální ubuntu, ale v labu je dost počítačů na které se jde přihlásit odkudkoliv) a na něm nainstalovaný kompilátor FPC.

Do labu se přihlásíte takhle:

  • z Putty.nl si stáhnete Putty, což je SSH klient pro windows
  • odněkud z internetu si stáhněte WinSCP, tím jde na unixy nahrávat soubory
  • Připojujete se k počítači u-plX.ms.mff.cuni.cz, místo X doplníte číslo 1 až cca 23 podle toho, který počítač chcete obtěžovat. Jsou to jeden po druhém přesně všechny počítače vlevo v labu.
  • Login a heslo je stejné jako když se přihlašujete ručně nablízko.

UNIXové prostředí je pro programování podstatně vhodnější než windows, jen se o nové uživatele moc nestará, takže je potřeba si sehnat nějaký návod. Ten dostanete až v rámcí úvodu do unixu v 2. semestru, mezitím si můžete přečíst třeba tohle . Potom:

  1. Pomocí WinSCP nahrajete program.pas na unixový počítač
  2. Pomocí Putty se tam přihlásíte, vlezete (cd) do adresáře, kam jste soubor nahráli
  3. napíšete fpc program.pas, vedle se vám vyrobí spustitelný soubor program
  4. program spustíte pomocí ./program. Když se rozbije, stačí Ctrl+C, to ho přeruší.

Pokud chcete i range checky apod., konkrétní příkaz, kterým codex kompiluje programy je: fpc -g -O2 -Sg -Ci -Cr -Ct program.pas (viz zde ).

Trik: do souboru si můžete uložit testovací vstup.

  1. spustíte cat > test.in
  2. napíšete celý vstup
  3. ukončíte Ctrl+D (což je zkratka pro EOF. Když to omylem zmáčknete dvakrát, pošlete EOF i konzoli, takže vás odpojí. haha.)
  4. program spustíte pomocí ./program < test.in
  5. podobně si můžete schovat výstup programu: ./program <test.in >vysledek (a koukat se na něj: cat vysledek ).

Pokud chcete soubory editovat humánně přímo na místě, můžete zkusit vi program.pas. Vi je extrémně užitečný editor (aktuálně jeden ze dvou nejlepších editorů na planetě), pro nové uživatele samozřejmě smrtící. Je fajn si předtím zkusit vimtutor. V případě zoufalství použijte nano.