Programování 1 pro matematiky

Ve školním roce 2024/2025 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 v N11.

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 konzultaci. Také jsem k zastižení na Matrixu jako @mj:matrix.ucw.cz a na Telegramu jako @golluxino.

Zápočet se uděluje za domácí úkoly odevzdávané v ReCodExu. Úkoly se testují automaticky, cvičící pak může body korigovat (odměnit zvláště elegantní řešení, penalizovat nefunkční řešení, které náhodou prošlo testy apod.). Na zápočet je potřeba získat aspoň 70 bodů. Úkoly budou vypsané za alespoň 100 bodů. Ve výjimečných případech (např. dlohodobá nemoc) se lze domluvit na individuálních podmínkách.

Co jsme dělali

datum téma
1. 10.
8. 10.
15. 10.
22. 10.
29. 10.
  • Výklad: Funkce
  • 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í
5. 11. Necvičíme, protože cvičíme: Děkanský sportovní den
12. 11.
  • Výklad: Seznamy, řezy a řetězce
  • 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ů
19. 11.
  • Výklad: List comprehensions
  • 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ů
26. 11. Plán:
  • Výklad: Množiny a slovníky
  • 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é.
  • Spočítejte frekvence všech k-gramů (k-tic znaků) v textu. K-gramy vypište uspořádaně podle frekvence. 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).

Odkazy

Stránku spravuje Martin Mareš