ib111 Úvod do programování skrze python Úvod kurzuib111 Úvod do programovÆní skrze python...
TRANSCRIPT
IB111 Úvod do programování skrze PythonÚvod kurzu
2013
Dnešní přednáška
o předmětuadministrativazáklady – algoritmus, programovánímotivace
Cíle předmětu
zvládnutí základních programátorských konstrukcí (if, for,while, . . . )obecné principy použitelné v řadě programovacích jazykůúvod do programátorského a algoritmického stylu myšlení
Úvod do programování skrze Python
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 některá specifika Pythonuzvládnutí konkrétního jazyka – trénink a praxe
Kontext
máte (většina z vás) volbu mezi:IB001 Úvod do programování skrze C (4+2 kr.)IB111 Úvod do programování skrze Python (4+2 kr.)( IB999 Vstupní test z programování (0 kr.) )
výhody a nevýhody Pythonu oproti C:+ příjemnější na použití+ snadnější začátky+ využití v mat. softwaru (Sage)- odlišná syntaxe od ostatních jazyků, které dále potkáte
(C++, Java)
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, jednorozměrné piškvorkyzpracování dat ze souboru, regulární výrazy
Forma předmětu
2h přednáška, nepovinné, ale velmi doporučenéRadek Pelánek / Zdeněk Říhaslidy nemusí být pochopitelné bez komentářezáznamy dostupné, ale plátno nepříliš čitelnéna cvičení často algoritmy z přednášky
2h cvičení, povinnéprogramování v jazyce Pythonvíce skupin, cvičících
Hodnocení předmětu
závěrečná písemná zkouška: 50 bodůzkouší se principy, algoritmy, pojmytest s výběrem možností, podobné průběžnýmOdpovědníkům
průběžná zkouška u počítače: 20 bodůprogramování v rámci jednoho cvičeníúkoly variace na příklady ze cvičení
domácí úkoly: 30 bodů6 za semestr po 5 bodech
výjimečné bonusové bodyúčast na cvičení (max. 2 neomluvené hodiny)minimum pro ukončení: 25 bodů DÚ + průběžná zk,25 bodů závěrečná zk
Domácí úkoly
pracujte samostatně, opisování se trestá zápornými body;neřešíme, kdo opisovalpokud nezvládnete úlohu kompletně, zkuste alespoň něco(za méně bodů) – jasně označte:
částečné řešenípřevzít část cizího řešení a doplnit vlastní kuspozměněná (zjednodušená) úloha
pokud řešení není úplné, uveďte v komentáři „známénedostatkyÿdomácí úkoly (přesné zadání, termín odevzdání) vkompetenci cvičících
Stránka předmětu
http://www.fi.muni.cz/~xpelanek/IB111/
harmonogram přednášek, cvičení, úkolůvýukové materiálydoplňující informace
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é testy, dobrovolné, doporučenéOdevzdávárny – odevzdávání domácích úlohPoznámkové bloky – počet bodů z úloh
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.
Doplňkové zdroje – web
Učíme se programovat v jazyce Python,http://howto.py.cz/index.htm
http://interactivepython.org – interaktivníučebnicedokumentace k PythonuKhan Academy – Computer ScienceCoursera, Udacity kurzynapř. Learn to Program: The Fundamentals, An Introduction to Interactive Programming in Python
sdílejte užitečné zdroje v diskuzním fóru předmětu
Předpoklady
základní počítačová gramotnoststředoškolská matematika (např. faktoriál, prvočíslo,logaritmus)logické spojky (and, or, . . .)
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/
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/
Algoritmus
návod/postup, jak „mechanickyÿ vyřešit určitý typúlohy/problémutypické příklady:
rozklad na součin prvočíselnalezení nejkratší cesty mezi dvěma městyvygenerovat zadání Sudoku
Žá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í
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ě
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ÿ
Programování: způsoby využití
(příklady, rozhodně ne kompletní klasifikace)rozsáhlé 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íÿ
Samostatné rozsáhlé aplikace
příklady:kancelářský, účetní softwareeditace grafiky, zvuku, videahry
rozsáhlé projektydůraz na interakci s uživatelemvyužití knihoven, práce s operačním systémem
Programování pro web
příklady:informační systémye-obchodyprezentace firmy
široká škála:drobné úpravy existují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
příklady:kuchyňské spotřebiče, GPS, mobil, foťákdopravní prostředky
nízko-úrovňové programování, ovladačeúzké propojení s konkrétním hardwarembezpečnost, práce s limitovanými zdroji (paměť, energie)
Vědecké výpočty
příklady:simulace počasí, klimatubioinformatika (protein folding, analýza genomu, . . .)
vymýšlení algoritmů (urychlení výpočtu, distribované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
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í 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í, . . .)
Programování v malém: motivace
nutná prerekvizita pro kvalitní programování ve velkémprakticky užitečné, i když nejste programátor na plnýúvazek
Praktické programování v malém: příklady
tvorba studijního kataloguvytvoření interaktivní webové úlohy pro systém Tutorzpracování botanických datgenerování šifer pro Tmou
pokud neovládáte X, pak vás často ani nenapadne, že by sevám X mohlo hodit
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
Elegance
Mandelbrotova množina, 25 řádků kódu
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
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 (nizká 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
Programovací jazyky: klasifikace II
zjednodušená klasifikace a použití
nízko-úrovňové C, FORTRAN, . . .vědecké výpočty, vestavěné systémy
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šívolnostpedagogický – byl tak navrženmoderní a široce používaný – přibližně 7. nejpoužívanějšíjazykvolně a snadno dostupný na všech platformách
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 2.7
Závěrečný motivační příklad: 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?