Výuka

V letním semestru 2024/25 vyučuji tyto předměty:


Programování 2 pro matematiky (NMIN112)

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

Zápočet není vstupní podmínkou ke zkoušce.

Programovací úlohy

Pro získání zápočtu je potřeba mít na konci semestru alespoň 70% z celkového počtu vypsaných bodů za praktické úlohy (bonusové úlohy se do celkového počtu nepočítají, můžete si jimi tedy přilepšit).

Autor řešení musí být schopen na cvičení vysvětlit svůj program.

Úkoly se budou odevzdávat pomocí systému ReCodEx https://recodex.mff.cuni.cz/

Všechny úlohy jsou samostatná práce! Můžete se samozřejmě o úlohách bavit mezi sebou, ale řešení musí vypracovat každý sám.

Písemné (teoretické) úlohy

Pro získání zápočtu je potřeba mít na konci semestru alespoň 70% z celkového počtu vypsaných bodů za teoretické úlohy (bonusové úlohy se do celkového počtu nepočítají).

Domácí úkoly psané "na papír" spočívají většinou v návrhu a slovním popisu efektivního algoritmu.

Úkoly se budou odevzdávat pomocí systému Postal Owl https://kam.mff.cuni.cz/owl/

Praktický zápočtový test u počítačů

Bude se jednat o úlohu zadanou v ReCodExu v podobném rozsahu jako úlohy zadávané v průběhu semestru. Pro úspěšné složení testu bude potřeba získat v ReCodExu plný počet bodů. Test se bude psát na školních počítačích.

Zápočtový program

Zápočtový program je rozsáhlejší než běžné úlohy v ReCodExu. Jeho účelem je, abyste si vyzkoušeli samostatně navrhnout a vytvořit větší program včetně načítání vstupů od uživatele, ošetření jejich korektnosti, odladění, napsání dokumentace. Téma pro svůj program si vybíráte sami (já ho musím schválit).

Postup, jak vypracovat zápočtový program:

  • vybrat si téma a domluvit se na něm se mnou (do 15. dubna)
  • poslat krátkou specifikaci (do 30. dubna)
  • napsat samotný program
  • napsat dokumentaci k programu - uživatelskou a programátorskou
  • program odprezentovat

O dokumentaci podle Martina Mareše:

Uživatelská dokumentace. To je stručný popis toho, jak se program používá (tedy třeba v jakém formátu se mu zadává vstup a v jakém vydá výstup). Nepište od ní evidentní věci, spíš to, co by bězný uživatel nečekal. Také by tam mělo být řečeno, co vlastně program dělá :)

Programátorská dokumentace. V ní je stručně popsáno, jak program funguje uvnitř. Nemusíte komentovat každý řádek programu, spíš popište celkovou koncepci. Pokud používáte nějaké netriviální algoritmy, je to dobré zmínit. Pokud používáte něco, co jste nevymysleli sami, je na místě citovat zdroje.

Text o dokumentaci k (nejen) zápočtovému programu od doktora Kryla: Jak psát dokumentaci zápočtového programu

Co jsme dělali na cvičení:

1. CVIČENÍ - teoretické:

pro nemoc zrušeno

1. CVIČENÍ - praktické:

pro nemoc zrušeno

2. CVIČENÍ - teoretické:

Složitost

  • jednoduché algoritmy a jejich složitost
  • definice O
  • dokazování jednoduchých tvrzení

2. CVIČENÍ - praktické:

Opakování ze zimního semestru:
  • instalace Pythonu, IDLE, Python jako kalkulačka
  • proměnné a výrazy, operace s čísly, relace a logické spojky
  • struktura programu – příkazy input a print, indentace, komentáře
  • příkaz if (zanořování, elif, else)
  • cyklus while (včetně else)
  • základní použití podmínek a cyklů - ciferný součet, Euklidův algoritmus, test prvočíselnosti
  • zpracování posloupnosti dat, seznamy a operace s nimi, indexování, řezy
  • generátorová notace seznamů (list comprehension)
  • funkce - parametry, return, lokalita a viditelnost proměnných
  • znakové řetězce
  • formátovaný výstup (znakové řetězce typu f“xxx{y}xxx“)
  • N-tice (tuples)
  • množiny a slovníky
  • textové soubory
  • standardní knihovna – základní přehled (math, copy, array, fractions, decimal, time, random, ...)
  • výjimky - try-except-finally, raise, assert
  • základní informace o třídách a objektech v Pythonu.

3. CVIČENÍ - teoretické:

Ještě složitost

další jednoduché algoritmy a jejich časová a prostorová složitost

  • "online" algoritmy (prostorová složitost O(1))
  • předzpracování - seřazení posloupnosti, inverzní pole
  • "čas za paměť"

3. CVIČENÍ - praktické:

objekty a moduly

  • atributy, metody
  • vytvoření vlastní třídy
  • vytvoření vlastního modulu
Pokud nemáte přístup ke zdrojovým kódům z hodiny, napište mi e-mail.

4. CVIČENÍ - teoretické:

třídící algoritmy a binární vyhledávání

  • opakování algoritmů z přednášky

4. CVIČENÍ - praktické:

ještě objekty

  • magic methods
  • dědičnost
Pokud nemáte přístup ke zdrojovým kódům z hodiny, napište mi e-mail.

5. CVIČENÍ - teoretické:

abstraktní datové typy - halda, zásobník a fronta

  • Příklady zásobník, fronta
  • správné uzávorkování - jeden typ závorek, více typů závorek
  • Halda - operace (insert, extract_min), heapsort

5. CVIČENÍ - praktické:

funkční dekompozice, modul turtle

  • práce s moduly (česká želva)
  • ještě dědičnost (tlustá oranžová želva)
  • funkční dekompozice - návrh hry Hangman

6. CVIČENÍ - teoretické:

lineární spojové seznamy - základní operace:

  • určit počet prvků
  • vypsat všechny hodnoty
  • vyhledání prvku s danou hodnotou
  • přidání prvku na začátek, na konec seznamu
  • vytvoření kopie seznamu

Multi-agentní systémy

Cvičení k přednášce Romana Nerudy.

Druhou paralelku cvičení ve čtvrtek vede Martin Pilát.

Požadavky na zápočet

Během semestru dostanete pět domácích úkolů, jak teoretičtějších, tak praktických (vytvoření agenta/týmu agentů do nějaké soutěže). Především ty praktické bude často možné řešit v týmech 3-4 studentů.

Za každý úkol bude možné získat až 10 bodů. Zápočet dostanete za získání alespoň 60 % možných bodů, tj. 30 bodů.

1. CVIČENÍ (17.2.2025):

pro nemoc zrušeno

2. CVIČENÍ (24.2.2025):

hra XY

3. CVIČENÍ (3.3.2025):

vězňovo dilema - první úkol

text ze stránek Martina Piláta, zdrojové kódy, web pro upload strategie

Deadline úkolu je nedělní půlnoc, tedy 9.3.2025 23:59

4. CVIČENÍ (10.3.2025):

simulace života strategií

text ze stránek Martina Piláta

zdrojové kódy jsou stejné jako minule, pokud jste nebyli na cvičení, napište mi o strategie vašich spolužáků, abyste měli s čím experimentovat

žádný bodovaný domácí úkol z tohoto cvičení není

4. CVIČENÍ (17.3.2025):

AgentSpeak

text ze stránek Martina Piláta

AgentSpeak - slidy

žádný bodovaný domácí úkol z tohoto cvičení není

6. CVIČENÍ (24.3.2025):

AgentSpeak - druhý úkol

text ze stránek Martina Piláta

Zadání úkolu je v textu na stránkách Martina Piláta.

Řešení mi pošlete (jen jeden člen týmu) zazipované e-mailem. Připište, kdo všechno je členem týmu. Nezapomeňte prefixovat soubory, které oproti příkladu z Jasonu změníte, názvem týmu.

Deadline úkolu je nedělní půlnoc za dva týdny, tedy 6.4.2025 23:59


Webové technologie (DVPP)

Kurz v rámci celoživotního vzdělávání.

Odkaz na stránky kurzu: Webové technologie.