Programování 1 pro matematiky

Ve školním roce 2020/2021 vedu cvičení z předmětu Programování 1 [NMIN111], což je základní kurs programování pro studenty matematiky. Cvičení se koná každé úterý od 12:20 online po Zoomu; identifikátor schůzky a heslo vám měly přijít e-mailem. Každé cvičení začíná výkladem: slidy, příklady programů i videozáznam se objevují na těchto stránkách.

Zápočet se udílí za získání alespoň 70 bodů za domácí úkoly. Úkoly se odevzdávají v ReCodExu.

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+p1m@kam.mff.cuni.cz, případně si můžeme domluvit schůzku po Zoomu nebo osobní konzultaci. Také jsem k zastižení na Matrixu jako @mj:matrix.ucw.cz a na Telegramu jako @golluxino.

Co jsme dělali

datum téma
29. 9.
6. 10.
13. 10.
  • Výklad: Seznamy (videozáznam)
  • Výpis seznamu pozpátku
  • Fibonacciho čísla
  • Eratosthenovo síto
  • Další úkoly: Je dána posloupnost čísel...
    • zjistěte, jestli jsou všechna navzájem různá.
    • najděte dvojici s co nejmenším rozdílem.
    • vypište všechna opakující se čísla (ale každé jen jednou).
    • Umíte předchozí úkoly vyřešit efektivněji, pokud víte, ze všechna zadaná čísla leží od 1 do 100?
20. 10.
27. 10.
  • Výklad: Funkce (videozáznam)
  • Napište funkci, která:
    • vrátí nejmenší ze tří čísel: řešení
    • vrátí n-té Fibonacciho číslo: řešení
    • spočítá, kolik je v seznamu sudých čísel: řešení
    • vybere ze seznamu sudá čísla (a vrátí jejich seznam): řešení
    • dostane dva seřazené seznamy čísel a vrátí jejich průnik: řešení
    • dostane koeficienty kvadratické rovnice ax2 + bx + c = 0 a vrátí seznam jejích kořenů: řešení
3. 11.
  • Výklad: Seznamy, řezy a řetězce (videozáznam)
  • Napište funkci, která:
    • otočí řetězec (datelletad)
    • otočí číslo v desítkové soustavě (10244201; může se hodit, že int(x) převádí z řetězce na číslo a str(x) opačně)
    • spočítá, kolik zadaný řetězec obsahuje slov (oddělených mezerami)
    • … kolik různých slov
    • vyhodnotí výraz se sčítáním (12+34+147)
    • vyjádří číslo česky (123"sto dvacet tři"): řešení
  • Řešení příkladů
10. 11.
  • Výklad: List comprehensions (videozáznam)
  • Napište funkci, která:
    • vytvoří tabulku násobilky (a×b pro všechna a, b od 1 do daného čísla)
    • zjistí průnik dvou (neuspořádaných) seznamů
    • vybere z textu slova, která jsou palindromická (čtou se stejně popředu jako pozpátku)
    • spočítá skalární součin dvou vektorů
    • vynásobí dvě matice (ne nutně čtvercové)
    • seřadí slova na řádku podle jejich délky (nápověda: nejprve slova převést na dvojice (délka, slovo), ty pak setřídit a nakonec z dvojic zase udělat slova)
  • Řešení příkladů
17. 11. Cvičení se nekoná.
24. 11.
  • Výklad: Množiny a slovníky (videozáznam)
  • Příklady: robůtek, kontakty
  • Napište funkci, která:
    • Vrátí True nebo False podle toho, zda jsou dané dva seznamy stejné až na pořadí prvků. Co když se mohou prvky v seznamech opakovat?
    • Vrátí True nebo False podle toho, zda jsou všechny prvky daného seznamu navzájem různé.
    • Řešení
  • Spočítejte frekvence všech k-gramů (k-tic znaků) v textu. K-gramy vypište uspořádaně podle frekvence (řešení, jiné řešení). Můžete vyzkoušet třeba na originálu Psa baskervillského z Projektu Gutenberg. Řádky souboru můžete načítat pomocí for řádek in open('soubor', encoding='utf-8').
  • Aplikace k-gramů:
    • Pro každý k-gram zjistěte, jaká všechna písmena po něm mohou následovat. Pokud jedno písmeno opakuje, uložte ho vícekrát.
    • Předchozí tabulku využijte k náhodnému generování textu. První k-gram zvolte náhodně a pak opakovaně vybírejte náhodné následující písmeno. Pro náhodný výběr ze seznamu se může hodit random.choose(seznam) (nezapomeňte na import random).
    • Řešení.

Odkazy

Stránku spravuje Martin Mareš