64
IB111 Základy programování Úvod kurzu Radek Pelánek 2017

IB111 Úvod do programování Úvod kurzu

Embed Size (px)

Citation preview

Page 1: IB111 Úvod do programování Úvod kurzu

IB111 Základy programováníÚvod kurzu

Radek Pelánek

2017

Page 2: IB111 Úvod do programování Úvod kurzu

IB111, IB113

IB111 (tento předmět)primárně pro informatikysvižné tempopříprava na navazující programátorské předměty

IB113cílen na neinformatikypodobné pokrytí, ale mírnější tempopříprava na programování bez navazujících předmětů

Page 3: IB111 Úvod do programování Úvod kurzu

Úvodní dotazník

1 programátorské zkušenostiA (téměř) žádnéB dílčí zkušenosti, ale nepříliš kvalitníC dobré zkušenosti

2 programovací jazykPythonC, C++, C#JavaPascalPHPjiné

Page 4: IB111 Úvod do programování Úvod kurzu

Dnešní přednáška

o předmětuorganizace, ukončenípojmy – algoritmus, programovánímotivace, širší kontextpředstavení Pythonu, rychlé demo

více o samotném programování až příště

Page 5: IB111 Úvod do programování Úvod kurzu

Cíle předmětu

„dobré základyÿ

zvládnutí základních programátorských konstrukcí(proměnné, funkce, if, for, while, . . . )obecné principy použitelné v řadě programovacích jazykůprogramátorský stylúvod do programátorského a algoritmického stylu myšlení

Page 6: IB111 Úvod do programování Úvod kurzu

Programovací jazyk Python

„Základy programováníÿnikoliv„Programování v Pythonuÿ

Python je používán pro ilustraci pojmů a příkladů, nacvičeníchdůraz na obecné koncepty, cílem není detailní zvládnutíPythonuzáměrně neprobíráme specifika Pythonuzvládnutí konkrétního jazyka – trénink a praxe

Page 7: IB111 Úvod do programování Úvod kurzu

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ízarovnání řádkudokumentace, komentářenepoužívání „copy&pasteÿ kódu. . .

Page 8: IB111 Úvod do programování Úvod kurzu

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ízarovnání řádkudokumentace, komentářenepoužívání „copy&pasteÿ kódu. . .

Page 9: IB111 Úvod do programování Úvod kurzu

Co čekat: příklady

výpočty: faktoriál, prvočísla, odmocnina, náhodná číslaobrázky: želví grafika, „textová grafikaÿ, bitmapyjednoduché hry: hádání čísla, variace na piškvorkyzpracování dat: statistiky dat ze souboru

Page 10: IB111 Úvod do programování Úvod kurzu
Page 11: IB111 Úvod do programování Úvod kurzu

Forma předmětu

2h přednáška, nepovinná, ale velmi doporučenáhodně „příkladový stylÿslidy nemusí být pochopitelné bez komentáře, obsahují izáměrné chyby (pro ilustraci)záznamy dostupné, ale plátno nepříliš čitelné

2h cvičení, povinnéprogramování v jazyce Pythonvíce skupin, cvičícíchspeciální cvičení 01

Pozn. povinnost „být připraveni na cvičeníÿ

Page 12: IB111 Úvod do programování Úvod kurzu

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ž elektronickydiskuzní fórum spíše než mail

Page 13: IB111 Úvod do programování Úvod kurzu

Hodnocení předmětu

500 bodů

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ýmOdpovědníkům

2 vnitrosemestrální zkoušky u počítače: 40+100 bodůprogramování v rámci jednoho cvičeníúkoly – variace na příklady ze cvičení

domácí úkoly: 160 bodů5 za semestrbodování: 25, 25, 30, 40, 40

výjimečné bonusové body

Page 14: IB111 Úvod do programování Úvod kurzu

Hodnocení předmětu

minimum pro ukončení:účast na cvičení (max. 2 neomluvené hodiny)odevzdání všech 5 domácích úloh (alespoň 5 bodů zakaždou)alespoň 100 bodů za domácí úlohyalespoň 70 bodů za vnitrosemestrální zkouškyalespoň 100 bodů ze závěrečné zkoušky

známka: hranice rovnoměrně mezi 270 a 500

Page 15: IB111 Úvod do programování Úvod kurzu

Nesplnění podmínek I

Nesplnění podmínek na účast na cvičení či nedostatečný ziskbodů z domácích úloh:

nemáte nárok na opravuodůvodněné případy – bonusový (a náročný) domácí úkolplně v kompetenci cvičícího

Page 16: IB111 Úvod do programování Úvod kurzu

Nesplnění podmínek II

Nedostatečný zisk bodů z vnitrosemestrálních zkoušek:

opravná zkouška v lednubinární hodnocení:

úspěch ⇒ součet bodů z vnitrosemestrálek se přepíše nakonstantu 70neúspěch ⇒ hodnocení F bez možnosti další opravy

Page 17: IB111 Úvod do programování Úvod kurzu

Nesplnění podmínek III

Nedostatečný zisk bodů ze závěrečné zkoušky:

standardní záverečná zkouškahodnocení F, můžete jít na opravný termín

Page 18: IB111 Úvod do programování Úvod kurzu

Domácí úkoly – organizace

skupiny: rámcově stejné zadání, odlišné detailypřesné zadání, termín odevzdání – kompetence cvičících

Page 19: IB111 Úvod do programování Úvod kurzu

Domácí úkoly – neúplná řešení

pokud nezvládnete úlohu kompletně, zkuste alespoň něco(za méně bodů) – jasně označte:

částečné řešenípozměněná (zjednodušená) úlohapřevzatá část řešení (z webu) a doplněna vlastní úprava

pokud řešení není úplné, uveďte v komentáři „známénedostatkyÿ

Page 20: IB111 Úvod do programování Úvod kurzu

Opisování

pracujte samostatněopisování se trestá zápornými body a disciplinární komisíneřešíme, kdo opisoval – nesdílejte svoje řešení

dát někomu opsat řešení je „danajský darÿkdo nezvládne tento předmět samostatně, ztroskotátéměř jistě v dalším studiu

Page 21: IB111 Úvod do programování Úvod kurzu

Stránka předmětu

http://www.fi.muni.cz/IB111/

harmonogram přednášek, cvičení, úkolůrozepsané podmínky ukončenívýukové materiálydoplňující informace

Page 22: IB111 Úvod do programování Úvod kurzu

Studijní materiály v ISu

Relevantní agendy z ISu pro tento předmět:Učební materiály – slidy z přednášekOrganizační pokyny – archiv zaslaných mailůOdpovědníky – tréninkové testyOdevzdávárny – odevzdávání domácích úlohPoznámkové bloky – počet bodů z úlohDiskuse – nejasnosti, tipy na zajímavé zdroje, . . .

Page 23: IB111 Úvod do programování Úvod kurzu

Sbírka příkladů

http://www.fi.muni.cz/IB111/sbirka/

interaktivní webová stránkapříklady ze cvičeníprocvičení nad rámec cvičení

Page 24: IB111 Úvod do programování Úvod kurzu

Odpovědníky, kontrolní otázky

Odpovědníkyobjeví se v ISu v průběhu semestruotázky s výběrem možnostídobrovolné, doporučené

Kontrolní otázkyotevřené otázky ke každé přednášceprůběžně aktualizovaný dokument:https://docs.google.com/document/d/19VeL15P5s8rv-YoCMwpIiQD34ptn6bevJKsV7mBD-Uo

očekává se zvládnutí před cvičenímnepřipravenost může znamenat i záporné body

Page 25: IB111 Úvod do programování Úvod kurzu

Vybrané doplňkové zdroje – knihy

Python Programming: An Introduction to ComputerScience, 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.

Page 26: IB111 Úvod do programování Úvod kurzu

Vybrané doplňkové zdroje – web

Učíme se programovat v jazyce Python,http://howto.py.cz/index.htm

http://interactivepython.org – interaktivníučebnicedokumentace k Pythonuhttps://www.hackerrank.com/ – příklady, řešení(a opravování) v prohlížečiCoursera, Udacity kurzynapř. Learn to Program: The Fundamentals, An Introduction to Interactive Programming in Python

sdílejte užitečné zdroje v diskusním fóru předmětu

Page 27: IB111 Úvod do programování Úvod kurzu

Předpoklady

základní počítačová gramotnoststředoškolská matematika (např. faktoriál, prvočíslo,logaritmus)logické spojky (and, or, . . .)angličtina (alespoň pasivně, základní porozumění)

rychlotest: Kahoot

Page 28: IB111 Úvod do programování Úvod kurzu

Náročnost předmětu

. . . závisí na vstupních dovednostech

A žádné programátorské zkušenosti⇒ náročné, nezbytné věnovat průběžně čas nad rámecpřednášek a cvičení (doporučeno: fixní 2 hodiny týdněv rozvrhu)

B dílčí programátorské zkušenosti⇒ není těžké, pokud se předmětu průběžně poctivě věnujete

C dobré programátorské zkušenosti⇒ celkem snadné, ale nepodcenit (především 2. polovinukurzu a závěrečnou zkoušku)

Page 29: IB111 Úvod do programování Úvod kurzu

Motivační úloha

převozník, loďka uveze jen 1další kus nákladunáklad: vlk, koza, zelíbez dozoru:

vlk žere kozukoza žere zelí

jak dostat vše bezpečně nadruhou stranu

Jak řešit úlohu algoritmicky? Co to znamená?

http://www.fi.muni.cz/~xpelanek/IB111/vkz/

Page 30: IB111 Úvod do programování Úvod kurzu

Motivační úloha

převozník, loďka uveze jen 1další kus nákladunáklad: vlk, koza, zelíbez dozoru:

vlk žere kozukoza žere zelí

jak dostat vše bezpečně nadruhou stranu

Jak řešit úlohu algoritmicky? Co to znamená?

http://www.fi.muni.cz/~xpelanek/IB111/vkz/

Page 31: IB111 Úvod do programování Úvod kurzu

Algoritmus

návod/postup, jak „mechanickyÿ vyřešit určitý typúlohy/problémupříklady:

rozklad na součin prvočíselnalezení nejkratší cesty mezi dvěma městyvygenerovat zadání Sudoku

Page 32: IB111 Úvod do programování Úvod kurzu

Žádoucí vlastnosti algoritmu

má jasný vstup a výstupobecný (nejen pro omezenou třídu instancí)deterministický (vždy jednoznačné, jak postupovat)konečný, efektivní

Page 33: IB111 Úvod do programování Úvod kurzu

Programování

za algoritmus můžeme považovat i recept, návodprogramování – zápis algoritmů pro počítačepočítače jsou „hloupéÿ – zápis algoritmu musí býtopravdu přesný (srovnej „osolíme přiměřeněÿ)nutnost vyjadřovat se přesně:

otrava – náročný zápisbonus – nutnost myslet přesně

Page 34: IB111 Úvod do programování Úvod kurzu

Programování: motivace

Proč pořádně zvládnout základy programování?

základ pro další studiumužitečnost

profesníobčasná

elegance, kreativita, „sílaÿ

Page 35: IB111 Úvod do programování Úvod kurzu

Programování: způsoby využití

(příklady, rozhodně ne kompletní klasifikace)aplikaceprogramování pro webvestavěné systémyvědecké výpočtyskriptová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í konstrukcejsou potřeba všude

Page 36: IB111 Úvod do programování Úvod kurzu

Aplikace

„samostatnéÿ aplikace pro stolní počítače, mobilnízařízenípříklady:

kancelářský softwareeditace grafiky, zvuku, videahry

důraz na interakci s uživatelemvyužití knihoven, práce s operačním systémem

Page 37: IB111 Úvod do programování Úvod kurzu

Programování pro web

příklady:informační systémye-obchodyprezentace firmy

š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

Page 38: IB111 Úvod do programování Úvod kurzu

Vestavěné systémy

příklady:kuchyňské spotřebiče, GPS, mobil, foťákdopravní prostředkyzdravotnické přístroje

nízko-úrovňové programování, ovladačeúzké propojení s konkrétním hardwarembezpečnost, práce s limitovanými zdroji (paměť, energie)

Page 39: IB111 Úvod do programování Úvod kurzu

Vědecké výpočty

příklady:simulace počasí, klimatubioinformatika (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 datuživatelské rozhraní a interaktivita jsou jen malá část

Page 40: IB111 Úvod do programování Úvod kurzu

Skriptování

příklady:převod dat mezi různými formátyrychlá analýza datprototypy, experimentydrobné úpravy systému (např. správce sítě)

malý rozsah, specifický účelčasto jednorázové aplikace„programování pro běžný životÿ

Page 41: IB111 Úvod do programování Úvod kurzu

Programování v malém / ve velkém

programování v malémdesítky až stovky řádků kódunezávislé na „ostatníchÿtento předmět

programování ve velkémtisíce až milióny řádkůzávislosti, souvislosti, návrh, testování, . . .další předměty (OOP, softwarové inženýrství, . . .)

Page 42: IB111 Úvod do programování Úvod kurzu

Programování v malém: motivace

nutná prerekvizita pro kvalitní programování ve velkémtrénink myšleníprakticky užitečné, i když nejste programátor na plnýúvazek

Page 43: IB111 Úvod do programování Úvod kurzu

Praktické programování v malém: příklady

tvorba studijního kataloguvytvoření interaktivní výukové úlohy pro webový systémzpracování botanických datobrázky do knihy Hlavolamikonvytváření šifer pro Tmou

Pokud neovládáte X, pak vás často ani nenapadne, že by sevám X mohlo hodit.

Page 44: IB111 Úvod do programování Úvod kurzu

Obrázky do knihy

”0102010902050302030703080401040304090507060606100701. . .;3131313113:3131231213-;10”

3131313113

3 1 3 1 2 3 1 2 1 3

Page 45: IB111 Úvod do programování Úvod kurzu
Page 46: IB111 Úvod do programování Úvod kurzu

Doporučené cvičení

rutinní činnost (na počítači)⇓

programátorské cvičení

Page 47: IB111 Úvod do programování Úvod kurzu

Nejen užitečnost. . .

programování je zajímavé i samo o soběelegantní myšlenkyradost z objevování, experimentovánítvoření, kreativita„sílaÿ – pár stisků klávesnice a vytvoříte něco nového azajímavého

Page 48: IB111 Úvod do programování Úvod kurzu

Elegance

Mandelbrotova množina, 25 řádků kódu

Zkuste YouTube: Mandelbrot set

Page 49: IB111 Úvod do programování Úvod kurzu

Programovací jazyky

zdrojový kód(program) překladač

strojovýkód

vstupy výstupyběžící

program

zdrojový kód(program)

vstupy

výstupyinterpret

kompilovaný program

interpretovaný program

Page 50: IB111 Úvod do programování Úvod kurzu

Programovací jazyky: klasifikace I

nízko-úrovňové

kompilovanénutnost řešit specifika konkrétního systémuexplicitní 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émuvyuž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

Page 51: IB111 Úvod do programování Úvod kurzu

Programovací 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

Page 52: IB111 Úvod do programování Úvod kurzu

Python

vysoko-úrovňový – velká míra abstrakce, „spustitelnýpseudokódÿinterpretovaný – pomalejší než kompilovaný, ale většívolnostpedagogický – byl tak navržen, dnes již dominantnívýukový jazykmoderní a široce používaný – patří mezi přibližně 5nejpoužívanějších jazykůvolně a snadno dostupný na všech platformáchširoká nabídka knihoven

Page 53: IB111 Úvod do programování Úvod kurzu

Původ jazyka a názvu

autor:Guido van Rossumkonec 80. let

název podle:Monty Python’sFlying Circus

Page 54: IB111 Úvod do programování Úvod kurzu

https://xkcd.com/353/https://www.explainxkcd.com/wiki/index.php/353

Page 55: IB111 Úvod do programování Úvod kurzu

Příklad aplikace: Slepé mapy

Python, Django, JavaScript, řada dílčích knihoven

Page 56: IB111 Úvod do programování Úvod kurzu

Data

id;user;place_asked;place_answered;type;inserted;response_time;place_map;language;options;ip_country;ip_id10101829;124252;124;124;2;2015-05-21 07:39:18;3107;231;0;[124, 214];CZ;4528010101830;124242;1304;1304;1;2015-05-21 07:39:19;4225;225;0;[];CZ;1087710101831;124252;127;127;1;2015-05-21 07:39:22;3878;231;0;[73, 127];CZ;4528010101832;123553;604;;1;2015-05-21 07:39:25;10790;126;0;[];CZ;4511010101833;124242;1016;1017;1;2015-05-21 07:39:30;9887;225;0;[];CZ;1087710101834;124242;1300;;1;2015-05-21 07:39:33;735;225;0;[];CZ;1087710101835;124252;112;111;2;2015-05-21 07:39:36;13422;231;0;[54, 169, 111, 112, 214, 186];CZ;4528010101836;124239;151;151;1;2015-05-21 07:39:39;4346;227;1;[];US;3599910101837;123553;450;445;1;2015-05-21 07:39:40;12790;126;0;[];CZ;4511010101838;124239;224;224;1;2015-05-21 07:39:43;2896;227;1;[];US;3599910101839;124252;134;134;1;2015-05-21 07:39:43;4297;231;0;[134, 214, 127];CZ;4528010101840;124239;183;183;1;2015-05-21 07:39:47;2719;227;1;[];US;3599910101841;124239;180;180;1;2015-05-21 07:39:50;3007;227;1;[];US;3599910101842;124252;218;207;1;2015-05-21 07:39:54;5732;231;0;[];CZ;4528010101843;124239;87;87;1;2015-05-21 07:39:54;3145;227;1;[];US;35999...

http://www.fi.muni.cz/adaptivelearning/?a=data

Page 57: IB111 Úvod do programování Úvod kurzu

Analýza dat

Python, NumPy, SciPy, Pandas, matplotlib, Kartograph,networkx, . . .

Page 58: IB111 Úvod do programování Úvod kurzu

Programování v tomto kurzu

důraz na obecné principy, nikoliv specifika Pythonuvětšina konceptů snadno a velmi podobně realizovatelná vjiných jazycíchpoužíváme Python 3 (zpětně nekompatibilní s Python 2)minimální použití rozšiřujících knihoven

Page 59: IB111 Úvod do programování Úvod kurzu

Osnova I: Základy

Základní konstrukce (proměnné, výrazy, řídicí struktury,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)

Page 60: IB111 Úvod do programování Úvod kurzu

Osnova II: Důležité věci detailněji

Datové typy a jejich užití (seznam, zásobník, fronta,slovník, množina)Proměnné, paměť, souboryRekurzeSložené datové typy, objekty v PythonuPráce s textem

Page 61: IB111 Úvod do programování Úvod kurzu

Osnova III: Aplikace, praxe

Příklady aplikace datových struktur, práce s textemObrázky (reprezentace, generování, úpravy)Vývoj programů (dokumentace, testování, moduly,konvence)Programovací jazyky (přehled jazyků a jejich užití),praktické postřehy

Page 62: IB111 Úvod do programování Úvod kurzu

Hlavní návaznosti

IB002 Algoritmy a datové struktury IPB071 Principy nízkoúrovňového programováníIB015 Neimperativní programováníPB161 Programování v jazyce C++PB162 Programování v jazyce JavaPB007 Softwarové inženýrství I

Page 63: IB111 Úvod do programování Úvod kurzu

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ódufunkce

Page 64: IB111 Úvod do programování Úvod kurzu

Závěrečný příklad na zamyšlení: Vězni a karty

Albert dostane 5 karet ze standardního balíčku 52 karetvybere jednu z nichzbylé čtyři poskládá do zvoleného pořadí a dá jeBedřichoviBedřich musí určit, jaká je ta pátá odstraněná kartaJaký systém si mají Albert s Bedřichem domluvit?