do programovaní a algoritmizace / Uvod kurzu Radek Pelánek 2022 Dnešní prednáška • o předmětu • organizace, ukončení • pojmy - algoritmus, programování • motivace, širší kontext • představení Pythonu, rychlé demo více o samotném programování až příště Cíle predmetu „dobré základy" • zvládnutí základních programátorských konstrukcí (proměnné, funkce, if, for, while, ...) • obecné principy použitelné v radě programovacích jazyků • programátorský styl • úvod do programátorského a algoritmického stylu myšlení + základní povědomí o pokročilých prvcích, záludnostech, ... movací jazyk Python „Uvod do programování" nikoliv „Programování v Pythonu" • Python je používán pro ilustraci pojmů a příkladů, na cvičeních o důraz na obecné koncepty, cílem není detailní zvládnutí Pythonu • záměrně neprobíráme specifika Pythonu • zvládnutí konkrétního jazyka - trénink a praxe Programátorská kultura Programy by měly být nejen korektní, ale i „pěkné". 4 □ ► 4 [3P ► < Programátorská kultura Programy by měly být nejen korektní, ale i „pěkné" • názvy proměnných, funkcí • rozdělení funkcionality do funkcí • nepoužívání „copy&paste" kódu • zarovnání řádku • dokumentace, komentáře Co čekat: príklady • výpočty: faktoriál, prvočísla, odmocnina, náhodná čísla • obrázky: želví grafika, „textová grafika", bitmapy o jednoduché hry: hádání čísla, variace na piškvorky • zpracování dat: statistiky dat ze souboru Pro textový soubor najít 20 nejčastějších slov a vypsat je v pořadí podle frekvence. 1 i' 1 3 3 1 XX x4 10 10 5 < □ ► < r3? ► < -E ► < -E ► -E O Q, O Forma predmetu • 2h přednáška, nepovinná, ale velmi doporučená • hodně „příkladový styl" • KvIS: opakování, kontrola porozumění, záludnosti • slidy nemusí být pochopitelné bez komentáře, obsahují i záměrné chyby (pro ilustraci) • dostupné nahrávky, ale plátno nepříliš čitelné • 2h cvičení, povinné • programování v jazyce Python o více skupin, cvičících • alespoň 1 hodina týdně průběžná práce Pozn. povinnost „být připraven na cvičení" Komunikace řešení problémů, nestandardní situace, dotazy: • cvičící spíše než přednášející • osobně (po cvičení, přednášce) spíše než elektronicky • diskuzní fórum spíše než mail Hodnocení predmetu 500 bodů • domácí úkoly: 200 bodů • 6 za semestr • bodování: 30, 30, 30, 30, 40, 40 • vnitrosemestrální zkouška u počítače: 100 bodů • programování v rámci jednoho cvičení • úkoly - variace na příklady ze cvičení • závěrečná písemná zkouška: 200 bodů • zkouší se principy, algoritmy, pojmy, „čtení kódu" • test s výběrem možností, podobné průběžným kviz • výjimečné bonusové body (kladné i záporné) Hodnocení predmetu minimum pro ukončení: • účast na cvičení (max. 2 neomluvené hodiny) • odevzdání všech 6 domácích úloh (alespoň 5 bodů za každou) • alespoň 120 bodů za domácí úlohy • alespoň 100 bodů ze závěrečné zkoušky • alespoň 270 bodů celkově známka: hranice rovnoměrně mezi 270 a 500 Domácí úkoly - organizace • skupiny: rámcově stejné zadání, odlišné detaily • přesné zadání, termín odevzdání - kompetence 4 □ ► 4 [3P ► < Opisování • pracujte samostatně • opisování se trestá velmi přísně (hodnocení F bez dalších diskuzí) • neřešíme moc, kdo opisoval - nesdílejte svoje řešení Priznaní asistence asistence s DU: • měla by být výjimečná • jasně přiznat v odevzdaných materiálech • celkové pojetí úlohy jsem konzultoval s XY • v této funkci jsem měl chybu a nebyl schopen jsem ji najít, použité řešení je od XY • tuto funkci jsem nezvládl napsal, použil jsem řešení ze stránky W Stránka predmetu https://www.fi.muni.cz/~xpelanek/IB113/ • harmonogram přednášek, cvičení, úkolů • rozepsané podmínky ukončení • výukové materiály • doplňující informace 4 □ ► 4 [3P ► < Studijní materiály v ISu Relevantní agendy z ISu pro tento předmět: • Učební materiály - slidy z přednášek • Organizační pokyny - archiv zaslaných mailů • Odevzdávárny - odevzdávání domácích úloh • Poznámkové bloky - počet bodů z úloh • Diskuse - nejasnosti, tipy na zajímavé zdroje, 4 □ ► 4 [3P ► Umíme programovat • https://www.umimeinformatiku.cz/ • neomezený přístup po přihlášení, viz instrukce v mailu • především průběžné, dobrovolné procvičování • konkrétní doporučení v průběhu semestru • 2. a 4. domácí úloha (cvičení Programování v Pythonu) Sbírka príkladu https://www.fi.muni.cz/~xpelanek/IB113/sbirka/ • interaktivní webová stránka • příklady ze cvičení • procvičení nad rámec cvičení původně určena pro paralelní předmět pro informatiky -obsahuje i těžší příklady nad rámec IB113 rané doplňkové zdroje - knihy • Python Programming: An Introduction to Computer Science, J. M. Zelle. • Introduction to Computing and Programming in Python A Multimedia Approach. M. Guzdial, B. Ericson. • Programátorská cvičebnice, R. Pelánek. • Jak to vyřešit, R. Pelánek. Vybrané doplnkové zdroje - web • Učíme se programovat v jazyce Python, http://howto.py.cz/index.htm • dokumentace k Pythonu • Coursera, Udacity kurzy • užitečné zdroje můžete sdílet v diskusním fóru predmetu základní počítačová gramotnost středoškolská matematika (např. faktoriál, prvočíslo, logaritmus) logické spojky (and, or, ...) angličtina (alespoň pasivně, základní porozumění) Motivační úloha • převozník, loďka uveze jen 1 další kus nákladu • náklad: vlk, koza, zelí ^ • bez dozoru: • vlk žere kozu • koza žere zelí • jak dostat vše bezpečně na druhou stranu Jak řešit úlohu algoritmicky? Co to znamená? https: //www.youtube.com/watch?v=wkSMJfngxyM • návod/postup, jak „mechanicky" vyřešit určitý úlohy/problému 9 příklady: 9 rozklad na součin prvočísel • nalezení nejkratší cesty mezi dvěma městy • vygenerovat zadání Sudoku 4 □ ► 4 [3P ► < Žádoucí vlastnosti algoritmu • má jasný vstup a výstup • obecný (nejen pro omezenou třídu instancí) • deterministický (vždy jednoznačné, jak postupovat) • konečný, efektivní za algoritmus můžeme považovat i recept, návod programování - zápis algoritmů pro počítače počítače jsou „hloupé" - zápis algoritmu musí být opravdu presný (srovnej „osolíme přiměřeně") nutnost vyjadřovat se přesně: 9 otrava - náročný zápis • bonus - nutnost myslet přesně Proč pořádně zvládnout základy programování • základ pro další studium • užitečnost • profesní • občasná • elegance, kreativita, „síla" movánŕ: způsoby využití (příklady, rozhodně ne kompletní klasifikace) • aplikace • programování pro web • vestavěné systémy • vědecké výpočty • skriptování každé důraz na něco jiného, sdílí ale základní principy „informatického myšlen ľ', námi probírané základní konstrukce jsou potřeba všude Aplikace • „samostatné" aplikace pro stolní počítače, mobilní zařízení • příklady: • kancelářský software • editace grafiky, zvuku, videa • hry • důraz na interakci s uživatelem • využití knihoven, práce s operačním systémem Programování pro web o příklady: • informační systémy • e-obchody • prezentace firmy o široká škála: • drobné úpravy existujících systémů (CMS) • vytváření vlastních rozsáhlých systémů • práce s databázemi, integrace různých prostředků (Python/PHP, JavaScript, CSS, HTML...) • důraz na soukromí - přístupová práva v IS, elektronické platby Vestavěné systémy a příklady: • kuchyňské spotřebiče, GPS, mobil, foťák • dopravní prostředky • zdravotnické přístroje • nízko-ú rovno ve programování, ovladače • úzké propojení s konkrétním hardwarem • bezpečnost, práce s limitovanými zdroji (paměť 4 □ ► 4 [3P ► < Vědecké výpočty • příklady: • simulace počasí, klimatu • bioinformatika (protein folding, analýza genomu, ...) • vymýšlení algoritmů (urychlení výpočtu, distribuované výpočty) • propojení informatiky a matematiky (příp. jiných disciplín) • zpracování rozsáhlých dat • uživatelské rozhraní a interaktivita jsou jen malá část 9 příklady: • převod dat mezi různými formáty • rychlá analýza dat • prototypy experimenty • drobné úpravy systému (např. správce • malý rozsah, specifický účel • často jednorázové aplikace • „programování pro běžný život" Programování v malém / ve velkém programování v malém • desítky až stovky řádků kódu • nezávislé na „ostatních" • tento předmět programování ve velkém • tisíce až milióny řádků • závislosti, souvislosti, návrh, testování, ... • další předměty (OOP, softwarové inženýrství, ) Programování v malém: motivace • nutná prerekvizita pro kvalitní programování ve velkém • trénink myšlení • prakticky užitečné, i když nejste programátor na plný úvazek raktické programování v malém: príklady • tvorba studijního katalogu • vytvoření interaktivní výukové úlohy pro webový systém • zpracování botanických dat • obrázky do knihy Hlavolamikon • vytváření šifer pro Tmou Pokud neovládáte X, pak vás často ani nenapadne, že by se vám X mohlo hodit. Obrázky do knihy "0102010902050302030703080401040304090507060606100701 3131313113:3131231213-;10" 9 A A 9 A 9 A A 9 A A 9 9 9 9 9 A A A 9 A A 9 9 9 A 9 A A A 9 9 A 9 9 A 9 9 A A 3 1 3 1 3 1 3 1 1 3 3 13 12 3 12 13 TMOU T Z lol Y r® r® 1 [S ľzl J B 1 J 0 6 5_ T C T u M Y M 0 s| |o 0 cvičeni rutinní činnost (na počítači) programátorské cvičení ejen užitečnost programování je zajímavé i samo o sobě • elegantní myšlenky • radost z objevování, experimentování • tvoření, kreativita • „síla" - pár stisků klávesnice a vytvoříte něco zajímavého Elegance Mandelbrotova množina, 25 řádků kódu Zkuste YouTube: Mandelbrot set movacŕ jazyky kompilovaný program zdrojový kód (program) překladač strojový kód vstupy bezici program výstupy interpretovaný program zdrojový kód (program) interpret výstupy vstupy movacŕ jazyky: klasifikace I nízko-úrovňové • kompilované • nutnost řešit specifika konkrétního systému • explicitní práce s pamětí • náročnější vývoj (nízká efektivita práce) • vysoká efektivita programu vysoko-úrovňové • interpretované • nezávislé na konkrétním systému • využití abstraktních datových typů • snadnější vývoj (vysoká efektivita práce) • nižší efektivita programu nikoliv dvě kategorie, ale plynulý přechod; zjednodušeno movacŕ jazyky: klasifikace II zjednodušená klasifikace a použití nízko-úrovňové C, FORTRAN, ... vestavěné systémy, rychlé výpočty objektové C++, Java, C#, ... klasické aplikace, rozsáhlé systémy skriptovací Python, PHP, JavaScript, Perl, ... programování pro web, skriptování, prototypy deklarativní Prolog, LISP, Haskell, ... umělá inteligence více na samostatné přednášce na konci semestru Python • vysoko-úrovňový - velká míra abstrakce, „spustitelný pseudokód" • interpretovaný - pomalejší než kompilovaný, ale větší volnost • pedagogický - byl tak navržen, dnes již dominantní výukový jazyk • moderní a široce používaný - patří mezi přibližně 5 nejpoužívanějších jazyků • volně a snadno dostupný na všech platformách • široká nabídka knihoven úvod jazyka a názvu autor: Guido van Rossum konec 80. let název podle: Monty Python's Flying Circus 4 □ ► 4 [3P ► < 9v / I LEARNED ITLAST NIGHTJ EVERYTHING IS SO Slt^PLEI1. HELLO WORLD print W\ot world!1' I (X)NNO— DYNAMIC TVPING j COTE JOIN U5i TOGRATTOG IS fun AGAIN 1 IT'S A WHOLE q new world UP HERE! BUTHOJARE YOU aviNG? / I JOSTTVPED fr^wrt [Wlgfavfiij THAT'S IT? / ... I ALSO SAMPLED EVERYTHING in the fHNClNE OTWET FOR C0nPARi50M- BUT I THINK THIS IS THE PYTHON. https://xkcd.com/353/ https://www.explainxkcd.com/wiki/index.php/353 on je pouzfvany So what are the Top Ten Languages of 2018, as ranked for the typical IEEE member and Spectrum reader? Language Rank Types Spectrum Ranking 1. Python 2. C++ 3, Java ® I :*: 4. C D^s 5. C# ©□^ 6. PHP GEES 7. R a. JavaScript 9, Go © ^ 10. Assembly * https://spectrum.ieee.org/at-work/innovation/the-2018-top-programming-languages • důraz na obecné principy, nikoliv specifika Pythonu • většina konceptů snadno a velmi podobně realizovatelná v jiných jazycích • používáme Python 3 (zpětně nekompatibilní s Python 2) • minimální použití rozšiřujících knihoven <□► < rnP ► < -E ► < -E ► -E O Q, O • Základní konstrukce (proměnné, výrazy, řídicí struktu funkce) • Programy pracující s čísly (číselné typy, jednoduché ukázky, dělitelnost, náhoda) • Řetězce a seznamy (a kryptografické odbočky) • Vyhledávání a řazení (práce se seznamem, binární vyhledávání, řadicí algoritmy, základy složitosti) • Datové typy a jejich užití (slovník) hlavní důraz cvičení, programátorské části zkoušky, ... snová II: Pokročilejší prvky, aplikace • Záludnosti: Proměnné, paměť, rekurze • Práce se soubory, textem, regulární výrazy • Složené datové typy, objekty v Pythonu • Obrázky (reprezentace, generování, úpravy) • Vývoj programů, programovací jazyky, praktické tipy povědomí, základní vhled, testováno na závěrečné zkoušce Demo základních prvků • proměnné • typy (číslo, řetězec, bool) • print (funkce pro výpis) • výrazy, operátory (aritmetické, logické) • podmínky (if/else) • cykly (for, while) • bloky kódu • funkce • programovaní je • zajímavé • užitečné • Python je • přívětivý i pro začátečníka • přímo prakticky použitelný