Algoritmizace a Programování 1, ZS 2024/2025
Středa od 13:10, N8 (IMPAKT)Obsah cvičení
Zápočtový test – 8. 1.
- Algoritmizace: Řešení domácích úloh, prohledávání grafu.
- Programování: Zápočtový test.
Aritmetické výrazy, unittesty – 18. 12.
- Algoritmizace: Aritmetické výrazy. Úloha Krabičky.
- Programování: Unittesty - vzor.
Prohledávání stavového prostoru – 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
Binární stromy, prohledávání – 4. 12.
- Binární stromy – prohledávání do šířky. Prohledávání stavového prostoru – Přelévání vody.
Rekurze, binární stromy – 27. 11.
- Rekurze. Binární stromy (šablona, data).
- Kvalita kódu, PEP 8 a další.
Rekurze, rekurzivní generování – 20. 11.
Využití datových struktur – 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).
Datové struktury, spojové seznamy – 6. 11.
- Algoritmizace: Datové struktury – zásobník, fronta. Binární halda.
- Programování: Spojové seznamy.
Nejčastější číslo, funkce – 30. 10.
- Algoritmizace: Nejčastější číslo v posloupnosti – různé přístupy.
- Programování: Funkce, dekompozice.
O notace, binární vyhledávání – 16. 10.
Asymptotická složitost, O notace – 13. 10.
Úvodní informace – 2. 10.
Ú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í.
- Soutěž Kasiopea (archiv) - pozor, náročnost jednotlivých úloh se v rámci ročníku postupně zvyšuje – A,B jsou velmi lehké, I dost těžké.
- Na webu Korespondenčního semináře z programování (KSP) najdete kromě zadání úloh i kuchařky vysvětlující nejrůznější oblasti algoritmizace – můžete je využít jako studijní literaturu.
- Zkusit si můžete také úlohy kategorie P z Matematické olympiády.
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
- 70 % bodů z domácích úkolů – zadávané každý týden, v ReCodExu
- zápočtový test – řešení programovací úlohy v ReCodExu; na posledním cvičení
- zápočtový program – specifikace do 31. 12., odevzdání (včetně dokumentace) do 16. 2. (konec zkouškového)
- aktivita na cvičení – předvádění úloh,…
Algoritmizace
- 70 % bodů z domácích úkolů – zadávané zhruba každý týden (za semestr bude celkem 8 úkolů po 10 bodech), v ReCodExu
- navíc dostanete bonusové body za účast na cvičení (1 bod za každé cvičení, celkem tedy až 14 bodů)
- osobní předvedení řešení jedné (domácí) úlohy na cvičení
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 – krátký (1–2 odstavce) popis, co váš program bude dělat – a pošlete mi ji ke schválení.
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).
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), který si naklonujete a přidáte do něj váš program. Postup a základní práci s Gitem si ukážeme na cvičení. 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:
- Uživatelská část vysvětluje, jak se program ovládá. Povinnou součástí je informace, jak program spustit — v případě, že se skládá z více .py souborů, který z nich spustit; jaké lze nastavit parametry; jaké má vstupní soubory; atd. V případě, že programujete hru nebo podobnou aplikaci, tak jakými klávesami se ovládá. Pokud program pracuje s nějakými soubory (jako vstup nebo výstup), popište jejich formát.
- Programátorská část popisuje, jak program uvnitř funguje. Nemá smysl detailně popisovat každou funkci nebo proměnnou (to udělejte alespoň pro ty nejdůležitější nebo složitější pomocí komentářů přímo v kódu), zaměřte se na celkový návrh programu a použité algoritmy.
- Ukázky použití.
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.
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.
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:
- Jděte na https://recodex.mff.cuni.cz/login.
- V sekci Přihlásit se pomocí externí služby (box vpravo) klikněte na Ověřit uživatele. Přihlaste se pomocí Centrální Autentizační Služby (CAS UK), přihlašovací údaje jsou stejné jako do SISu.
- V menu vlevo je položka SIS Integrace, tam se přidejte do skupin Algoritmizace a Programování 1.
Při prvním přihlášení se položka SIS Integrace možná v menu neobjeví, v tom případě zkuste stránku načíst znovu. - Pro programování byste měli vidět dvě podskupiny – Domácí úkoly a Nepovinné.
- Do skupiny Domácí úkoly Vám budu zadávat domácí úkoly (viz Podmínky zápočtu).
- Úlohy ve skupině Nepovinné budeme řešit v hodině, doma je dodělávat nemusíte. Pokud ale budete na cvičení chybět, doporučuji se na ně podívat.
Vývojové prostředí
Používat můžete cokoliv, já budu na cvičeních používat Visual Studio Code.
Instalace:
- Stáhněte a nainstalujte si Python (https://www.python.org/downloads/). Při instalaci zaškrtněte Add Python to PATH.
- Stáhněte a nainstalujte si Visual Studio Code (https://code.visualstudio.com/download).
- 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):
- Přístup z UNIXu, terminálu, apod.: skrze SSH, SCP nebo SFTP se lze připojit na libovolný počítač v Rotundě:
ssh login@u-plXX.ms.mff.cuni.cz, místoXXzadejte číslo z rozsahu 1–29, login a heslo jako do SISu - Kopírování souborů z Windows:
- Nainstalujte si WinSCP.
- Vyberte Nové spojení (New Connection).
- Zadejte:
- protokol: SFTP
- hostitel (host):
u-plXX.ms.mff.cuni.cz, místoXXzadejte číslo z rozsahu 1–29, např.u-pl01.ms.mff.cuni.cz - jméno a heslo – jako do SISu