Programování 2 pro matematiky
Ve školním roce 2024/2025 vedeme společně s Pavlem Töpferem cvičení
z matematického Programování 2. Cvičení má dvě části: praktickou
ve středu od 10:40 v N11 (tu vedu já) a teoretickou
v úterý od 17:20 v N11 (vede Pavel).
Budu rád, když se mi budete ozývat. Když vám cokoliv nepůjde, nestyďte se říci si o radu.
Když vám něco půjde, nestyďte se pochlubit se :) Napište mi mail na mares+p2m@kam.mff.cuni.cz,
případně si můžeme domluvit konzultaci. Také jsem k zastižení na Matrixu
jako @mj:matrix.ucw.cz a na Telegramu
jako @golluxino.
K získání zápočtu je potřeba:
- Získat alespoň 70 bodů za domácí úkoly (odevzdávají se v ReCodExu).
Úkoly budou vypsané za 100 bodů, mohou přibýt nějaké bonusové.
- Splnit zápočtový test (naprogramovat na posledním cvičení jednu úlohu podobnou domácím úkolům;
pokud se vám to nepovede, budou opravné termíny).
- Odevzdat zápočtový program s dokumentací. Specifikaci zápočťáku je potřeba odevzdat do konce dubna.
- Splnit podmínky teoretické části cvičení.
Co jsme dělali
datum
| téma
|
---|
19. 2. |
Základní aritmetické algoritmy pracující po číslicích (vzpomínka na základní školu):
- Součet, rozdíl a součin (program)
- Porovnáváni (větší/menší/rovno)
- Dělení (jednodušší: dělíme malým číslem)
- Výpočet Eulerova čísla: Σn≥0 1/n!.
|
26. 2. |
Co se nestihlo v Programování 1:
- Výklad: Třídy a objekty
- Příklad definice třídy. Dodělejte do něj:
- Naučte každé zvíře slyšet navíc na jméno potvůrka.
- Doplňte atribut pozice a zařiďte, aby zvíře slyšelo na jméno
jenom tehdy, když pozice je doma.
- Vytvořte odvozenou třídu Pes, jehož metoda ozvi_se
na každé druhé zavolání zaštěká a jinak zavrčí.
|
5. 3. |
- Opakování z Programování 1: Výjimky.
- Pokračování tříd a objektů z minula.
- Nadefinujte třídu Rect reprezentující obdélníky v rovině (viz domácí úkol).
- Nadefinujte třídu RoundRect odvozenou od Rect pro obdélníky
se zakulacenými rohy (s jednotkovým poloměrem; předpokládejme že délky všech stran
jsou alespoň 2). Předefinujte metody, aby dávaly smysl.
- Naučte metodu __eq__, aby vracela False, pokud porovnává s něčím,
co není Rect, případně RoundRect. Může se hodit isinstance.
- Nadefinujte třídu Zlomek pro zlomky:
- Třída má atributy
a a b pro čitatele a jmenovatele.
- Přidejte metody
__str__ a __repr__ pro převod na řetězec.
- Přidejte metody pro aritmetické operátory:
__add__ ,
__sub__ ,
__mul__ ,
__truediv__ (operátor / ),
__neg__ (unární - ),
__pos__ (unární + ).
- Přidejte metody pro porovnávání:
__eq__ (operátor == ),
__lt__ (operátor < ),
__gt__ (operátor > ).
Pozor na to, že 3/4 se mají rovnat i -6/-8.
- Při pokusu o vytvoření zlomku s nulovým jmenovatelem nebo dělení nulou
vyhlašte výjimku:
raise ValueError("Nějaká zpráva") .
- Při vytvoření zlomku a po každé operaci zlomek zkraťte a normalizujte,
aby byl jmenovatel kladný.
- Aritmetika by mohla umět zlomek
+ int.
- Co případy int
+ zlomek? Tady se hodí reverzní
metody __radd__ apod., viz dokumentace.
|
12. 3. |
- Vývojové prostředí PyCharm, ladění programů.
- Typová kontrola:
|
18. 3. |
Plán:
- Slidy: NumPy
- Instalace NumPy pod Windows:
- Vlezte si do adresáře, kde máte nainstalovaný Python (typicky to bývá něco jako
C:\Users\Jméno\AppData\Local\Programs\Python\Python37-32 ; kdybyste ho
nemohli najít, hledejte, kde na disku máte python.exe ).
- Spusťte
python -m pip install numpy .
- Dokumentace k NumPy:
- Úkoly (snažte se používat jenom operace s poli, žádné cykly):
- Vyrobte matici tvaru R×S vyplněnou číslem X.
- Vyrobte matici tvaru R×S, která má na okrajích jedničky a jinde nuly.
- Vyrobte matici tvaru R×S, která bude mít v i-tém řádku samá čísla i.
- Spočítejte determinant 10 matic 10×10 vyplněných náhodnými čísly mezi -1 a 1 (viz
np.linalg.det )
- Uvažujme „průměrovací Fibonacciho čísla“ definovaná rekurentním vztahem
xi = (xi-1 + xi-2) / 2. Víme-li, že
x8=426 a x9=427, kolik je x0 a x1?
Vyřešte soustavu lineárních rovnic pomocí
np.linalg.solve .
Pro výrobu matic s jedničkami na posunuté diagonále se hodí np.eye .
- Pokusy s dělitelností:
- Vyrobte booleovskou matici, která má na pozici (i,j) True právě tehdy, je-li i dělitelné j.
- Vyrobte vektor, který pro každé číslo od 1 do N uvádí počet jeho dělitelů.
- Vyrobte vektor všech prvočísel mezi 1 a N.
|
26. 3. |
Cvičení se nekoná.
|
Odkazy