IB113
Uvod do programov´ ´ an´ı a algoritmizace Uvod kurzu ´
Radek Pel´anek
2020
Uvodn´ı pr˚ ´ uzkum
Piˇste do chatu:
Jak´y je hlavn´ı d˚uvod, proˇc m´ate tento pˇredmˇet?
”mus´ım“ (povinn´y, povinnˇe voliteln´y pˇredmˇet)
”chci“
”chci, protoˇze ...“
”chci se nauˇcit ...“
...
Dneˇsn´ı pˇredn´ aˇska
o pˇredmˇetu
organizace, ukonˇcen´ı
pojmy – algoritmus, programov´an´ı motivace, ˇsirˇs´ı kontext
pˇredstaven´ı Pythonu, rychl´e demo v´ıce o samotn´em programov´an´ı aˇz pˇr´ıˇstˇe
C´ıle pˇredmˇetu
”dobr´ez´aklady“
zvl´adnut´ı z´akladn´ıch program´atorsk´ych konstrukc´ı (promˇenn´e, funkce, if, for, while, . . . )
obecn´eprincipy pouˇziteln´e v ˇradˇe programovac´ıch jazyk˚u program´atorsk´y styl
´
uvod do program´atorsk´eho a algoritmick´eho stylu myˇslen´ı + z´akladn´ı povˇedom´ı o pokroˇcil´ych prvc´ıch, z´aludnostech, ...
Programovac´ı jazyk Python
”Uvod do programov´´ an´ı“
nikoliv
”Programov´an´ı v Pythonu“
Python je pouˇz´ıv´an pro ilustraci pojm˚u a pˇr´ıklad˚u, na cviˇcen´ıch
d˚uraz na obecn´e koncepty, c´ılem nen´ı detailn´ı zvl´adnut´ı Pythonu
z´amˇernˇe neprob´ır´ame specifika Pythonu zvl´adnut´ı konkr´etn´ıho jazyka – tr´enink a praxe
Program´ atorsk´ a kultura
Programy by mˇely b´yt nejen korektn´ı, ale i
”pˇekn´e“.
n´azvy promˇenn´ych, funkc´ı rozdˇelen´ı funkcionality do funkc´ı nepouˇz´ıv´an´ı
”copy&paste“ k´odu zarovn´an´ı ˇr´adku
dokumentace, koment´aˇre . . .
Program´ atorsk´ a kultura
Programy by mˇely b´yt nejen korektn´ı, ale i
”pˇekn´e“.
n´azvy promˇenn´ych, funkc´ı rozdˇelen´ı funkcionality do funkc´ı nepouˇz´ıv´an´ı
”copy&paste“ k´odu zarovn´an´ı ˇr´adku
dokumentace, koment´aˇre . . .
Co ˇcekat: pˇr´ıklady
v´ypoˇcty: faktori´al, prvoˇc´ısla, odmocnina, n´ahodn´a ˇc´ısla obr´azky: ˇzelv´ı grafika,
”textov´a grafika“, bitmapy jednoduch´e hry: h´ad´an´ı ˇc´ısla, variace na piˇskvorky zpracov´an´ı dat: statistiky dat ze souboru
Organizace pˇredmˇetu
pˇredn´aˇska
slidy + videonahr´avky z loˇnsk´eho roku
online blok: zd˚uraznˇen´ı hlavn´ıch prvk˚u, ˇreˇsen´e pˇr´ıklady, dotazy
cviˇcen´ı
programov´an´ı v jazyce Python
kombinace samostatn´e pr´ace a synchronn´ıho online bloku
Komunikace
ˇreˇsen´ı probl´em˚u, nestandardn´ı situace, dotazy:
cviˇc´ıc´ı sp´ıˇse neˇz pˇredn´aˇsej´ıc´ı diskuzn´ı f´orum sp´ıˇse neˇz mail
Hodnocen´ı pˇredmˇetu
400 bod˚u
dom´ac´ı ´ukoly: 200 bod˚u 6 za semestr
bodov´an´ı: 30, 30, 30, 30, 40, 40 z´avˇereˇcn´a p´ısemn´a zkouˇska: 200 bod˚u
psan´ı k´odu (podobn´e ´ulohy jako cviˇcen´ı, D ´U) ˇcten´ı k´odu, principy, algoritmy
pˇresn´a forma bude upˇresnˇena dle situace v´yjimeˇcn´e bonusov´e body
Hodnocen´ı pˇredmˇetu
minimum pro ukonˇcen´ı:
´
uˇcast na cviˇcen´ı
odevzd´an´ı vˇsech 6 dom´ac´ıch ´uloh (alespoˇn 5 bod˚u za kaˇzdou)
alespoˇn 120 bod˚u za dom´ac´ı ´ulohy alespoˇn 100 bod˚u ze z´avˇereˇcn´e zkouˇsky zn´amka: hranice rovnomˇernˇe mezi 220 a 400
Dom´ ac´ı ´ ukoly – organizace
skupiny: r´amcovˇe stejn´e zad´an´ı, odliˇsn´e detaily
pˇresn´e zad´an´ı, term´ın odevzd´an´ı – kompetence cviˇc´ıc´ıch
Opisov´ an´ı
pracujte samostatnˇe
opisov´an´ı se trest´a velmi pˇr´ısnˇe (hodnocen´ı F bez dalˇs´ıch diskuz´ı)
neˇreˇs´ıme moc, kdo opisoval – nesd´ılejte svoje ˇreˇsen´ı
Pˇrizn´ an´ı asistence
asistence s D´U:
mˇela by b´yt v´yjimeˇcn´a
jasnˇe pˇriznat v odevzdan´ych materi´alech celkov´e pojet´ı ´ulohy jsem konzultoval s XY
v t´eto funkci jsem mˇel chybu a nebyl schopen jsem ji naj´ıt, pouˇzit´e ˇreˇsen´ı je od XY
tuto funkci jsem nezvl´adl napsal, pouˇzil jsem ˇreˇsen´ı ze str´anky WV
Str´ anka pˇredmˇetu
https://www.fi.muni.cz/~xpelanek/IB113/
harmonogram pˇredn´aˇsek, cviˇcen´ı, ´ukol˚u slidy, odkaz na z´aznamy z loˇnska instrukce k online v´yuce
rozepsan´e podm´ınky ukonˇcen´ı v´yukov´e materi´aly
doplˇnuj´ıc´ı informace
Studijn´ı materi´ aly v ISu
Relevantn´ı agendy z ISu pro tento pˇredmˇet:
Uˇcebn´ı materi´aly – slidy z pˇredn´aˇsek
Organizaˇcn´ı pokyny – archiv zaslan´ych mail˚u Odevzd´av´arny – odevzd´av´an´ı dom´ac´ıch ´uloh Pozn´amkov´e bloky – poˇcet bod˚u z ´uloh
Diskuse – nejasnosti, tipy na zaj´ımav´e zdroje, ...
Sb´ırka pˇr´ıklad˚ u
https://www.fi.muni.cz/IB111/sbirka/
interaktivn´ı webov´a str´anka pˇr´ıklady ze cviˇcen´ı
procviˇcen´ı nad r´amec cviˇcen´ı
prim´arnˇe urˇcena pro paraleln´ı pˇredmˇet pro informatiky – obsahuje i tˇeˇzˇs´ı pˇr´ıklady nad r´amec IB113
Um´ıme programovat
https://www.umimeprogramovat.cz/
neomezen´y pˇr´ıstup po pˇrihl´aˇsen´ı, viz instrukce v mailu pˇredevˇs´ım pr˚ubˇeˇzn´e, dobrovoln´e procviˇcov´an´ı
konkr´etn´ı doporuˇcen´ı v pr˚ubˇehu semestru
2. a 4. dom´ac´ı ´uloha (cviˇcen´ı Programov´an´ı v Pythonu)
Vybran´e doplˇ nkov´ e 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´atorsk´a cviˇcebnice, R. Pel´anek.
Jak to vyˇreˇsit, R. Pel´anek.
Vybran´e doplˇ nkov´ e zdroje – web
Uˇc´ıme se programovat v jazyce Python, http://howto.py.cz/index.htm
http://interactivepython.org – interaktivn´ı uˇcebnice
dokumentace k Pythonu Coursera, Udacity kurzy
sd´ılejte uˇziteˇcn´e zdroje v diskusn´ım f´oru pˇredmˇetu
Pˇredpoklady
z´akladn´ı poˇc´ıtaˇcov´a gramotnost
stˇredoˇskolsk´a matematika (napˇr. faktori´al, prvoˇc´ıslo, logaritmus)
logick´e spojky (and, or, ...)
angliˇctina (alespoˇn pasivnˇe, z´akladn´ı porozumˇen´ı)
Motivaˇcn´ı ´ uloha
pˇrevozn´ık, lod’ka uveze jen 1 dalˇs´ı kus n´akladu
n´aklad: vlk, koza, zel´ı bez dozoru:
vlk ˇzere kozu koza ˇzere zel´ı
jak dostat vˇse bezpeˇcnˇe na druhou stranu
Jak ˇreˇsit ´ulohu algoritmicky? Co to znamen´a?
http://www.fi.muni.cz/~xpelanek/IB111/vkz/
Motivaˇcn´ı ´ uloha
pˇrevozn´ık, lod’ka uveze jen 1 dalˇs´ı kus n´akladu
n´aklad: vlk, koza, zel´ı bez dozoru:
vlk ˇzere kozu koza ˇzere zel´ı
jak dostat vˇse bezpeˇcnˇe na druhou stranu
Jak ˇreˇsit ´ulohu algoritmicky? Co to znamen´a?
http://www.fi.muni.cz/~xpelanek/IB111/vkz/
Algoritmus
n´avod/postup, jak
”mechanicky“ vyˇreˇsit urˇcit´y typ
´
ulohy/probl´emu pˇr´ıklady:
rozklad na souˇcin prvoˇc´ısel
nalezen´ı nejkratˇs´ı cesty mezi dvˇema mˇesty vygenerovat zad´an´ı Sudoku
Z´ ˇ adouc´ı vlastnosti algoritmu
m´a jasn´y vstup a v´ystup
obecn´y (nejen pro omezenou tˇr´ıdu instanc´ı)
deterministick´y (vˇzdy jednoznaˇcn´e, jak postupovat) koneˇcn´y, efektivn´ı
Programov´ an´ı
za algoritmusm˚uˇzeme povaˇzovat i recept, n´avod programov´an´ı– z´apis algoritm˚u pro poˇc´ıtaˇce poˇc´ıtaˇce jsou
”hloup´e“ – z´apis algoritmu mus´ı b´yt opravdu pˇresn´y (srovnej
”osol´ıme pˇrimˇeˇrenˇe“) nutnost vyjadˇrovat se pˇresnˇe:
otrava – n´aroˇcn´y z´apis
bonus – nutnost myslet pˇresnˇe
Programov´ an´ı: motivace
Proˇc poˇr´adnˇe zvl´adnout z´aklady programov´an´ı?
z´aklad pro dalˇs´ı studium uˇziteˇcnost
profesn´ı obˇcasn´a
elegance, kreativita,
”s´ıla“
Programov´ an´ı: zp˚ usoby vyuˇzit´ı
(pˇr´ıklady, rozhodnˇe ne kompletn´ı klasifikace) aplikace
programov´an´ı pro web vestavˇen´e syst´emy vˇedeck´e v´ypoˇcty skriptov´an´ı
kaˇzd´e d˚uraz na nˇeco jin´eho, sd´ıl´ı ale z´akladn´ı principy
”informatick´eho myˇslen´ı“, n´ami prob´ıran´e z´akladn´ı konstrukce jsou potˇreba vˇsude
Aplikace
”samostatn´e“ aplikace pro stoln´ı poˇc´ıtaˇce, mobiln´ı zaˇr´ızen´ı
pˇr´ıklady:
kancel´aˇrsk´y software
editace grafiky, zvuku, videa hry
d˚uraz na interakci s uˇzivatelem
vyuˇzit´ı knihoven, pr´ace s operaˇcn´ım syst´emem
Programov´ an´ı pro web
pˇr´ıklady:
informaˇcn´ı syst´emy e-obchody
prezentace firmy ˇsirok´a ˇsk´ala:
drobn´e ´upravy existuj´ıc´ıch syst´em˚u (CMS) vytv´aˇren´ı vlastn´ıch rozs´ahl´ych syst´em˚u
pr´ace s datab´azemi, integrace r˚uzn´ych prostˇredk˚u (Python/PHP, JavaScript, CSS, HTML. . . )
d˚uraz na soukrom´ı – pˇr´ıstupov´a pr´ava v IS, elektronick´e platby
Vestavˇen´e syst´emy
pˇr´ıklady:
kuchyˇnsk´e spotˇrebiˇce, GPS, mobil, fot’´ak dopravn´ı prostˇredky
zdravotnick´e pˇr´ıstroje
n´ızko-´urovˇnov´e programov´an´ı, ovladaˇce
´
uzk´e propojen´ı s konkr´etn´ım hardwarem
bezpeˇcnost, pr´ace s limitovan´ymi zdroji (pamˇet’, energie)
Vˇedeck´ e v´ ypoˇcty
pˇr´ıklady:
simulace poˇcas´ı, klimatu
bioinformatika (protein folding, anal´yza genomu, ...) vym´yˇslen´ı algoritm˚u (urychlen´ı v´ypoˇctu, distribuovan´e v´ypoˇcty)
propojen´ı informatiky a matematiky (pˇr´ıp. jin´ych discipl´ın) zpracov´an´ı rozs´ahl´ych dat
uˇzivatelsk´e rozhran´ı a interaktivita jsou jen mal´a ˇc´ast
Skriptov´ an´ı
pˇr´ıklady:
pˇrevod dat mezi r˚uzn´ymi form´aty rychl´a anal´yza dat
prototypy, experimenty
drobn´e ´upravy syst´emu (napˇr. spr´avce s´ıtˇe) mal´y rozsah, specifick´y ´uˇcel
ˇcasto jednor´azov´e aplikace
”programov´an´ı pro bˇeˇzn´y ˇzivot“
Programov´ an´ı v mal´em / ve velk´ em
programov´an´ı v mal´em
des´ıtky aˇz stovky ˇr´adk˚u k´odu nez´avisl´e na
”ostatn´ıch“
tento pˇredmˇet programov´an´ı ve velk´em
tis´ıce aˇz mili´ony ˇr´adk˚u
z´avislosti, souvislosti, n´avrh, testov´an´ı, ...
dalˇs´ı pˇredmˇety (OOP, softwarov´e inˇzen´yrstv´ı, ...)
Programov´ an´ı v mal´em: motivace
nutn´a prerekvizita pro kvalitn´ı programov´an´ı ve velk´em tr´enink myˇslen´ı
prakticky uˇziteˇcn´e, i kdyˇz nejste program´ator na pln´y
´ uvazek
Praktick´e programov´ an´ı v mal´em: pˇr´ıklady
tvorba studijn´ıho katalogu
vytvoˇren´ı interaktivn´ı v´yukov´e ´ulohy pro webov´y syst´em zpracov´an´ı botanick´ych dat
obr´azky do knihy Hlavolamikon vytv´aˇren´ı ˇsifer pro Tmou
Pokud neovl´ad´ate X, pak v´as ˇcasto ani nenapadne, ˇze by se v´am X mohlo hodit.
Obr´ azky do knihy
”0102010902050302030703080401040304090507060606100701...;
3131313113:3131231213-;10”
3 1 3 1 3 1 3 1 1 3 3 1 3 1 2 3 1 2 1 3
Doporuˇcen´e cviˇcen´ı
rutinn´ı ˇcinnost (na poˇc´ıtaˇci)
⇓
program´atorsk´e cviˇcen´ı
Nejen uˇziteˇcnost. . .
programov´an´ı je zaj´ımav´e i samo o sobˇe elegantn´ı myˇslenky
radost z objevov´an´ı, experimentov´an´ı tvoˇren´ı, kreativita
”s´ıla“ – p´ar stisk˚u kl´avesnice a vytvoˇr´ıte nˇeco nov´eho a zaj´ımav´eho
Elegance
Mandelbrotova mnoˇzina, 25 ˇr´adk˚u k´odu
Zkuste YouTube: Mandelbrot set
Programovac´ı jazyky
zdrojový kód
(program) překladač strojový
kód
vstupy běžící výstupy
program
zdrojový kód (program)
vstupy
výstupy interpret
kompilovaný program
interpretovaný program
Programovac´ı jazyky: klasifikace I
n´ızko-´urovˇnov´e
kompilovan´e
nutnost ˇreˇsit specifika konkr´etn´ıho syst´emu explicitn´ı pr´ace s pamˇet´ı
n´aroˇcnˇejˇs´ı v´yvoj (n´ızk´a efektivita pr´ace) vysok´a efektivita programu
vysoko-´urovˇnov´e
interpretovan´e
nez´avisl´e na konkr´etn´ım syst´emu vyuˇzit´ı abstraktn´ıch datov´ych typ˚u snadnˇejˇs´ı v´yvoj (vysok´a efektivita pr´ace) niˇzˇs´ı efektivita programu
nikoliv dvˇe kategorie, ale plynul´y pˇrechod; zjednoduˇseno
Programovac´ı jazyky: klasifikace II
zjednoduˇsen´a klasifikace a pouˇzit´ı n´ızko-´urovˇnov´e C, FORTRAN, ...
vestavˇen´e syst´emy, rychl´e v´ypoˇcty objektov´e C++, Java, C#, ...
klasick´e aplikace, rozs´ahl´e syst´emy skriptovac´ı Python, PHP, JavaScript, Perl, ...
programov´an´ı pro web, skriptov´an´ı, prototypy deklarativn´ı Prolog, LISP, Haskell, ...
umˇel´a inteligence
v´ıce na samostatn´e pˇredn´aˇsce na konci semestru
Python
vysoko-´urovˇnov´y – velk´a m´ıra abstrakce,
”spustiteln´y pseudok´od“
interpretovan´y – pomalejˇs´ı neˇz kompilovan´y, ale vˇetˇs´ı volnost
pedagogick´y – byl tak navrˇzen, dnes jiˇz dominantn´ı v´yukov´y jazyk
modern´ı a ˇsiroce pouˇz´ıvan´y – patˇr´ı mezi pˇribliˇznˇe 5 nejpouˇz´ıvanˇejˇs´ıch jazyk˚u
volnˇe a snadnodostupn´y na vˇsech platform´ach ˇsirok´a nab´ıdka knihoven
P˚ uvod jazyka a n´ azvu
autor:
Guido van Rossum konec 80. let
n´azev podle:
Monty Python’s Flying Circus
https://xkcd.com/353/
https://www.explainxkcd.com/wiki/index.php/353
Python je pouˇz´ıvan´ y...
https://spectrum.ieee.org/at-work/innovation/the-2018-top-programming-languages
Programov´ an´ı v tomto kurzu
d˚uraz na obecn´e principy, nikoliv specifika Pythonu
vˇetˇsina koncept˚u snadno a velmi podobnˇe realizovateln´a v jin´ych jazyc´ıch
pouˇz´ıv´ame Python 3 (zpˇetnˇe nekompatibiln´ı s Python 2) minim´aln´ı pouˇzit´ı rozˇsiˇruj´ıc´ıch knihoven
Osnova I: Z´ aklady
Z´akladn´ı konstrukce (promˇenn´e, v´yrazy, ˇr´ıdic´ı struktury, funkce)
Programy pracuj´ıc´ı s ˇc´ısly (ˇc´ıseln´e typy, jednoduch´e uk´azky, dˇelitelnost, n´ahoda)
Retˇˇ ezce a seznamy (a kryptografick´e odboˇcky) Vyhled´av´an´ı a ˇrazen´ı (pr´ace se seznamem, bin´arn´ı vyhled´av´an´ı, ˇradic´ı algoritmy, z´aklady sloˇzitosti) Datov´e typy a jejich uˇzit´ı (slovn´ık)
⇒ hlavn´ı d˚uraz cviˇcen´ı, program´atorsk´e ˇc´asti zkouˇsky, ...
Osnova II: Pokroˇcilejˇs´ı prvky, aplikace
Z´aludnosti: Promˇenn´e, pamˇet’, rekurze Pr´ace se soubory, textem, regul´arn´ı v´yrazy Sloˇzen´e datov´e typy, objekty v Pythonu Obr´azky (reprezentace, generov´an´ı, ´upravy)
V´yvoj program˚u, programovac´ı jazyky, praktick´e tipy
⇒ povˇedom´ı, z´akladn´ı vhled, testov´ano na z´avˇereˇcn´e zkouˇsce
Demo z´ akladn´ıch prvk˚ u
promˇenn´e
typy (ˇc´ıslo, ˇretˇezec, bool) print (funkce pro v´ypis)
v´yrazy, oper´atory (aritmetick´e, logick´e) podm´ınky (if/else)
cykly (for, while) bloky k´odu funkce
Shrnut´ı
programov´an´ı je zaj´ımav´e uˇziteˇcn´e Python je
pˇr´ıvˇetiv´y i pro zaˇc´ateˇcn´ıka pˇr´ımo prakticky pouˇziteln´y