Úvod do programování 7. hodina

Slides:



Advertisements
Podobné prezentace
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.
Advertisements

Kuchařka na práci s mnohočleny Matematika pro ZŠ Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je David Salač. Dostupné z Metodického portálu.
:-) Asymptotická složitost algoritmů Autor: Antonín DANĚK Semestrální projekt 1 – Y14TED.
Číslo projektu CZ.1.07/1.5.00/ Název školy Gymnázium Česká a Olympijských nadějí, České Budějovice, Česká 64 Název materiálu VY_32_INOVACE_IVT_1_KOT_02_CISELNE_SOUSTAVY.
Inf Tabulkový procesor - funkce. Výukový materiál Číslo projektu: CZ.1.07/1.5.00/ Šablona: III/2 Inovace a zkvalitnění výuky prostřednictvím ICT.
Úvod do programování 5. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015.
Ú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.
ČÍSLO PROJEKTU : CZ.1.07/1.4.00/ NÁZEV : VY_32_INOVACE_06_01_M7_Hanak AUTOR : Ing. Roman Hanák TÉMA : Racionální čísla Základní škola Libina, příspěvková.
Výukový materiál zpracovaný v rámci projektu EU peníze školám Registrační číslo projektu:CZ.1.07/1.4.00/ Šablona:III/2 Inovace a zkvalitnění výuky.
Výukový materiál zpracovaný v rámci projektu Číslo projektuCZ.1.07/1.4.00/ Šablona klíčové aktivityIII/2 SadaMatematika 6 NázevDesetinná čísla_8.
Název projektu: Moderní výuka s využitím ICT
VÝRAZY Matematické zápisy obsahující čísla (konstanty), písmena (proměnné) a početní operace ČÍSELNÉ S PROMĚNNOU √25 2.(4-7.8) 3x+7 4a3- 2a.
Mocniny, odmocniny, úpravy algebraických výrazů
MATEMATIKA Čísla celá základní pojmy.
Celá čísla VY_32_INOVACE_2.14.M.7 Ročník: 7. Vzdělávací oblast:
Lineární funkce - příklady
Lomené algebraické výrazy
IDENTIFIKÁTOR MATERIÁLU: EU
ZLOMKY II. – opakování pojmů a postupů při početních operacích
ČÍSLO PROJEKTU CZ.1.07/1.5.00/ ČÍSLO MATERIÁLU 1 – Množiny – teorie
Lineární rovnice a nerovnice I.
Dělení mnohočlenů mnohočlenem
Rozklad mnohočlenu na součin
Provozováno Výzkumným ústavem pedagogickým v Praze.
Název projektu: Moderní výuka s využitím ICT
Digitální učební materiál zpracovaný v rámci projektu
Číselné soustavy a kódy
MATEMATIKA Dělitel a násobek přirozeného čísla.
Základní škola a Mateřská škola Bílá Třemešná, okres Trutnov
Poměr Co je poměr. Změna v daném poměru..
Výukový materiál zpracován v rámci projektu
Financováno z ESF a státního rozpočtu ČR.
Mocniny s přirozeným mocnitelem pravidla pro počítání s nimi
Zlomky Složené zlomky..
Poměr v základním tvaru.
METODICKÝ LIST PRO ZŠ Pro zpracování vzdělávacích materiálů (VM)v rámci projektu EU peníze školám Operační program Vzdělávání pro konkurenceschopnost   
DIGITÁLNÍ UČEBNÍ MATERIÁL
Násobení čísly 10 a 100 VY_32_Inovace_14TK-1 Mgr
4.1 – 4.3 Lineární nerovnice i jednoduchý podílový tvar
Rovnice a nerovnice Lineární nerovnice Mgr. Jakub Němec
* Zlomky a smíšená čísla Matematika – 7. ročník *
* Složené zlomky Matematika – 7. ročník *
Obchodní akademie, Střední odborná škola a Jazyková škola s právem státní jazykové zkoušky, Hradec Králové Autor: Mgr. Vladimíra Houšková Název materiálu:
Výukový materiál zpracován v rámci projektu
Kvadratické nerovnice
Stavební fakulta ČVUT, B407
Rovnice základní pojmy.
11 DĚLENÍ ZLOMKŮ.
Číslicové měřící přístroje
Lomené algebraické výrazy
Početní výkony s celými čísly: sčítání a odčítání
Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Teorie chyb a vyrovnávací počet 1
Algebraické výrazy: lomené výrazy
Předmět: Informatika Ročník: VII. Tématický celek: Základy práce s PC
Obchodní akademie, Střední odborná škola a Jazyková škola s právem státní jazykové zkoušky, Hradec Králové Autor: Mgr. Lenka Marková Název materiálu:
Aritmetické operace s binárními čísly
Lomené výrazy (2) Podmínky řešitelnost
Poměr v základním tvaru.
MATEMATIKA – ARITMETIKA 6
34.1 Obecná pravidla pro mocniny s přirozeným mocnitelem
Matematika + opakování a upevňování učiva
Lineární funkce a její vlastnosti
Matematika – 7.ročník Mnohočleny VY_32_INOVACE_
MATEMATIKA – ARITMETIKA 7
Seminář o stavebním spoření
Algoritmizace a datové struktury (14ASD)
Desetinná čísla 6. ročník ZŠ.
Název školy: Základní škola a Mateřská škola Kladno, Norská 2633
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

Úvod do programování 7. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015

Úvod do programování 7. hodina Umíme z minulé hodiny Syntax Znaky Textové řetězce Algoritmy Lexikografické uspořádání Zřetězení, podřetězec Hledání indexu výskytu znaku, řetězce Vymazání, vložení a nahrazení znaku, řetězce Změna hodnoty znaku na pozici dané indexem Naše vlastní řetězce Vlastní implementace řetězcových algoritmů jsou výborné na procvičení schopností práce s polem Jan Lánský Úvod do programování 7. hodina

Úvod do programování 7. hodina Cíle hodiny Algoritmy Hornerovo schéma Převod mezi číselnými soustavami Dlouhá celá čísla (reprezentace) Součet, rozdíl, součin, podíl Dlouhá reálná čísla (reprezentace) Zlomky (reprezentace) Syntax Konstanty Jan Lánský Úvod do programování 7. hodina

Hornerovo schéma - Motivace Vyhodnocení polynomu pro zadané x – 2x4 +7x3 – 5x2 – 6x + 7 – 2*x*x*x*x + 7*x*x*x – 5*x*x – 6*x + 7 10 násobení, obecně n2 (((– 2*x+7)*x –5)*x –6)*x+7 4 násobení, obecně n Využití: převod čísla z jedné číselné soustavy do druhé Jan Lánský Úvod do programování 7. hodina

Hornerovo schéma - Formálně Polynom: a0 + a1x + … + anxn vyhodnotíme pro zadané x0 bn = an bn-1 = bn*x0+an-1 Výsledek b0 Převod čísla Np (= koeficienty polynomu ai ) zapsaného v číselné soustavě o základu p (=x0) na číslo Nq (=b0) zapsané v číselné soustavě o základu q (v této soustavě vyhodnocujeme aritmetické operace) V praxi se nejčastěji používá pro převod čísel zapsaných v soustavách o základech 2, 8, 16 na čísla zapsaná v soustavácho základu 10 Koeficienty polynomu = číslice Jan Lánský Úvod do programování 7. hodina

Příklady: převody čísel do desítkové soustavy 10110012 = 8910 (((((1*2+0)*2+1)*2+1)*2+0)*2+0)*2+1 416728 = 1733810 (((4*8+1)*8+6)*8+7)*8+2 B1D616 = 4552610 ((11*16+1)*16+13)*16+6 Jan Lánský Úvod do programování 7. hodina

Převod řetězce na číslo Aplikace Hornerova schématu: v řetězci jsou přirozeným způsobem uloženy jednotlivé cifry (= koeficienty polynomu) Převod znaku na číslici. Číslice jsou uspořádány za sebou Obdoba funkce Convert.ToInt32 Jan Lánský Úvod do programování 7. hodina

Převod mezi číselnými soustavami Obecně lze Hornerovo schéma použít na převod mezi libovolnými dvěmi číselnými soustavami, např. 8  11 V praxi se používá na převod z jiné číselné soustavy do desítkové, např. 2  10 Z desítkové do jiné číselné soustavy se používá reverzní postup: Metoda dělení základem. Převod z obecné číselné soustavy do jiné se provádí s mezikrokem desítkovou soustavou (např. 8  10  11) V desítkové soustavě se nám dobře provádí aritmetické operace Jan Lánský Úvod do programování 7. hodina

Metoda dělení základem Reverzní k Hornerově schématu Převod čísla N10 v desítkové soustavě na číslo Nq v soustavě q Operace v desítkové soustavě jdou snadno Postupně číslo N10 celočíselně dělíme q a zapisujeme zbytky po celočíselném dělení. První zbytek je nejméně významná číslice, poslední zbytek je nejvýznamnější číslice. Jan Lánský Úvod do programování 7. hodina

Příklady: převody čísel z desítkové soustavy 1310 = 11012 13 = 6 * 2 + 1 6 = 3 * 2 + 0 3 = 1 * 2 + 1 17260310 = 2A23B16 172603 = 10787 * 16 + 11 10787 = 674 *16 + 3 674 = 42 * 16 + 2 42 = 2 * 16 + 10 Jan Lánský Úvod do programování 7. hodina

Převod z desítkové soustavy do šestnáctkové I. Pomocné pole na jednotlivé cifry. Pro jistotu je zbytečné dlouhé, reálně by stačilo 20 Dokud má 16-kový zápis alespoň dvě cifry Dělíme základem soustavy Je nutné převést na 0…9A…F Aktuální cifra, zbytek po dělení Poslední cifra, co zbylo z původního čísla Jan Lánský Úvod do programování 7. hodina

Převod z desítkové soustavy do šestnáctkové II. Pole nutno obrátit. Cifry jsme zapisovali od nejméně významné, potřebujeme je mít od nejvíce významné Jen do půlky pole Měníme prvek od začátku pole se stejně umístěným prvkem od konce pole Vytvoříme řetězec z prvků pole od 0 do počtu cifer. 0 až 9 cifry A až F písmena Využíváme uspořádání za sebou Jan Lánský Úvod do programování 7. hodina

Dlouhá celá čísla - Motivace Vestavěné datové typy umějí počítat s maximální přesností 30 míst (decimal) Kombinatorika: 49! = 6.08e62 Nezachytíme přesně všechny cifry Jiná než dekadická čísla (šestnáctková) Řešení Vlastní datový typ pro práci s dlouhými čísly Operace + - * / Jan Lánský Úvod do programování 7. hodina

Dlouhá čísla reprezentace Použijeme int - je to plýtvání pamětí, ale nejsou třeba přetypování při implementaci Pole cifer datového typu int (případně byte, char, int) 1 prvek pole = 1 cifra nebo více cifer První prvek pole Nejvíce významná cifra Nejméně významná cifra Délka pole Přesně podle počtu cifer Větší, dané konstantou Nejsnazší 1 cifra Big Endian Little Endian Musíme spočítat počet cifer výsledku operace, zbytečně moc náročné Spousta nul navíc, hrozí přetečení. Ale nejsnazší implementace. Lze si pamatovat počet cifer, aby se pro nuly neprováděly operace Jan Lánský Úvod do programování 7. hodina

Dlouhá čísla reprezentace Číslo 17201 reprezentováno na 10 cifer Budeme používat na cvičení Big endian – nejvíce významný bit na začátku pole 1 7 2 Little endian – nejméně významný bit na začátku pole Čteme odzadu Budeme používat na přednášce 1 2 7 Jan Lánský Úvod do programování 7. hodina

Konstanta Proměnná, která je při deklaraci inicializována hodnotou, která se nemůže změnit. Obvykle má smysl být globální Př.: délka pole pro práci s celými čísly Globální konstanta maxDel Globální konstanty nemají static Jan Lánský Úvod do programování 7. hodina

Úvod do programování 7. hodina Dlouhá čísla - Operace Vytvoření (z řetězce) a výpis (obrazovka) Porovnání – Compare 0, -1, 1 Sčítání Odečítání - menšího čísla od většího Násobení Celočíselné dělení: Vyžaduje Odečítání, Porovnání a PravýPosun PravýPosun: vynásobení mocninou desítky Implementace: podobná jako školní algoritmus "ruční počítání pod sebe" Jan Lánský Úvod do programování 7. hodina

Dlouhá čísla: Vytvoření a výpis Little endian Načítáme cifry odzadu Little endian Vypisujeme cifry odzadu Úvodní nuly skončily Přeskočíme úvodní nuly Jan Lánský Úvod do programování 7. hodina

Dlouhá čísla - součet Od nejméně významné cifry po nejvíce významnou cifru Sečteme cifry a přenos z nižšího řádu prenos nabývá hodnot 0 a 1 Z hodnot 0 až 19 uděláme 0 až 9 Jan Lánský Úvod do programování 7. hodina

Dlouhá čísla - součet 8 4 6 7 3 1 2 9 5 6 + 2 + 0 = 8 5 + 9 + 0 = 14 0 + 5 + 1 = 6 7 + 0 + 0 = 7 6 + 7 + 0 = 13 5 + 4 + 0 = 10 9 + 0 + 1 = 10 9 + 0 + 1 = 10 0 + 0 +1 = 1 0 + 0 + 0 = 0 8 4 6 7 3 1 2 9 5 x+ y = 100037648 y = 470592 x = 99567056 i Červená došlo k přenosu Zelená bez přenosu Oranžová – úvodní nuly Jan Lánský Úvod do programování 7. hodina

Dlouhá čísla - rozdíl Musí platit x>=y Od nejméně významné cifry po nejvíce významnou cifru Odečteme cifry a započteme případný přenos z nižšího řádu (0, -1) Podtečení: přenos do vyššího řádu a normalizace hodnoty -10 až 9 na 0 až 9 Jan Lánský Úvod do programování 7. hodina

Dlouhá čísla - rozdíl 4 6 9 2 5 7 1 3 8 6 - 2 + 0 = 4 5 - 9 + 0 = - 4 0 - 5 - 1 = - 6 7 - 0 - 1 = 6 6 - 7 + 0 = -1 5 - 4 - 1 = 0 9 - 0 + 0 = 9 0 - 0 +0 = 0 0 - 0 + 0 = 0 4 6 9 2 5 7 1 3 8 x - y = 99096464 y = 470592 x = 99567056 i Červená došlo k přenosu Zelená bez přenosu Oranžová – úvodní nuly Jan Lánský Úvod do programování 7. hodina

Dlouhá čísla - součin Školní algoritmus násobí cifrou celé číslo a tyto součiny sčítá. Náš postup je ekvivalentní Vynásobíme každou cifru x s každou cifrou y Pokud není podmínka splněna, jedná se o cifry oblasti přetečení. Neřešíme Jednotlivé součiny sečteme Normalizujeme cifry výsledku do 0 až 10 pomocí přenosu do vyššího řádu. Vzhledem k volbě datového typu int, funkční i pro čísla o 20 mil. cifrách Jan Lánský Úvod do programování 7. hodina

Úvod do programování 7. hodina Dlouhá čísla - součin Oranžová – úvodní nuly zelená – bez přenosu červená - přenos 4 7 9 14 46 33 6 12 42 21 2 3 1 vys[i] vys[i+j] 2 * 2 = 4 2 * 6 = 12 2 * 3 = 6 14+0 = 4 + 1*10 42+4+ 1= 7 + 4*10 21+12+4=7+3*10 0+6+3=9+0*10 0+0+0 = 0+0*10 j = 1 j = 0 7 * 2 = 14 7 * 6 = 42 7 * 3 = 21 y = 27 x = 362 i 362 * 27 = 9774 Jan Lánský Úvod do programování 7. hodina

Dlouhá čísla: pravý posun a porovnání Posuneme doprava cifry na významnější řády. Pro little endiany je to ekvivalent vynásobení mocninou desítky Prvky nejvíce napravo se zahodí. Předpokládáme, že mají hodnotu nula Potřeba pro děleni Analogicky jako lexikografické uspořádání 0 rovnost, -1 první je menší, +1 první je větší Jan Lánský Úvod do programování 7. hodina

Dlouhá čísla – pravý posun Posun o 2 6 5 7 1 2 3 4 8 9 vys = 6705600 x = 67056 i Červená – vložené nuly Zelená - posun Oranžová – úvodní nuly Jan Lánský Úvod do programování 7. hodina

Dlouhá čísla – podíl I. Výpočet posunu Procházíme úvodní nuly na nejvyšších pozicích y, končíme když narazíme na první nenulový prvek. Sledujeme, zda x má příslušných nejvyšších pozicích také úvodní nuly. Pokud x už úvodní nuly nemá, zvyšuje posun. Potřebujeme spočítat kolik řádů rozdílu je mezi x a y. Sledujeme o kolik má y více úvodních nul na nejvyšších pozicích než x. Jan Lánský Úvod do programování 7. hodina

Dlouhá čísla – podíl I. Výpočet posunu 5 - 4 - 1 = 0 9 - 0 + 0 = 9 0 - 0 +0 = 0 0 - 0 + 0 = 0 x 2 1 9 5 7 4 6 3 8 posun y = 470592 x = 99567056 i Červená došlo ke zvýšení Zelená konec cyklu Žlutá nedošlo ke zvýšení Oranžová – úvodní nuly Jan Lánský Úvod do programování 7. hodina

Dlouhá čísla – podíl II. Iterativní odečítání Dokud y nemá více cifer než x. Posuneme y o daný počet míst doprava (Vynásobíme y mocninou desítky) Dokud je x větší než posunuté y, od x odečítáme posunuté y Za každé odečtení zvýšíme hodnotu cifry na příslušném řádu výsledku. Čím byl nutný vyšší posun, tím vyšší řád V další iteraci budeme y posouvat o jedno místo méně. Jan Lánský Úvod do programování 7. hodina

Dlouhá čísla – podíl I. Iterativní odečítání Vnitřní cyklus končí, od x už nejde y odečíst. Dojde ke snížení posunu (z 2 na 1) a proběhne další iterace vnějšího cyklu Výsledek: vys[2] = 2 6 5 8 4 7 2 9 1 3 2. krok 5448656 1. krok 52508756 y = 47059200 x = 99567056 i Žlutá – nová hodnota x Zelená – nuly z posunu Oranžová – úvodní nuly Jan Lánský Úvod do programování 7. hodina

Dlouhá čísla - ukázka Cca 40 cifer, nešlo by přesně v žádném vestavěném datovém typu Pro testování správnosti funkcí webová aplikace Wolfram alfa Jan Lánský Úvod do programování 7. hodina

Reprezentace dlouhých reálných čísel Postupy pro operace podobné jako u celých čísel Struktura Znaménko, pole cifer, a exponent Přetečení nejvyššího řádu – zvýšení exponentu a posun cifer doleva Doposud jsme ignorovali Podtečení nejvyššího řádu – snížení exponentu a posun cifer doprava Doposud nemohlo nastat Implementace na cvičení Jan Lánský Úvod do programování 7. hodina

Dlouhá reálná čísla – ukázka reprezentace 5 6 8 7 -52 + 2 9 4 - -3 785605e-55 256.2e5 -20569.05698 -0.005690096 9.000000000 Cifry little endian Exponent znaménko Jan Lánský Úvod do programování 7. hodina

Reprezentace (dlouhých) zlomků Umožňuje udržovat racionální čísla v nezaokrouhleném stavu. Struktura Znaménko, čitatel a jmenovatel reprezentované pomocí (dlouhého) celého čísla Operace + - * / Postupy jako při ručním počítání Na konci jednotlivých operacích pomocí Euklidova algoritmu převést zlomek na základní tvar. Implementace na cvičení Jan Lánský Úvod do programování 7. hodina

Úvod do programování 7. 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 http://goo.gl/forms/WxkZqBsZLs Jan Lánský Úvod do programování 7. hodina