Cvičení z Algoritmizace a Programování I, ZS 2022/2023

Čtvrtek od 14:00 v N8 (IMPAKT)

Informace o cvičení v aktuálním akademickém roce (2023/2024) zde
Cvičení vede Jakub Mestek (jakub.mestek<at>gmail.com)

Obsah cvičení

12. cvičení, 5. 1.

Algoritmizace: Řešení domácích úloh. Vzorové úlohy ze zkoušky.

Programování: Zápočtový test.

[slidy]

11. cvičení, 22. 12.

Algoritmizace: Prohledávání. Hledání nejkratší cesty, prohledávání grafu. Materiály na cvičení: prohledávání (pseudokód) , grafy .

Programování: Zadán domácí úkol.

[slidy] [programy]

10. cvičení, 15. 12.

Algoritmizace: Rekurze – typové úlohy. Krabičky. Zadán domácí úkol (poslední).

Programování: Slovník, množina. Práce se soubory. Zadán domácí úkol.

[slidy] [programy]

9. cvičení, 8. 12.

Algoritmizace: Prohledávání stavového prostoru – Přelévání vody. Zadán domácí úkol.

Programování: Binární stromy – výpočet výšky, symetričnost. Zadán domácí úkol.

[slidy] [programy]

8. cvičení, 1. 12.

Algoritmizace: Rekurze – faktoriál, Fibonacciho čísla. Hanojská věž – počet tahů.

Programování: Generování variací bez opakování a permutací, vkládání operátorů mezi čísla. Zadán domácí úkol.

[slidy] [programy]

7. cvičení, 24. 11.

Algoritmizace: Řešení úlohy počet jedniček v podmatici. Datové struktury – zásobník, fronta, prioritní fronta. Binární halda – operace Odstraň prvek, Změň prioritu. Zadán domácí úkol.

Programování: Řešení úloh Průnik a sjednocení spojových seznamů. Zásobník – objektová implementace, použití v jiném programu (import). Zadán domácí úkol.

[slidy] [programy]

17. 11.

Výuka zrušena – státní svátek.

V případě nějakých otázek nebo nejasností (k DÚ, látce z přednášek, ...) mi napište e-mail, možnost konzultace.

6. cvičení, 10. 11.

Algoritmizace: Počet jedniček v podposloupnosti – prefixové součty. Binární vyhledávání – nejlevější a nejpravější výskyt. Zadán domácí úkol.

Programování: Spojové seznamy. Zadán domácí úkol.

[slidy] [programy]

5. cvičení, 03. 11.

Algoritmizace: Řešení úlohy Prostřední z pěti. Třídící algoritmy. Halda.

Programování: Spojové seznamy - [šablona]. Zadán domácí úkol.

[slidy] [programy]

27. 10.

Výuka zrušena – imatrikulace.

V případě nějakých otázek nebo nejasností (k DÚ, látce z přednášek, ...) mi napište e-mail, možnost konzultace.

4. cvičení, 20. 10.

Algoritmizace: Poznámky k domácímu úkolu. Invariant cyklu. Algoritmické řešení úloh z Programování.

Programování: Terminál, čtení vstupu ze souboru, zápis výstupu do souboru. Úlohy na práci s list. Zadán domácí úkol.

[slidy] [programy]

3. cvičení, 13. 10.

Algoritmizace: O notace – důkazy tvrzení. Vážení kuliček – domácí úkol (do 27. 10., viz ReCodEx–Algoritmizace).

Programování: Diskuse o řešeních úlohy Maximum. list, slicing, for cyklus. Debugging – breakpointy, krokování.

[slidy] [programy]

2. cvičení, 6. 10.

Algoritmizace: Je číslo v posloupnosti? – zápis algoritmu, správnost, složitost. O notace.

Programování: Seznámení s VS Code a ReCodExem. If-else, while, výpis a čtení vstupu. Domácí úkoly – viz ReCodEx

[slidy] [programy]

1. cvičení, 29. 9.

Úvodní informace

Úlohy z algoritmizace

[slidy]

Podmínky zápočtu

Programování I

Algoritmizace

Zápočtový program

Zápočtový program je větší software, který naprogramujete doma během semestru. Téma si vymyslíte sami, jakmile jej budete mít rozmyšlené (nejpozději však do 15. 12.), sepište specifikaci – krátký (1–2 odstavce) popis tématu (tj. co váš program bude dělat) – a pošlete mi ji ke schválení.

Až budete mít program hotový, zašlete mi ho ke kontrole, a to takovým způsobem, abych jej mohl spustit a vyzkoušet, ale také se podívat na zdrojový kód. (Pokud by to bylo problematické, můžeme se domluvit na osobním předvedení.)

Součástí odevzdávaného programu musí být také dokumentace, a to uživatelská (vysvětující, jak se program ovládá) a programátorská (ta popisuje, jak program uvnitř funguje; nemá smysl popisovat každou funkci nebo proměnnou, zaměřte se na celkový návrh programu a použité algoritmy). Program odevzdejte ideálně do konce zkouškového, nejpozději však do 28. 2.

Zápočtový program nemusí být nutně napsán v Pythonu, můžete použít jiný jazyk, který dobře znáte nebo se hodí pro vybranou úlohu. Pokud ale budete chtít použít jiný jazyk než Python, domluvte se na tom se mnou předem (= uveďte to ve specifikaci).

Pěkný seznam možných témat má na svém webu Martin Mareš, další návrhy a informace k zápočtovému programu sepsal i Jirka Mayer. Návod a rady k psaní dokumentace najdete na webu Rudolfa Kryla. Dokumentaci můžete psát česky, slovensky, nebo anglicky.

Návody

ReCodEx

Pro zadávání a odvezdávání domácích úkolů budeme používat systém ReCodEx.

Programovací úkoly vám ReCodEx ihned zkontroluje a oboduje. Pokud vaše řešení nebude 100%, můžete odevzdat nové. Počet pokusů bude omezen na 50, počítat se bude ten nejlepší. Teoretické úkoly (z Algoritmizace) budu opravovat ručně, tudíž budete mít obvykle jen jeden pokus.

Jak ReCodEx zprovoznit:

Vývojové prostředí

Používat můžete cokoliv, já budu na cvičeních používat Visual Studio Code.

Instalace:

  1. Stáhněte a nainstalujte si Python (https://www.python.org/downloads/). Při instalaci zaškrtněte Add Python to PATH.
  2. Stáhněte a nainstalujte si Visual Studio Code (https://code.visualstudio.com/download).
  3. Ve VSCode v menu vlevo vyberte Extensions a přidejte si rozšíření Python.

Přístup k souborům na školních počítačích

Pokud máte soubory uložené na Studentském úložišti (disk (su.mff.cuni.cz)), dostane se k nim například přes webové rozhraní https://su.mff.cuni.cz/.

Pokud máte soubory na afs (ve škole disk Z:), dostanete se k nim skrze vzdálený přístup na nějaký počítač v počítačové laboratoři Rotunda (co dalšího tam můžete dělat zde):