Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Úvod do programování 4. hodina
RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015
2
Úvod do programování 4. hodina
Umíme z minulé hodiny Syntax Funkce Datové typy (celočíselné, reálné, bool, …) Priorita a asociativita operátorů Náhodná čísla Random Výčtové typy enum Vícenásobně větvení switch Struktura struct – příklad datum Matematické funkce Math Testování správnosti programu Jan Lánský Úvod do programování 4. hodina
3
Úvod do programování 4. hodina
Cíle hodiny Syntax Předávání parametrů funkce referencí ref Pole Algoritmy Kopie pole Nesetříděné pole: nalezení hodnoty a počtu výskytů, nejdelší posloupnost stejných hodnot Eratostenovo síto Ladění programu Jan Lánský Úvod do programování 4. hodina
4
Předávání parametrů referencí - motivace
Standardně se parametry funkce předávají hodnotou Hodnoty parametrů, se kterými je funkce zavolána se okopírují. V těle funkce se pracuje s kopiemi, které se nakonec zahodí Reference umožňuje modifikovat předávaný parametr v těle funkce Pracuje se přímo s proměnnou, kterou jsme funkci předali při jejím volání. Změna hodnoty ve volané funkci se projeví ve volající funkci. Řešení problému: chceme z funkce vrátit více hodnot. Chceme modifikovat některé položky struktury Jan Lánský Úvod do programování 4. hodina
5
Předávání parametrů Referencí vs hodnotou
Nelze fce (5); Lze fce (x); Modifikace parametru v těle funkce se projeví ve volající funkci Hodnotou Lze fce (5); Lze fce (x); Modifikace parametru v těle funkce se neprojeví ve volající funkci Jan Lánský Úvod do programování 4. hodina
6
Reference - Prohození dvou hodnot
Pokud je formální parametr ref Skutečný parametr musí být také ref Bez ref by bylo x = 5, y = 2 // x = 2; y = 5; Nejde Prohod (ref 5, ref 2) Jan Lánský Úvod do programování 4. hodina
7
Pole – motivace: Hod kostkou
Chceme: Zaznamenat výsledky pěti hodů kostkou Nepraktické: Hodů může být i 1000 Chceme: Jeden identifikátor proměnné pro všechny hody Jan Lánský Úvod do programování 4. hodina
8
Pole - vlastnosti Pole – složený datový typ
Uchovávání hodnot, které mají podobný význam Pole – složený datový typ Posloupnost n prvků daného datového typu. Počet prvků pole = délka pole Délka pole nejde měnit. Na začátku práce s polem musíme vědět, kolik prvků bude maximálně. Pole obsahuje prvky s indexy 0 až n-1 Přístup k libovolnému prvku pole pomocí pole[index]. Nesetříděné vs. setříděné pole Jan Lánský Úvod do programování 4. hodina
9
Pole - příklad Neinicializované pole nezná svoji velikost, nelze použít jeho prvky ani na levé straně přiřazení Deklarace: datový typ [] proměnná Inicializace: new datový typ[velikost] Pole po inicializaci obsahuje samé nuly Přístup k prvku pole: proměnná[index] Není nutné stanovit hodnoty všech prvků explicitně Př. hody[2] 1 2 3 4 2 5 6 Kopie hodnoty prvku pole Jan Lánský Úvod do programování 4. hodina
10
Pole - výpis Pole jako parametr funkce. Délka pole: položka Length
pole[pole.Length] Už není už v poli, poslední prvek pole má index pole.Length - 1 Pole začíná od nuly pole[0] – prvek pole s indexem 0 Lidově: „nultý prvek pole“ Formálně „první prvek pole“ Jan Lánský Úvod do programování 4. hodina
11
Náhodné pole Vytvoříme nové pole v těle funkce, naplníme ho náhodnými hodnotami, toto pole bude návratovou hodnotou funkce Vracíme pole V existujícím poli přepíšeme hodnoty na náhodné Měníme hodnoty prvků Pole jako parametr funkce. Jednotlivé položky pole se chovají, jako by byly předávané referencí – lze je modifikovat Jan Lánský Úvod do programování 4. hodina
12
Pole - inicializace Neinicializované pole nezná svoji velikost, jeho prvky nelze použít ani na levé straně přiřazení NE int p1; p1[0] = 5; Zadáme konkrétní hodnoty – jde pouze při deklaraci Přiřadíme návratovou hodnotu funkce, která vrací pole Vytvoříme vynulované pole Existující pole vyplníme náhodnými hodnotami Nedojde ke kopii pole. Ale pouze vytvoříme druhé pojmenování pro existující pole. Obě pole obsahují stejné prvky, modifikace hodnoty prvku provedená v jednom poli se projeví i u hodnoty prvku v druhém poli. Jan Lánský Úvod do programování 4. hodina
13
Kopie pole Vytvoříme pole shodné délky Okopírujeme jednotlivé prvky
Jan Lánský Úvod do programování 4. hodina
14
Hledání v nesetříděném poli
Nachází se zadaná hodnota v zadaném nesetříděném poli? Varianty Index prvního výskytu hodnoty Počet výskytů hodnoty Řešení: Projdeme postupně celé pole a hodnoty jednotlivých prvků pole porovnáváme s hledanou hodnotou. Index prvního výskytu: Lze předčasně ukončit hledání, při jeho nalezení. Jan Lánský Úvod do programování 4. hodina
15
Hledání v nesetříděném poli
Hodnota nalezena, zvýšíme čítač Př.: hodnota = 2 i =7 vyskytu = 3 pole[i] == 2 i =1 vyskytu = 1 i =4 vyskytu = 2 i =8 vyskytu = 7 1 2 3 4 5 6 7 8 9 i pole[i] Jan Lánský Úvod do programování 4. hodina
16
Hledání v nesetříděném poli
Hodnota nalezena, vracíme index prvního výskytu hodnota nenalezena Jan Lánský Úvod do programování 4. hodina
17
Nejdelší souvislá posloupnost prvků se shodnými hodnotami
Souvislá posloupnost je část pole, která obsahuje všechny prvky pole s indexy min až max Chceme, aby prvky posloupnosti měli shodnou hodnotu Hledáme nejdelší takovouto posloupnost Jsou-li dvě posloupnosti stejně dlouhé, vezmeme první z nich Výsledek Délka nejdelší posloupnosti Index prvního prvku nejdelší posloupnosti Jan Lánský Úvod do programování 4. hodina
18
Nejdelší souvislá posloupnost - příklad
Př.: Pole: 5, 3, 2, 2, 1, 4, 4, 4, 3, 3 Tři posloupností délky 1 (5; 3; 1;) Dvě posloupnosti délky 2 (2, 2 a 3, 3) Jedna posloupnost délky 3 (4, 4, 4) Mezi 3 a 3, 3 se nachází 2, 2, 1, 4, 4, 4, proto netvoří souvislou posloupnost délky 3 Jan Lánský Úvod do programování 4. hodina
19
Nejdelší souvislá posloupnost
max – délka nejdelší posloupnosti akt – delka aktuální posloupnosti hodAkt, hodMax – hodnota prvků v aktuální / nejdelší posloupnosti Prodloužíme aktuální posloupnost o jeden prvek Začneme novou jednoprvkovou posloupnost Našli jsme novou nejdelší posloupnost Vždy je nutné se zamyslet nad 0-tým a posledním prvkem pole – řešení není vždy elegantní Vracíme hodnotu prvků nejdelší posloupnosti Jan Lánský Úvod do programování 4. hodina
20
Nejdelší souvislá posloupnost
Hodnoty proměnných na konci cyklu 1 2 3 4 5 6 7 8 9 i akt hodAkt hodAkt – Tato proměnná je zde kvůli prvnímu prvku pole max hodMax pole[i] Jan Lánský Úvod do programování 4. hodina
21
Úvod do programování 4. hodina
Eratostenovo síto Nalezne všechna prvočísla mezi čísly menšími než n Rychlejší postup (O(n log(log n)) než hrubou silou testovat, zda každé číslo je prvočíslo (O(n n)) . Pokud nechceme všechna prvočísla, ale pouze o jednom číslu chceme vědět, zda je prvočíslo, je výhodnější klasický postup. Používá pole délky n Po skončení algoritmu je pro každé číslo x < n v poli uložena informace, zda je či není prvočíslem Jan Lánský Úvod do programování 4. hodina
22
Úvod do programování 4. hodina
Eratostenovo síto Napíšeme všechna čísla 2 až n Vezme nejmenší číslo x a vyškrtáme jeho násobky x*x a vyšší Z nevyškrtaných čísel vezmeme další nejmenší číslo y a vyškrtáme jeho násobky, atd. … Zbylá čísla jsou prvočísla Jan Lánský Úvod do programování 4. hodina
23
Úvod do programování 4. hodina
Eratostenovo síto 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 Jan Lánský Úvod do programování 4. hodina
24
Eratostenovo síto Nastavíme celé pole na true. Každé číslo je kandidát na prvočíslo. Postupně tyto kandidáty budeme vyškrtávat Pole logických hodnot Stačí do odmocniny Vyšší čísla jsou prvočísla Není prvočíslo Vyškrtáme násobky prvočísla. Stačí začít u druhé mocniny, nižší násobky byly vyškrtány již dříve Netradiční inkrement: zajímají nás násobky proměnné i Jan Lánský Úvod do programování 4. hodina
25
Eratostenovo síto Má-li prvek pole[i] hodnotu true, poté číslo s indexem i je prvočíslo Jan Lánský Úvod do programování 4. hodina
26
Úvod do programování 4. hodina
Kde se často chybuje Začátky a konce cyklů a polí Pole od 0 do Length-1 Neošetření nevhodných vstupních dat Jednoprvková a prázdná pole Záměna ostré a neostré nerovnosti Př.: x>0 vs. x>=0 Přiřazení = vs. porovnání == Celočíselné vs. reálné dělení Přetečení datových typů Jan Lánský Úvod do programování 4. hodina
27
Úvod do programování 4. hodina
Ladění programu Minulou hodinu jsme se naučili otestovat správnost programu. Nyní se naučíme odstranit případné chyby. Prostředky vývojového prostředí Hlášení kompilátoru (error, warning) Breakpoints F9, Step Over F10, Step Into F11 Watch, Call stack, Ladící výpisy Minimalizace vstupu Minimalizace zdrojového kódu Jan Lánský Úvod do programování 4. hodina
28
Úvod do programování 4. hodina
Hlášení kompilátoru Okno s hlášeními se nachází ve spodní částí MVS Error (Chyba) program nejde zkompilovat (a spustit), nutno opravit Ve zdrojovém kódu podtržené červenou vlnovkou Warning (varování) upozornění na možnou chybu, doporučeno opravit, ale program jde zkompilovat (a spustit) Ve zdrojovém kódu podtržené zelenou vlnovkou Po kliknutí na řádek s chybou (varováním) se kurzor ve zdrojovém kódu přemístí na místo výskytu Každé hlášení má své číslo – lze googlit Př. CS1513 chybějící pravá složená závorka Jan Lánský Úvod do programování 4. hodina
29
Hlášení kompilátoru 3 chyby a 1 varování
CS0160 – varování: deklarována proměnná „o“ je nepoužitá CS1502 – chyba: Funkce „Prohod“ volána se špatnými argumenty CS1620 – chyba (2x): argument musí být reference Modrý řádek je aktuální zpracovávané hlášení Jan Lánský Úvod do programování 4. hodina
30
Úvod do programování 4. hodina
Breakpoints Vytvoření a zrušení Nastavíme se na příkaz a klávesa F9 Klik myší nalevo před řádkem (červený kruh) Program se po spuštění pří průchodu breakpointem zastaví můžeme využít další ladící prostředky Doporučení umístění: Místo, kde se program začíná chovat divně Začátky cyklů, podmínek, funkcí Jan Lánský Úvod do programování 4. hodina
31
Krokování programu Po zmáčknutí klávesy se provede jeden příkaz programu Step Over F10 Volání funkce se vykoná jako jeden příkaz Pokud si jsme jisti, že funkce neobsahuje chybu Step Into F11 Při volání funkce vstoupíme do těla funkce Pokud si nejsme jisti, že funkce neobsahuje chybu Program lze krokovat od začátku nebo od breakpointu Žlutý řádek je aktuálně vykonávaný Jan Lánský Úvod do programování 4. hodina
32
Úvod do programování 4. hodina
Watch Objeví se po pozastavení běhu programu (krokování, breakpointy) v dolním levém rohu Umožňují sledovat hodnoty proměnných a výrazů Hodnoty proměnných lze sledovat i najetím myši na danou proměnnou ve zdrojovém kódu Pole lze i rozkliknout a vidět jednotlivé prvky Jan Lánský Úvod do programování 4. hodina
33
Úvod do programování 4. hodina
Call Stack Zásobník volání funkcí Objeví se po pozastavení běhu programu (krokování, breakpointy) v dolním pravém rohu Umožňuje přepnout do kontextu volající funkce (a pomocí Watch prohlížet její proměnné) Jan Lánský Úvod do programování 4. hodina
34
Call Stack Jména funkci i s hodnotami parametrů
Kliknutím na funkci se přepneme do jejího kontextu, ve zdrojovém kódu zelený řádek Funkce na spodním řádku volá funkci na horním řádku Jan Lánský Úvod do programování 4. hodina
35
Úvod do programování 4. hodina
Ladící výpisy Vypisujeme hodnoty proměnných na obrazovku (souboru, databáze) Co vypisovat Každou proměnnou při změně hodnoty Vybrané proměnné na začátku (konci) cyklu Oproti Watch vidíme více informací najednou. Složitější chyby, které neodhalíme Watch Pokud Watch nejsou k dispozici (exotické vývojové prostředí) Jan Lánský Úvod do programování 4. hodina
36
Úvod do programování 4. hodina
Ladící výpisy Jan Lánský Úvod do programování 4. hodina
37
Úvod do programování 4. hodina
Minimalizace vstupu Hledáme nejmenší vstup, na kterém se chyba ještě projevuje Kratší pole Špatně hledáme minimum v poli o 100 prvcích? Zkusíme pole, které má 5 prvků Menší hodnoty čísel Nefunguje Euklidův algoritmus pro čísla dva trojciferné vstupy? Zkusme jednociferné vstupy Chyba se projeví za kratší čas Jan Lánský Úvod do programování 4. hodina
38
Minimalizace zdrojového kódu
Pokročilá technika, kdy nic jiného nepomáhá V našich případech nebude nutné Zakomentujeme části zdrojového kódu, o kterých si myslíme, že pro konkrétní vstupní data se nevykonají Nahradíme části zdrojového kódu již hotovým výpočtem, pokud si myslíme, že pro naše vstupní data tato část funguje správně Jan Lánský Úvod do programování 4. hodina
39
Úvod do programování 4. hodina
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 Jan Lánský Úvod do programování 4. hodina
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.