Cvičení z Algoritmizace a Programování 1, ZS 2023/2024
Pátek od 9:00 v N11 (IMPAKT)
Cvičení vede Jakub Mestek (jakub.mestek<at>mff.cuni.cz)
Cvičení v AR 2022/2023
Obsah cvičení
12. cvičení, 12. 1.
Algoritmizace: Vzorové úlohy ze zkoušky.
Programování: Zápočtový test.
11. cvičení, 5. 1.
21. 12.
Výuka zrušena.
V ReCodExu zadány poslední domácí úkoly.
10. cvičení, 15. 12.
9. cvičení, 8. 12.
Binární stromy – prohledávání do šířky. Prohledávání stavového prostoru – Přelévání vody.
[slidy] [programy]
8. cvičení, 24. 11.
7. cvičení, 24. 11.
Algoritmizace: Rekurzivní generování – variace bez opakování, K ciferná čísla s daným ciferným součtem.
Programování: Spojové seznamy – těžší úlohy.
[slidy] [programy]
17. 11.
Výuka zrušena – státní svátek.
V případě jakýchkoli 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: Datové struktury – zásobník, fronta. Binární halda.
Programování: Spojové seznamy.
[slidy] [programy]
5. cvičení, 03. 11.
Algoritmizace: Binární vyhledávání. Vážení kuliček.
Programování: Funkce.
[slidy] [programy]
4. cvičení, 27. 10.
Algoritmizace: Hornerovo schéma - převod mezi soustavami. Rozklad na prvočísla.
Programování: Debugging – breakpointy, krokování. Úlohy na práci s list
. Zadán domácí úkol.
[slidy] [programy]
3. cvičení, 20. 10.
Algoritmizace: O notace – důkazy tvrzení. Domácí úkol.
Programování: Diskuse o řešení úlohy Druhá největší hodnota, invariant cyklu. list
, slicing, for cyklus.
[slidy] [programy (upraveno)]
2. cvičení, 13. 10.
Algoritmizace: Je číslo v posloupnosti? – zápis algoritmu, správnost, složitost. Asymptotická složitost a O notace (přiště v tom ještě budeme pokračovat).
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í, 6. 10.
Úvodní informace
Úlohy z algoritmizace
První domácí úkol – Kabel na mrakodrap
[slidy]
Ú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 29. 2.
Algoritmizace
- 70 % bodů z domácích úkolů – zadávané zhruba každé dva týdny (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í)
- 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ář
(/teaching/nprg030/2024-winter/student-LOGIN_DO_SISU
), 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.
Program odevzdejte ideálně do konce zkouškového, nejpozději však do 29. 2. Doporučuji ale odevzdat ho do konce zkouškového, během výuky v letním semestru už budete mít jiné starosti.
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 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:
- 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, momentálně bohužel z důvodu rekonstrukce laboratoře nefunkční, 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ísto XX
zadejte
čí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ísto XX
zadejte
číslo z rozsahu 1–29, např. u-pl21.ms.mff.cuni.cz
- jméno a heslo – jako do SISu