Úvod do programování 9. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015
Jan LánskýÚvod do programování 9. hodina2 Umíme z minulé hodiny Soubory Textové (= textový režim přístupu) StreamReader, StreamWriter Binární (= binární režim přístupu) BinaryReader, BinaryWriter Syntax Čtení ze souboru a zápis do souboru Správa souborového systému Directory, File, Path, FileInfo
Jan LánskýÚvod do programování 9. hodina3 Cíle hodiny Syntax Dvojrozměrné pole Pole polí String.Split() Algoritmy Násobení řádku matice konstantou Prohození dvou řádků matice Součet matic Součin matic ASCII Art
Jan LánskýÚvod do programování 9. hodina4 Dvojrozměrné pole - Motivace Pole slouží k uchovávání hodnot, jejichž význam je podobný Jednorozměrné pole – pořadí prvků Dvojrozměrné pole – prvky lze uspořádat dle více dimenzí Prostorové a časové dimenze Vícerozměrná pole – vzácná, více dimenzí (lze je snadno odvodit z dvojrozměrných) Známe Nebudeme probírat Cíl hodiny
Jan LánskýÚvod do programování 9. hodina5 Dvojrozměrné pole - Využití Matice Hrací plocha pro hry Piškvorky, šachy, sudoku, miny, pexeso, … 2D PC hry: arkády, strategie, RPG, … Jednorozměrné pole použité v čase Losování sportky v různé týdny Jednorozměrné pole použití pro více osob (míst, …) Hody kostkou více hráči, Naměřené teploty v čase z více měřících stanic Jemnější granularita dimenze Naměřené teploty v daný den a čas
Jan LánskýÚvod do programování 9. hodina6 Dvojrozměrné pole - deklarace int[,] – Počet čárek = počet dimenzí – 1 Vytvořit prázdné new int[r1, r2] Inicializovat prvky hodnoty ve složených závorkách oddělené čárkou Nejvíce zanořený je vnitřní rozměr Neplést s polem polí: int[][] Rozměry pole 2x Pole p
Jan LánskýÚvod do programování 9. hodina7 Dvojrozměrné pole přístup k prvkům Indexy odděleny čárkou Vnější rozměr pole Vnitřní rozměr pole Výpis pole na obrazovku Další řádek Řádek - vnější rozměr Sloupec - vnitřní rozměr
Jan LánskýÚvod do programování 9. hodina8 Pole: Násobilka Vnější rozměr pole j Vnitřní rozměr pole i
Jan LánskýÚvod do programování 9. hodina9 Piškvorky 6 7X 8OX 9O 10OX Vnější rozměr pole Vnitřní rozměr pole Nově vytvořené prvky pole máji hodnotu Nic, je první v deklaraci výčtového typu Zobrazena jen část hracího pole
Jan LánskýÚvod do programování 9. hodina10 Matice – násobení řádku konstantou Původní matice M Proměnné by neměly začínat velkými písmeny. V případě matic je značení velkými písmeny tak vžité, že je možné i pro proměnné [0,0] [0,1] [0,2] [1,0] [1,1] [1,2] [2,0] [2,1] [2,2] Obrázky matic: Wolfram Alpha, stejná syntax jako v C# V Matematice index 1,2,3 Matice M, která má vynásobený řádek 0 hodnotou 4
Jan LánskýÚvod do programování 9. hodina11 Matice – násobení řádku konstantou 4* = j = *2 = 8 4*6 = 24 4*5 = 20 Horní barva: konstanta Dolní barva: prvek matice Na vybraném řádku 0 postupně vynásobíme hodnoty všech prvků konstantou 4 Cyklus prochází sloupce vnitřní rozměr – řídí j radek = 0
Jan LánskýÚvod do programování 9. hodina12 Matice – prohození dvou řádků Původní matice M [0,0] [0,1] [0,2] [1,0] [1,1] [1,2] [2,0] [2,1] [2,2] Obrázky matic: Wolfram Alpha, stejná syntax jako v C# V Matematice index 1,2,3 Matice M, která má prohozené řádky 2 a 0
Jan LánskýÚvod do programování 9. hodina13 Matice – prohození dvou řádků j = Cyklus prochází sloupce vnitřní rozměr – řídí j Výměna prvků A[r1, j] a A[r2, j] r1 = 0 r2 = 2
Jan LánskýÚvod do programování 9. hodina14 Součet matic M1 + M2 [0,0] [0,1] [0,2] [1,0] [1,1] [1,2] [2,0] [2,1] [2,2] Obrázky matic: Wolfram Alpha, stejná syntax jako v C# V Matematice index 1,2,3
Jan LánskýÚvod do programování 9. hodina15 Součet matic Rozměry matic si musí odpovídat. Jinak vrátíme matici 0x0 Rozměr výsledku bude jako rozměr A (tedy i B) Sčítáme prvky na stejné pozici v A i B Dva vnořené cykly: řádky pak sloupce
Jan LánskýÚvod do programování 9. hodina16 Součet matic = j = i= 0 1 2i= i = 0 žlutá až oranžová i = 1 modrá i = 2 červená
Jan LánskýÚvod do programování 9. hodina17 Matice - součin M1 * M2 [0,0] [0,1] [0,2] [1,0] [1,1] [1,2] [2,0] [2,1] [2,2] Obrázky matic: Wolfram Alpha, stejná syntax jako v C# V Matematice index 1,2,3
Jan LánskýÚvod do programování 9. hodina18 Součin matic Počet sloupců A se musí rovnat počtu řádků B Výsledek má stejně řádků jako matice A a sloupců jako matice B Skalární součin i-tého řádku A s j-tým sloupcem B Tři vnořené cykly: 1.řádky A 2. sloupce B 3. sloupce A a řádky B Postupně přičítáme jednotlivé násobky tvořící skalární součin
Jan LánskýÚvod do programování 9. hodina19 Součin matic *235= k = j = i= 0 1 2i= Prvek je skalární součin řádku A a sloupce B Horní barva: řádek A Dolní barva: sloupec B vys[0,0] = 2 * * * 5 = 17 vys[2,2] = 4 * * * 3 = 60 k k k je řídící proměnná skalárního součinu
Jan LánskýÚvod do programování 9. hodina20 ASCII Art Jaký obrazec vytvoří ? Minimální ze 4 vzdáleností od okrajů Sudá – tečka Lichá - mezera
Jan LánskýÚvod do programování 9. hodina21 ASCII Art - Výsledek Velikost lichá Velikost sudá Jsou to čtverce co do počtu znaků
Jan LánskýÚvod do programování 9. hodina22 Pole polí - Motivace Dvojrozměrné pole n x m lze chápat jako pole, které obsahuje n polí délky m Pole polí – pole n x ? je pole, které obsahuje n polí (obvykle) různé délky Pole textových řetězců (každý textový řetězec je pole) Návratová hodnota funkce Directory.GetFiles Návratová hodnota funkce String.Split Znát aspoň pasivně, některé funkce je vrací
Jan LánskýÚvod do programování 9. hodina23 Pole polí - deklarace Pole obsahující 11 polí Naplníme částí malé násobilky Trojúhelník (naše volba), postupně zvětšujeme velikost jednotlivých polí Každé vnitřní pole je různě velké GetLength(1) Je chyba pp[i, j] je chyba int [,] je dvojrozměrné pole int [][] je pole polí
Jan LánskýÚvod do programování 9. hodina24 Pole polí - trojúhelník Vnější rozměry polí pp[i] j Vnitřní rozměr pole i
Jan LánskýÚvod do programování 9. hodina25 GetFiles Vrátí názvy souborů v zadaném adresáři Jen název souboru bez cesty H8.exe 1H8.pdb 2H8.vshost.exe Vnitřní rozměr pole i Vnější rozměry polí ss[i] Délky řetězců j
Jan LánskýÚvod do programování 9. hodina26 Split Absolutní cesta k aktuálnímu adresáří Řetězec rozdělíme na řetězce podle zadaného oddělovače (u nás lomítko odděluje adresáře). Dostaneme pole adresářů, které se nacházejí v cestě od kořene k aktuálnímu adresáři Upg 1hodina9 2split 3bin 4debug Vnitřní rozměr pole i Vnější rozměry polí ss[i] Délky řetězců j
Jan LánskýÚvod do programování 9. hodina27 Zpětná vazba Objevili jste ve slajdech chyby? Včetně pravopisných Nechápete nějaký slajd? Je příliš obtížný, nesrozumitelný? Máte nějaký nápad na vylepšení? Anonymní formulář Odeslání za pár vteřin