SIS code: 
Semester: 
zimní
E-credits: 
5
Examination: 
Z
Instructor: 

 

Programování 1 (kruh 32)

Jak se připojit na Zoom

  • ideálně kliknutím na následující odkaz: https://cesnet.zoom.us/j/99956265162
  • je možné se účastnit přes webový prohlížeč, ale lepší je nainstalovat si aplikaci
  • také je možné se (bez videa) připojit po telefonu vytočením jednoho z následujících čísel:
    • +420228882388,,99956265162#
    • +420239018272,,99956265162#
  • meeting ID je 999 5626 5162
  • bude-li po vás Zoom chtít heslo, pak vězte, že heslo je 1921 (aneb rok premiéry divadelní hry R.U.R.)

Konzultace

  • cvičení budou doplňovat interaktivní konzultace
  • konzultace je pro vás, je to ideální příležitost, když s něčím potřebujete poradit nebo pomoct, například:
    • napsal jsem tenhle kus kódu a nefunguje to, proč?
    • něčemu jsem na cvičení nerozuměl a chtěl bych to vysvětlit znova a lépe
    • mám dotaz k něčemu ze cvičení nebo z přednášky
    • mám dotaz k něčemu co nebylo na cvičení ani přednášce
    • nerozumím zadání domácího úkolu
    • rozumím zadání domácího úkolu, ale potřebuju poradit, jak ho řešit
    • mám nějakou nejasnost/otázku/problém týkající se mého studia (ne nutně předmětu Programování 1)
    • atd.
  • jednak budu vyhlašovat hromadné konzultace, které se můžete účastnit všichni
  • jednak si budeme dle potřeby domlouvat soukromé konzultace
    • napište mi mail, pokud se chcete domluvit na konzultaci
    • některým z vás občas nabídnu konzultace i sám, třeba když si všimnu, že zjevně máte nějaké problémy -- ale raději se ozvěte sami, ne vždy si ne všeho všimnu

Cvičení 2020/2021


29.9.

  • Hello world
  • programování v Pythonu přímo v prohlížeči snadno a rychle
  • pár jednoduchých věcí na úvod
    • 5+6
    • 3*7
    • 8-2
    • 1/3
    • 5*"ptakopysk"
    • "ptakopysk" + "podivný"
    • a=5
    • b=6
    • a+b
    • zvire="ptakopysk"
    • zvire=input()
  • vzájemné seznámení
  • Visual Studio Code: https://code.visualstudio.com/
  • podmínky na zápočet: domácí úkoly, závěrečný test, zápočtový program
  • konzultace
  • komunikační kanály
  • Recodex

6.10.

  • na přednášce bylo: print, input, int, float, if-elif-else, while; operace s čísly; krokování
  • umocňovadlo: zeptá se uživatele na (celé) číslo, vypíše jeho druhou mocninu
    • úprava: pro kladné číslo vypíše jeho druhou mocninu, pro záporné číslo vypíše jeho třetí mocninu
  • jiný program: uživatele se na nic neptá, vypíše druhé mocniny čísel od 1 do 20
  • Collatz conjecture
  • hra: počítač si myslí číslo, uživatel ho hádá
    • import random
    • cislo = random.randint(0, 20)
    • uživatel hádá, dokud se netrefí, jinak program řekne, jestli to bylo moc nebo málo
  • moje zdrojáky ze cvičení

13.10.

  • znovu a pořádně: while, if, proměnné
    • přiřazení do proměnné
      • KAM = CO
      • a = 5
      • b = 10
      • a = b
    • if podmínka:
      • if a > 5, if a == 5, if a != 5
      • totéž i se stringy
      • kód se provede (1x), pokud podmínka platí
    • while podmínka:
      • while a > 5, while a != 5 ...
      • kód se opakovaně provádí, pokud podmínka platí (klidně 0x, klidně ∞x)
      • tj. cyklus skončí, jakmile podmínka přestane platit
      • tj. "skonči až a bude rovno -1" znamená "prováděj dokud a není rovno -1"
  • cvičení s cykly: inventura v zoo
    • každý řádek vstupu (každý input() ) je zvíře, např::
      • tygr
      • lev
      • luskoun
      • lenochod
      • tygr
      • lev
      • orangutan
      • bobr
      • tygr
      • kanec
      • ptakopysk
      • konec
    • vstup končí slovem "konec"
    • postupně několik úloh (všichni by měli zvládnout aspoň úlohy 1-6, podle času i víc až všechny)
      1. Čtěte vstup, pro každé zvíře vypište "V zoo je zvíře"
        • tj. například pokud je na vstupu ondatra, vypište "V zoo je ondatra"
      2. Je v zoo tygr?
      3. Kolik je v zoo kusů zvířat?
      4. Kolik je v zoo tygrů?
      5. Kolik je v zoo tygrů a kolik lvů?
      6. Porovnávání zvířat trapně
        • Vždy po dvě po sobě jdoucí zvířata A B vypište "A je lepší než B"
        • např. "orangutan je lepší než bobr"
        • tj. musíte si vždy pamatovat, které zvíře máte teď i které zvíře jste měli minule (a to co máte teď se stane pro další otočku cyklu zvířetem minulým)
        • a taky pro první zvíře ještě nemůžete nic říct, nejdřív musíte načíst dvě zvířata...
        • Tip: vyřešení této úložky vám pomůže při řešení domácího úkolu.
      7. Jak je dlouhý tygr? Tygr je dlouhý 4. A ptakopysk je dlouhý 9.
        • len("ptakopysk")
        • Vypište postupně každé zvíře v zoo a jeho délku.
      8. Jaká je celková délka všech zvířat v zoo?
      9. Jak dlouhé je nejdelší zvíře?
      10. A které to je?
      11. Porovnávání zvířat podle délek
        • Pro každá dvě po sobě jdoucí zvířata vypište, které je delší než které:
        • lev je kratší než oragnutan
        • orangutan je delší než bobr
        • bobr je stejně dlouhý jako tygr
  • pozor na Recodex, je přísný!
  • na přednášce bylo:
    • string, slices, list, in, .count(), for, range
    • print(a, b, c, sep='_', end=' ')
    • tohle jsme na cvičení moc nestihli, pověnujeme se tomu pořádně příště

20.10.

  • pořádně to co se minule nestihlo: string, list, for, range
  • moje zdrojáky ze cvičení
  • inventura v zoo pomocí listu a for-cyklu, další úlohy (měli byste stihnout aspoň 1-11)
    To jsme minule moc nestihli takže se na to koukneme pořádně až teď.
    1. Vytvořte si seznam zvířat v zoo jako list (s opakováním, některé zvíře může být víckrát).
    2. Vypište všechna zvířata.
    3. Kolik je v zoo tygrů?
    4. Vypište třetí zvíře.
    5. Vypište předposlední zvíře.
    6. Vypište prvních 10 zvířat.
    7. Vypište posledních 5 zvířat.
    8. Vypište každé druhé zvíře.
    9. Vypište všechna zvířata začínající na L.
    10. Vytvořte seznam všech zvířat začínajících na L (a nějak ho vypište).
      • Do seznamu se přídává pomocí seznam.append(zvire)
    11. Počet po sobě jdoucích zvířat od L.
      • Nechť občas po sobě následuje několik zvířat, která všechna začínají na L.
      • Meziúloha: pro každou sekvenci po sobě jdoucích zvířat od L vypište její délku.
      • Úloha: jaký je maximální počet po sobě jdoucích zvířat od L?
      • Aneb jaká je maximální délka souvislé posloupnosti zvířat začínajících na L?
      • Návodné myšlenky:
        • pokud jsem teprve začal, tak dosavadní maximální délka je 0
        • pokud aktuální zvíře nezačíná na L, tak aktuální délka posloupnosti zvířat na L je 0
        • pokud aktuální zvíře začíná na L, tak aktuální délka posloupnosti zvířat na L je o 1 vyšší než byla v předchozím kroku
        • je aktuální délka posloupnosti zvířat na L vyšší než dosavadní maximum?
        • v této úloze není nutné si pamatovat tu samotnou posloupnost zvířat, stačí si pamatovat její délku
      • Tip: vyřešení této úložky vám pomůže při řešení domácího úkolu.
    12. Vypište zvířata v maximální souvislé posloupnosti zvířat na L.
    13. Maximální počet po sobě jdoucích zvířat začínajících stejným písmenem.
    14. Vypište postupně všechna zvířata začínající na jednotlivá písmena slova dikobraz
      • ​​Pro procházení všech písmen slova můžete slovo nejdřív převést na seznam list("dikobraz")
      • Ale ani to není nutné, přes string jde i přímo iterovat for cyklem, takže stačí přímo použít
        • for pismeno in "dikobraz":
    15. Vypište nejdřív všechna zvířata začínající na a, pak všechna začínající na b, a tak dále, až po všechna začínající na z
    16. Z důvodu koronaviru Pražská zoo zkrachovala a všechna zvířata se přesunou do Plzeňské zoo.
      • Udělejte si dva seznamy zvířat, jeden pro Prahu a jeden pro Plzeň.
      • Spojte seznamy dohromady.
    17. Vzniká nová zoo na Kladně!
      • Vezměte zase seznam zvířat v Plzni a v Praze.
      • Na Kladno půjde první třetina zvířat z Prahy a poslední třetina zvířat z Plzně.
      • Délku seznamu zjistíte len(seznam)
    18. Křížení zvířat
      • Zkřižte zvířata, která jsou vedle sebe
      • Dvě zvířata zkřížíte tak, že vezmete první půlku prvního zvířete a druhou půlku druhého zvířete
      • Např. ovce+tygr = ovgr, kapybara+velbloud = kapyloud...
    19. Obrácená úloha: pro křížence najděte jeho rodiče

  • 27.10.
  • 3.11.
  • 10.11.
  • svátek 17.11. se neučí
  • 24.11.
  • 1.12.
  • 15.12.
  • 22.12.
  • 5.1.

Pokyny

  • doporučený editor: Visual Studio Code (ale používejte cokoliv chcete)
  • účast je nepovinná (ale doporučená) -- pokud zvládnete snadno dělat domácí úkoly i bez účasti na cvičení, asi Vaše účast na cvičení není nutná
  • můžete používat i vlastní notebook

Požadavky na zápočet

  • domácí úkoly: aspoň 80% bodů
  • zápočtový test: aspoň 80% bodů
    • na konci semestru nebo na začátku zkouškového období
    • 75 minut, v Recodexu
    • pokud bude prezenční výuka, pak bude test na počítači v učebně, pokud ne, tak budeme na Zoomu
    • rozsah obdobný domácímu úkolu
    • 2 opravné pokusy
  • zápočtový program
    • zadání dohodnout do 15.12.
    • odevzdání doporučeno do konce zimního zkouškového, maximálně do konce března
    • nutnost osobního předvedení (fyzicky nebo přes Zoom)

Domácí úkoly

Zápočtové programy

  • Téma je nutné se mnou předem dohodnout
    • do 15.12. v SISu navrhněte téma (klidně i dřív)
      • modul Studijní mezivýsledky
      • pole "zápočťák stručně": popište, co chcete dělat (max. 50 znaků)
      • pole "zápočťák podrobně": podrobně popište, co chcete dělat (3 až 10 vět)
    • jakmile tam něco vyplníte, SIS mi pošle mail a já na to v dohledné době kouknu
      • pokud mi zadání bude připadat dobré, tak ho rovnou v SISu schválím (pokud to máte povolené, SIS vám o tom pošle mail)
      • pokud mi zadání nebude připadat dobré, napíšu vám mail a doladíme to
    • téma si pokud možno vymyslete sami
      • to co si vymyslíte sami se vám nejlíp bude líp dělat a bude vás to víc bavit
      • pokud máte vágní nápad ale nevíte jak z toho udělat splnitelné zadání, popište mi to do mailu a já něco navrhnu
    • Holan má na webu hezky zpracované návrhy na témata
    • moje nehezky zpracované návrhy
  • Na zápočťáku začněte ve vlastní zájmu dělat co nejdříve
    • zkušenost ukazuje, že když si myslíte, že to budete mít za týden, bude to trvat spíš asi tak měsíc
    • je matfyzáckým zvykem na zápoč'ťáku dělat přes Vánoční prázdniny; ale během zkouškového na to taky asi budete mít nějaký čas
  • Zápočťák vypracujte do konce března
    • ale pokud chcete zápočet z Programování do konce února (pro účely kontroly studijních povinností), vypracujte ho nejpozději do konce zkouškového (tj. do 16.2.)
    • pokud zdrojáky zabalené v ZIPu projdou omezením na velikost v SISu, nahrajte je přímo do SISu ("zápočťák: kód (ZIP archiv)"); jinak zašlete e-mailem
  • Součástí zápočťáku je také dokumentace
    • ve zdrojových kódech používejte komentáře vysvětlující co která část kódu dělá
    • pokud to dává smysl, přiložte i testovací vstupní data
    • v SISu vyplňte položku "zápočťák: dokumentace"
      • můžete dokumentaci buď vepsat přímo v SISu ("zápočťák: dokumentace (text)")
      • anebo nahrát do SISu jako soubor ("zápočťák: dokumentace (soubor)")
    • dokumentace by měla obsahovat
      • popis řešené úlohy
      • popis vstupů, výstupů, ovládání
      • popis principu řešení
      • popis použitých datových struktur a algoritmů
      • Vaše vlastní zhodnocení kvality Vašeho řešení (pokuste se být upřímní)
    • dokumentace nemusí být zbytečně detailní
      • výše vidíte 5 bodů, co by dokumentace měla obsahovat, často tedy stačí dokumentace o 5 větách
      • dokumentace by měla zachycovat vše co je důležité či zajímavé (na co jste třeba hrdí)
      • dokumentace by se měla držet na vyšší úrovní abstrakce (popisovat některé důležité objekty a třídy užívané v programu je rozumné, popisovat každou jednotlivou proměnnou rozumné není)
    • nějaké tipy jak psát dokumentaci: https://ksvi.mff.cuni.cz/~kryl/dokumentace.htm
  • Až budete mít zápočťák hotový, napište mi mail a domluvíme se na termínu osobního předvedení
    • sejdeme se v labu
    • vy mi program předvedete
    • já si ho taky vyzkouším
    • podívám se na zdrojový kód
    • pokud budu spokojen, máte tímto zápočťák splněn
    • pokud ne, dám vám program dopracovat

Nahrávání cvičení

  • aby se vám snáze studovalo, fakulta rozhodla, že budete mít k dispozici nahrávky ze cvičení
  • ale z důvodu GDPR vás nesmíme bez vašeho souhlasu nahrávat
  • proto je aktuální plán, že bude Tomáš Holan nahrávat jedno "falešné" cvičení bez studentů a tyto nahrávky budete mít k dispozici
  • nicméně na každém cvičení se cvičí trochu jiné věci a dělají se jiné úlohy, takže uvidíme jak moc to bude fungovat
  • pokud se domluvíme, že budeme nahrávat naše cvičení, tak je to možné, ale museli by s tím všichni souhlasit...
  • když už, tak bych spíš nahrával jen to co říkám já a jen to bych zveřejnil

Další informace

  • kromě domácích úloh vřele doporučuji následující sbírku zejména jednodušších programovacích úloh: https://codingbat.com/python
    • podobně jako v Recodexu je kód automaticky vyhodnocen
    • narozdíl od Recodexu i vidíte správné i chybné vstupy i výstupy