Cvičení z Algoritmizace a Programování 1, ZS 2024/2025

Středa od 13:10 v N8 (IMPAKT)
Cvičení vede Jakub Mestek (jakub.mestek<at>mff.cuni.cz)
Cvičení v AR 2023/2024

Obsah cvičení

12. cvičení, 8. 1.

Algoritmizace: Řešení domácích úloh, prohledávání grafu.

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

11. cvičení, 18. 12.

Algoritmizace: Aritmetické výrazy. Úloha Krabičky.

Programování: Unittesty - vzor.

10. cvičení, 11. 12.

Prohledávání stavového prostoru – dokončení rozboru z minula [pseudokódy].

Slovník, množina – vlastní typy. Práce se soubory [soubory.zip]

[slidy] [programy]

9. cvičení, 4. 12.

Binární stromy – prohledávání do šířky. Prohledávání stavového prostoru – Přelévání vody.

[programy]

8. cvičení, 27. 11.

Rekurze. Binární stromy (šablona, data .

Kvalita kódu, PEP 8 a další.

[programy]

7. cvičení, 20. 11.

Algoritmizace: Rekurze, rekurzivní generování.

[slidy] [programy]

6. cvičení, 13. 11.

Algoritmizace: Využití datových struktur pro efektivní řešení úlohy.

Programování: Informace o zápočtových programech. Spojové seznamy (prakticky).

[programy]

5. cvičení, 6. 11.

Algoritmizace: Datové struktury – zásobník, fronta. Binární halda.

Programování: Spojové seznamy.

4. cvičení, 30. 10.

Algoritmizace: Nejčastější číslo v posloupnosti – různé přístupy.

Programování: Funkce, dekompozice.

[programy]

23. 10.

Výuka zrušena – imatrikulace.

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

3. cvičení, 16. 10.

Algoritmizace: O notace – důkazy tvrzení. Binární vyhledávání.

Programování: list (matice, list comprehension), cykly, funkce.

[slidy] [programy]

2. cvičení, 13. 10.

Algoritmizace: Asymptotická složitost a O notace (příště v tom ještě budeme pokračovat).

Programování: list, cykly.

[slidy] [programy]

1. cvičení, 2. 10.

Úvodní informace.

Úlohy z algoritmizace.

Seznámení s VS Code a ReCodExem, If-else, výpis a čtení vstupu.

První domácí úkoly, v ReCodExu.

[slidy] [programy]

Úlohy na procvičení

Pro domácí procvičování jsou vhodné úlohy ze středoškolských programovacích/algoritmizačních soutěží. Na jejich stránkách najdete archivy minulých ročníků, obsahující nejen zadání, ale i vzorová řešení. Pro trénink určování složitosti algoritmů můžete použít i třeba řešení vašich domácích úkolů do Programovaní.

Podmínky získání zápočtu

Programování 1

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 31. 12.), sepište specifikaci – stručný (1–2 odstavce) popis, co váš program bude dělat – a pošlete mi ji ke schválení (e-mailem).

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). Pokud plánujete používat nějaké knihovny či frameworky třetích stran (mimo standardní knihovnu zvoleného programovacího jazyka), uveďte je ve specifikaci také.

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.

Program se odevzdává skrz fakultní Gitlab, kde budete mít připraven repozitář (asi /teaching/nprg030/2425-winter/student-LOGIN_DO_SISU, upřesním později) si založíte repozitář, do kterého nahrajete váš program. Postup a základní práci s Gitlabem se naučíte na cvičení (DÚ - samostudium). Jakmile bude mít program hotový, pošlete mi e-mail s odkazem na váš repozitář. Já se na program podívám a ohodnotím ho.

Součástí odevzdávaného programu musí být také dokumentace, která má tři hlavní části: Vhodný způsob, jak psát dokumentaci, je vytvořit si v repozitáři složku docs a v ní mít několik souborů ve formátu Markdown (.md). Do souboru README.md pak vložte rozcestník (odkazy) na jednotlivé části dokumentace. Dokumentaci můžete psát česky, slovensky, nebo anglicky.

Návod a rady k psaní dokumentace najdete na webu Rudolfa Kryla. Příklady dokumentací (pouze pro představu a inspiraci, určitě je tam značný prostor pro zlepšení) [1], [2], [3].


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, 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:), můžete se k nim připojit vzdáleně pomocí OpenAFS, návod na wiki laboratoře Rotunda.

Jiný způsob, je 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):