03.06.2021: Řešení těžkých úloh: * U1: Páková vodovodní baterie * U2: Hezké nakreslení grafu * Rada 1.: Máte-li úlohu, kterou nechcete nebo neumíte řešit… ...řešte jinou úlohu! * U3: Hádání obrázku * Rada 2.: ..zapojte přirozený výběr * Genetické (evoluční) algoritmy - fitness - selekce, křížení, mutace - význam mutace * U4: Broučci * broučci s pamětí * broučci BCY //- rodičovské investice * Vsuvka: historka o magnetofonu * Rada 3.: ...podívejte se na ni z odstupu! * Rada 4.: ...omezte se na řešení v určitém tvaru! * U5: Rozpoznávání znaků * U1: Páková vodovodní baterie - řešení 27.05.2021: -> viz https://kam.mff.cuni.cz/~perm/programovani/NNPRG031/ 20.05.2021: * zkoušky - vypsané termíny, jak budou probíhat, jak vypadá písemka * příklad zkouškového příkladu - ANKETA - diagram toku dat (data-flow diagram) * Hygiena programování II. - oddělovat činnosti - pracovní deník - ToDo-list, bug-list, issue tracker - správa versí - Automatické testy * příklad zkouškového příkladu - přehýbání papíru 13.05.2021: -> viz https://kam.mff.cuni.cz/~perm/programovani/NNPRG031/ 06.05.2021: -> viz https://kam.mff.cuni.cz/~perm/programovani/NNPRG031/ 29.4.2021: * příklady a úlohy - mrkev a petržel - rozdělení dětí do skupin - editační vzdálenost * obecný postup: - zobecnit - určit hodnoty počátečních případů - najít rekurentní vzorec - spočítat * optimální uzávorkování součinu matic * dynamické programování - Rozděl a panuj - memoizace * počet BVS o k vrcholech 22.4.2021: -> viz https://kam.mff.cuni.cz/~perm/programovani/NNPRG031/ 15.4.2021: Grafika v C# (WinForms) * Graphics - Získání - this.CreateGraphics() * Pen - Pens (properties) - New Pen * Color - Připravené (properties) * Pero – ...Cap * PictureBox * Bitmap * Brush - Brushes (properties) - new SolidBrush * Color - FromARGB, RGB = vypočítaná barva * Bitmap.GetPixel, SetPixel - kopie - barevna slozka - světlost – převod na šedou - prah - Distribuce chyby - Zmena souradnic - Preklopeni x,y - Zvetseni //- deformace * použití v jiných typech projektů - References / Add / System.Drawing 8.4.2021: Ještě Diskrétní simulace: * co bude jinak u jiného modelu - třídy - události - reakce na události * návrh modelu - pomůcka diagram stavů * Příklad: obchodní dům * Implementace - přehledná vstupní data Programování řízené událostmi (Event-driven programming): * programování řízené událostmi - princip * události – klávesnice, myš * jak probíhá zpracování události - hierarchie - polymorfismus * Visual Studio: - Designer, ToolBox, Property editor * Druhy properties - Oddělení designu a funkčního kódu * Syntaxe: partial class * Vytvoření obslužné procedury via properties a via dbl-click - MessageBox * Sdílení obslužných metod - Sender - Přetypování "(typ)" //nebo "as" //- Is - Kalkulačka 1.4.2021: Diskrétní simulace: * úloha s hromadou písku * Model - Zjednodušený, jen některé atributy * Simulace spojitá vs. diskrétní Program: - TypUdalosti - C# enum - Udalost - Kalendar - Auto - Model * Použití simulace pro zkoumání variant a OOP-změna pomocí odvozené třídy = Model2 pro různý počet aut = Model3 pro ruzný počet aut a nakladačů předchozí týdny -> viz https://kam.mff.cuni.cz/~perm/programovani/NNPRG031/ .................................... 06.01.2021: * programování řízené událostmi * Tkinter 16.12.2020: ještě k funkcím: * jako proměnné * jako parametry * lambda-funkce * closure modul NumPy: * knihovna, 14 let, supported by neziskovka * vícerozměrná pole * vytvoření pole: - np.array( [1,2,3,4] ) * prvky mají TYP np.dtype * změna typu: af = a.astype( 'float64' ) - np.arrange(20) = vyplní hodnotami - b = np.array([(1.5,2,3), (4,5,6)]) * seznam seznamů = vícerozměrné pole - uvést typ při vytváření - hodnoty * np.zeros * np.ones * np.empty = co, zrovna leží v paměti * default typ = float64 * arange * np.random.random = [0.0, 1.0) - změna tvaru = shape, resharpe - operace - maticové operace - dosazení - výběr podle indexů * Matplotlib & NumPy * Příklady programování her s úplnou informací: - odebírání zápalek - exponenciální složitost, memoizace - odebírání čísel zleva/zprava - Minimax - negamax 9.12.2020: Dlouhá čísla: * representace - nezáporná x i záporná - se znaménkem x doplněk - celá x desetinná - pevná x pohyblivá řádová čárka - pole x spojový seznam - odpředu x odzadu - obsah jednoho prvku - délka - kolik míst navíc - spočítat a ještě zkusit * příklad e (Leonhard Paul Euler 1707-1783) - odhad počtu kroků - potřebné operace - dosazení - sčítání - dělení integerem - přeskočení nul - test konce * další operace Balíček matplotlib: * knihovna, 18 let, podporovaná neziskovou organizací * matplotlib.pyplot = interface ala MATLAB - ne-objektový přístup - ne-objektový přístup – viz Turtle, turtle.py (když nemá objekt, tak si ho vytvoří) * plot(), show() - jen y - xy - body místo čar - více grafů - osy = automaticky, axis( [0,10,0,10] ) - popisky os - bar - subplot( sizex-sizey-poradi ) - neblokující show(...) - ukládání obrázku do souboru * závislosti 2.12.2020: Testy: * příklad PočetDní - ošklivý začátek a konec => CisloDne - fce PocetDnuMeziDvemaDaty - PocetDni(*[int(x) for x in input().split()]) - zkoušení ruce-oči * nahradit ruce * nahradit oči * testovaci funkce a počítání testů a chyb - snadne testovani => hodně testů - testovat okrajové případy - chyby mohou být i v testech... * == unit-testy //* nevýhody: // - psát si sám porovnávání // - testy v deploy-kódu Moduly: * jmenný prostor * dir() * import – možnosti * jak vytvořit modul * Proč vytvářet moduly * cizí moduly: standardní knihovna * balíček - co to je - PyPI * problémy (temná strana) - že se to programování posouvá od vymysli k najdi/nastuduj - cizí kód - bugy, verse - zpětná kompatibilita - dependency hell Testy podruhé: * modul unittest - testovací případ - class TestCase(unittest.testCase): - def test.... - assert * metodika TDD: Test-Driven Development - pozitivni testy x negativni testy - failure vs. error * vymýšlení chyb – tester = změna přístupu - self.assertRaises = očekávaná výjimka - další druhy testů 25.11.2020: * Chyby: syntaktické, běhové, sémantické * Výjimky jako zpráva o běhové chybě - jak číst výpis výjimky - co se děje, když nastane výjimka (vynořování ze zásobníku volání a try-bloků) - odchycení výjimky: - try-except - except TYP - více except-bloků - except bez typu (nedělat!) - except – proměnná (lokální v except) - vyvolání: raise - Příklad: existence souboru = používat výjimky jen na výjimečné stavy - finally * vlastní vyvolání výjmky - BaseException - vlastní typy - výjmky vs. návratové kódy * Assert * Defenzivní programování * list comprehensions (a set/dict-) 18.11.2020: * Objekty = tentokrát podrobněji - Společně data a funkce (metody) - Proč - Pojmy OBJEKT a TŘÍDA - Dědičnost, násobná dědičnost, interface * Objekty v Pythonu - Definice - Funkce a parametr self - Konstruktor - Příklady: - Komplex - Seznam slov pomocí listu - Seznam slov pomocí slovníku - Dědičnost - dědičnost vs. kompozice = jindy - násobná dědičnost - nahrazování pomocí interface - volání funkce předka - Polymorfismus - Abstraktní třída - Duck typing - kontrola typu (type(),, isinstance() - Zapouzdření – viditelnost atributů - Funkce definované ve třídě: 1) funkce instance/objektu 2) statická funkce 3) funkce třídy - dekorátory (NEBUDU VYSVĚTLOVAT) - parametr cls - TYP je taky objekt - příklad: //class-method vracející nový objekt //(náhražka více konstruktorů) - Proměnné definované ve třídě: 1) proměnné instance/objektu 2) proměnné třídy - příklad: počitadlo vytvořených objektů - zmatek: proměnná třídy jako výchozí hodnota proměnné objektu - pokud v něčem nemáte jasno, tak to nepoužívejte! - int(), str()... jsou třídy, ne funkce - třídy jsou také objekty! - typy jsou také objekty - jména jsou jen jména (a mohou získat nový obsah) - funkce dir() - dokumentační komentáře a __doc__ 11.11.2020: * tuple (n-tice) * dictionary => nová třída Slovník * textové řetězce obecně a typ string v Pythonu - výstup pomocí šablon => nová třída Tiskárna * textové soubory - ideál, skutečnost - (některé) problémy s nejednotným formátem mezi různými operačními systémy - operace s textovými soubory, proč je potřeba je zavírat 4.11.2020: * rozklad problému na podproblémy a podprogramy - programování shora x programování zdola - psaní a ladění shora x zdola * rozklad na třídy a objekty - výhody: - odstranění globálních proměnných - odstranění globálních funkcí - možná změna odvozením dové třídy (dědičnost) namísto přepisování stávajícího kódyu 21.10.2020: * Dynamické proměnné - ukazatel - Halda - Garbage collector * Objekty - Společně data a funkce (metody) - Proč - Pojmy OBJEKT a TŘÍDA * Objekty v Pythonu - Definice - Funkce a parametr self - Konstruktor - Příklady: - Komplex * Spojový seznam (jednosměrný, lineární) - Prvek - vytvoření - projití - přidání na začátek - mazání prvního prvku - přidání na konec - když si pamatujeme, kde je konec - mazání posledního prvku - jen složitost 14.10.2020: * funkce (podprogramy) * příklad tabulka násobilky - formát v příkazu print # print( "%3d"% i, end=" " ) * Proč používat podprogramy * Co potřebujeme umět - Jak definovat novou funkci - Jak vracet výsledek - Jak popsat parametry (více možností) - Jak volat funkci - Způsoby předávání parametrů - Viditelnost proměnných (a funkcí) - Funkce B definovaná uvnitř funkce A - Pořadí hledání významu identifikátoru (pravidlo LEGB) - Kdy je funkce známá 07.10.2020: * Složitější datové typy * Proměnná = ODKAZ na hodnotu (obrázek s šipkou) = budu připomínat ještě mockrát, zdroj chyb! * String - přístup ke znaku - neměnný – dosadit do znaku nelze - slice * Kód znaku * List * For-cyklus * Range * Příklady práce s listem: - list listů ("tabulka") - součet hodnot ze vstupního řádku - vlastní převod string-int (Hornerovo schema, bez názvu) 30.09.2020: * Předmět NPRG030 Programování I. - Zkouška v létě - Zápočet, podmínky určuje cvičící, obecně docházka, DÚs, zápTest, zápPgm - mj-cvičení pro pokročilé * Co to je programování - Algoritmus - Vlastnosti algoritmu - Zápis algoritmu => jazyk * Jazyk Python - verse 3 * Nástroje – překladače interpret… - IDLE - IDLE-Editor, uložení, spuštění - Spuštění .py souboru poklikáním - Visual Studio - Krokování - Náhled proměnné - Watch - Červené změněné hodnoty * print() * dosazení * input() - přetypování * řízení běhu programu - if, while - odsazení: tabulátor x mezery - a problém - VS: Ctrl-R+W = Edit/Advanced/View WhiteSpace //* Jednoduché příklady: // - Čísla 1..100 // - Prvočísla 1..100 * Co by taky šlo: - Re-use = používat to, co už je hotovo - svoje i cizí části kódu - Posun Python – více na výpočty „pro sebe“ než pgm, který si někdo koupí a za který ručím = potřebujeme kompromis * od začátku: * Hodnoty, typy - Čísla - Int, float * Proměnné - spíš jmenovka než přihrádka, problém více jmen pro stejnou hodnotu