Navigation
Page categories
Outline:
Last modification
2025-09-04
This is smol web. If you don't like it, fix your browser.

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

Zápočet#

Na zápočet potřebujete splnit následující podmínky:

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í, dejte mi vědět na hodině nebo mailem.

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ší 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 ) 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í:

Termíny (konečné):

Upozorňuju, že “dohodnutí tématu v termínu” neznamená, že mi 7.12. 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#

(detaily viz. níže)

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

Průběh cvičení#

5. 10. 2016#

Úvod, předběžnosti, programování velblouda.

: Zaregistrujte se do CodExu, vytvořte si login v labu, a pošlete mi e-mail, že vás mám přidat do CodExové skupiny. (1 bonus bod)

12. 10. 2016#

Programování dřevěných počítačů. Hledání vhodného vývojového prostředí. Rychloúvod do pascalu: Přehlídka toho jak vypadá program, begin/end, if, for/while/repeat, integery. Jednoduché problémy s cykly a malými čísly.

: odteď už vždycky v CodExu.

19. 10. 2016#
26. 10. 2016#
2. 11. 2016#
9. 11. 2016#
16. 11. 2016#
23. 11. 2016#
30. 11. 2016#

Upozornění: Zdroják úkolu s dlouhým dělením už je na webu. Knihovnu na práci se seznamy tam dám, až bude po termínu seznamového úkolu.

7. 12. 2016#

Upozornění: Jednoduchá knihovna na práci se seznamy je mezi řešeními domácích úkolů.

14. 12. 2016#

Návod na domácí úkol s roztržitým profesorem:

Potřebujete datovou strukturu, která umí udržet pořadí a dá se jí ubírat z prostředka a přidávat na začátek. Tj. nějaký strom.

Zároveň potřebujete aby operace běžěly jakž takž rychle, ideálně O (log n). Takže musí být nějak vyvážený.

Především ale potřebujete umět v O (log n) vybrat v pořadí k-tý prvek, to se ve stromě nejlépe provede tím, že si v každém uzlu pamatuje a udržuje počet uzlů tvořících celý podstrom. Trochou počítání pak jde při cestě od kořene vždycky jednoduše vybrat správné odbočky přesně ke k-tému prvku: Např. když hledám v pořadí pátý prvek a v levém podstromě jsou jen 3 prvky, pátý bude určitě ležet v pravém podstromě, kde bude v pořadí první.

Počítání prvků jde použít i na vyvažování — když se vám zdá, že je někde velká nerovnováha, prostě uděláte rotaci správným směrem.

Inspirace a víc materiálu ke čtení např. zde. Exaktní dodržení vyvažovacích podmínek (nebo dvojrotace apod.) ale není vůbec potřeba řešit.

21. 12. 2016#
4. 1. 2017 (předpoklad)#
11. 1. 2017 (předpoklad)#

Bonus!!#

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:

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í.)
  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.