Algoritmizace. Ing. Jana Pšenčíková. Vzdìlávání, které baví www.computermedia.cz. Nakladatelství a vydavatelství



Podobné dokumenty
ALGORITMIZACE PROGRAMOVÁNÍ VT3/VT4

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

ALGORITMIZACE Příklady ze života, větvení, cykly

Lekce 01 Úvod do algoritmizace

Programování v Pascalu. Ing. Jana Pšenčíková

TEMATICKÝ PLÁN. září říjen

MATEMATIKA 5. TŘÍDA. C) Tabulky, grafy, diagramy 1 - Tabulky, doplnění řady čísel podle závislosti 2 - Grafy, jízní řády 3 - Magické čtverce

Pracovní listy - programování (algoritmy v jazyce Visual Basic) Algoritmus

Základy algoritmizace

Programy na PODMÍNĚNÝ příkaz IF a CASE

Učební plán 4. letého studia předmětu matematiky. Učební plán 6. letého studia předmětu matematiky

Vzdělávací oblast: Matematika a její aplikace Vzdělávací obor: Matematický kroužek pro nadané žáky ročník 9.

Jednoduché cykly

Témata absolventského klání z matematiky :

Projekt IMPLEMENTACE ŠVP. pořadí početních operací, dělitelnost, společný dělitel a násobek, základní početní operace

Matematika PRŮŘEZOVÁ TÉMATA

ZŠ ÚnO, Bratří Čapků 1332

A I 9 O r itrn iz a c e

Mgr. Ladislav Zemánek Maturitní okruhy Matematika Obor reálných čísel

Maturitní témata profilová část

Požadavky k opravným zkouškám z matematiky školní rok

Matematika. ochrana životního prostředí analytická chemie chemická technologie Forma vzdělávání:

1 Základy algoritmizace a programování. 1.1 Algoritmus Možnosti zápisu algoritmů. Základy algoritmizace a programování

Matematika - 6. ročník Očekávané výstupy z RVP Učivo Přesahy a vazby desetinná čísla. - zobrazení na číselné ose

MATURITNÍ TÉMATA Z MATEMATIKY

II. Úlohy na vložené cykly a podprogramy

Požadavky k opravným zkouškám z matematiky školní rok

Maturitní témata z matematiky

Cvičné texty ke státní maturitě z matematiky

Učební osnovy Vzdělávací oblast: Matematika a její aplikace Vzdělávací obor: Matematický kroužek pro nadané žáky ročník 9.

Číslo hodiny. Označení materiálu. 1. Mnohočleny. 25. Zlomky. 26. Opakování učiva 7. ročníku. 27. Druhá mocnina, odmocnina, Pythagorova věta

ZŠ ÚnO, Bratří Čapků 1332

Tematický plán Obor: Informační technologie. Vyučující: Ing. Joanna Paździorová

Maturitní otázky z předmětu MATEMATIKA

CVIČNÝ TEST 5. OBSAH I. Cvičný test 2. Mgr. Václav Zemek. II. Autorské řešení 6 III. Klíč 17 IV. Záznamový list 19

Předmět: MATEMATIKA Ročník: PRVNÍ Měsíc: učivo:. ZÁŘÍ ŘÍJEN LISTOPAD PROSINEC

ALGORITMIZACE A PROGRAMOVÁNÍ

Měsíc: učivo:. PROSINEC Numerace do 7, rozklad čísla 1 7. Sčítání a odčítání v oboru do 7, slovní úlohy.

Gymnázium Česká a Olympijských nadějí, České Budějovice, Česká 64, 37021

volitelný předmět ročník zodpovídá CVIČENÍ Z MATEMATIKY 8. MACASOVÁ Učivo obsah

Komplexní čísla, Kombinatorika, pravděpodobnost a statistika, Posloupnosti a řady

B) výchovné a vzdělávací strategie jsou totožné se strategiemi vyučovacího předmětu Matematika.

MATEMATIKA STUDIJNÍ POŽADAVKY PRO JEDNOTLIVÉ ROČNÍKY STUDIA

Matematika. 9. ročník. Číslo a proměnná. peníze, inflace. finanční produkty, úročení. algebraické výrazy, lomené výrazy (využití LEGO EV3)

SBÍRKA ÚLOH I. Základní poznatky Teorie množin. Kniha Kapitola Podkapitola Opakování ze ZŠ Co se hodí si zapamatovat. Přírozená čísla.

Budoucí hodnota anuity Spoření

Cvičení z matematiky jednoletý volitelný předmět

Učivo obsah. Druhá mocnina a odmocnina Druhá mocnina a odmocnina Třetí mocnina a odmocnina Kružnice a kruh

Maturitní okruhy z matematiky - školní rok 2007/2008

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Výukový materiál zpracován v rámci projektu EU peníze školám

Planimetrie 2. část, Funkce, Goniometrie. PC a dataprojektor, učebnice. Gymnázium Jiřího Ortena, Kutná Hora. Průřezová témata Poznámky

0.1 Úvod do matematické analýzy

Komisionální přezkoušení 1T (druhé pololetí) 2 x. 1) Z dané rovnice vypočtěte neznámou x:. 2) Určete, pro která x R není daný výraz definován:

Lekce 04 Řídící struktury

Základní škola Blansko, Erbenova 13 IČO

- čte a zapisuje desetinná čísla MDV kritické čtení a - zaokrouhluje, porovnává. - aritmetický průměr

Matematika. 6. ročník. Číslo a proměnná. desetinná čísla (využití LEGO EV3) číselný výraz. zaokrouhlování desetinných čísel. (využití LEGO EV3)

Předmět: MATEMATIKA Ročník: 6.

Matematika NÁRODNÍ SROVNÁVACÍ ZKOUŠKY DUBNA 2017

Cykly a pole

Pythagorova věta Pythagorova věta slovní úlohy. Mocniny s přirozeným mocnitelem mocniny s přirozeným mocnitelem operace s mocninami

Algoritmizace a programování

0.1 Úvod do lineární algebry

CHARAKTERISTIKA. VZDĚLÁVACÍ OBLAST VYUČOVACÍ PŘEDMĚT ZODPOVÍDÁ VOLITELNÉ PŘEDMĚTY Seminář z matematiky Mgr. Dana Rauchová

0.1 Úvod do lineární algebry

PRIMA Přirozená čísla Celá čísla Desetinná čísla Číselná osa Pravidla pro násobení a dělení 10, 100, a 0,1, 0,01, 0,001.. Čísla navzájem opačná

MATEMATIKA Maturitní témata společná část MZ základní úroveň (vychází z Katalogu požadavků MŠMT)

SEMINÁŘ K VÝUCE MATEMATIKA 1

Algoritmy a algoritmizace

Gymnázium Jiřího Ortena, Kutná Hora

Algoritmus. Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu.

Pythagorova věta Pythagorova věta slovní úlohy

REÁLNÁ FUNKCE JEDNÉ PROMĚNNÉ

ZŠ ÚnO, Bratří Čapků 1332

Matematika. 8. ročník. Číslo a proměnná druhá mocnina a odmocnina (využití LEGO EV3) mocniny s přirozeným mocnitelem. výrazy s proměnnou

Systematizace a prohloubení učiva matematiky. Učebna s dataprojektorem, PC, grafický program, tabulkový procesor. Gymnázium Jiřího Ortena, Kutná Hora

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

Matematika - 6. ročník Vzdělávací obsah

SEMINÁŘ K VÝUCE MATEMATIKA

CZ 1.07/1.1.32/

Základní škola Ruda nad Moravou. Označení šablony (bez čísla materiálu): EU-OPVK-MAT-8+9- Slovní úlohy

vzdělávací oblast vyučovací předmět ročník zodpovídá MATEMATIKA A JEJÍ APLIKACE MATEMATIKA 8. MARKUP Druhá mocnina a odmocnina FY Tabulky, kalkulátor

volitelný předmět ročník zodpovídá PŘÍPRAVA NA PŘIJÍMACÍ ZKOUŠKY Z MATEMATIKY 9. MACASOVÁ

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Základy algoritmizace a programování

DRUHÁ MOCNINA A ODMOCNINA. Irena Sytařová

ZŠ ÚnO, Bratří Čapků 1332

MOCNINY A ODMOCNINY. Standardy: M M PYTHAGOROVA VĚTA. Standardy: M M

Matematika I (KMI/PMATE)

Zavedení a vlastnosti reálných čísel

KTE / PPEL Počítačová podpora v elektrotechnice

Příklad. Řešte v : takže rovnice v zadání má v tomto případě jedno řešení. Pro má rovnice tvar

Maturitní otázky z předmětu PROGRAMOVÁNÍ

veličin, deskriptivní statistika Ing. Michael Rost, Ph.D.

DIGITÁLNÍ ARCHIV VZDĚLÁVACÍCH MATERIÁLŮ

Opravná zkouška 2SD (celý rok)

Matematika - 6. ročník

Transkript:

Ing. Jana Pšenčíková Nakladatelství a vydavatelství R Vzdìlávání, které baví www.computermedia.cz

Obsah Obsah ALGORITMUS... 7 CO JE TO ALGORITMUS A PROČ VYTVÁŘÍME ALGORITMY... 7 Začátek a konec algoritmu... 7 Věcná správnost... 9 Jednoznačnost... 10 Obecnost... 12 Opakovatelnost... 12 Srozumitelnost... 13 MOŽNOSTI ZÁPISU ALGORITMŮ... 13 Slovní vyjádření algoritmu... 13 Matematický zápis... 14 Rozhodovací tabulky... 14 Vývojové diagramy... 16 Počítačový program... 18 Další formy zápisu algoritmů... 18 SEKVENCE... 19 Jednoduchá sekvence s jedním sekvenčním blokem příkaz výstupu... 19 Sekvence se dvěma sekvenčními bloky... 19 Součet obsahu dvou buněk, přiřazovací příkaz... 20 Výměna obsahu dvou buněk... 21 Další typické sekvenční algoritmy... 22 Rozdíl a součin... 22 Obdélník obvod a plocha... 23 Obvod kružnice a plocha kruhu... 23 Rovnostranný trojúhelník obvod a plocha... 23 Objem a plocha válce... 24 Šestiúhelník - obvod a obsah... 24 Výměna hodnot ve dvou buňkách bez pomocné buňky... 25 Pythagorova věta... 25 VĚTVENÍ... 26 OŠETŘENÍ NEŽÁDOUCÍCH DŮSLEDKŮ... 26 Křižovatka... 26 Podíl... 27 Obecnější výraz s dělením... 27 Odmocnina... 28 Obecný výraz... 28 VĚTVENÍ Z DŮVODU NĚKOLIKA ŽÁDOUCÍCH MOŽNOSTÍ... 29 Nedělní program... 29 VÝRAZY S ABSOLUTNÍ HODNOTOU, VLASTNOSTI ČÍSEL... 29 Absolutní hodnota... 29 Zjištění, zda je číslo kladné, či záporné... 30 Zjištění, zda je číslo sudé, či liché... 30 Dělitelnost... 31 POROVNÁVÁNÍ A ŘAZENÍ ČÍSEL, MAXIMUM A MINIMUM... 32 Porovnání dvou čísel podle velikosti... 32 Seřazení dvou čísel s pomocnou buňkou... 33 Největší ze tří čísel bez pomocné buňky... 33 Maximum ze tří čísel s použitím pomocné buňky... 34 Maximum ze tří čísel s použitím dočasného maxima... 34 Seřazení tří čísel podle velikosti bez pomocné buňky... 35 Seřazení tří čísel s použitím pomocné buňky... 36 Seřazení tří čísel podle velikosti s respektováním výsledku předchozího kroku... 37 Seřazení čtyř čísel podle velikosti s pomocnou buňkou... 38 ÚLOHY Z GEOMETRIE... 39 Trojúhelník... 39 Test na trojúhelník rovnoramenný, rovnostranný, obecný... 40 Test na pravoúhlý trojúhelník... 41 KOMBINOVANÉ ALGORITMY... 43 Lineární rovnice... 43 Soustava dvou lineárních algebraických rovnic... 43 Kvadratická rovnice s reálnými kořeny... 44 Kvadratická rovnice s komplexně sdruženými kořeny... 45 Kalkulačka... 47 Rychlost, dráha, čas... 48 Pohyb rovnoměrně zrychlený... 49 Vlaky... 50 CYKLY... 53 CYKLUS A JEHO TYPY... 53 3

Cykly s pevným počtem opakování... 54 Cyklus řízený podmínkou podmínka je na začátku cyklu... 55 Cyklus řízený podmínkou podmínka je na konci cyklu... 56 Čekací smyčka... 57 ÚLOHY S OPAKOVÁNÍM... 58 Paralelní odpory... 58 Kalkulačka... 59 SUMY, PROHLEDÁVÁNÍ ŘADY ČÍSEL, MAXIMUM A MINIMUM... 61 Zobrazení čísel od jedničky do desítky... 61 Zobrazení čísel od dvojky do dvacítky, jen sudé... 61 Suma čísel od 1 do 10... 62 Suma 10 různých čísel, resp. libovolného počtu čísel... 62 Maximum z deseti kladných čísel... 63 Maximum a minimum z celých čísel, jejichž počet bude zadán předem... 65 Suma čísel, jejichž počet není předem znám test uprostřed cyklu... 67 Suma čísel, jejichž počet není předem znám s testem na začátku... 67 Suma čísel, jejichž počet není znám předem s testem na konci cyklu... 68 Maximum z neznámého počtu čísel... 69 Maximum a minimum z neznámého počtu celých čísel... 70 Zjištění, kolik čísel je kladných a kolik záporných celkový počet je znám... 71 Zjištění, kolik čísel je kladných, kolik záporných - přijde-li nula, pak cyklus skončí... 72 Zjištění, kolikrát se v textu objeví zadané písmeno text je zadáván po znacích... 73 Zjištění, kolikrát se v textu objeví zadané písmeno text je zadán najednou... 74 Zjištění počtu slov ve větě znak po znaku... 75 Zjištění počtu slov ve větě načte se celá věta najednou... 76 Součin pomocí součtu... 77 Dělení pomocí odečítání... 78 Největší společný dělitel... 79 Součet číslic v čísle... 80 Test, kolikrát se vyskytuje určitá číslice v daném čísle... 81 ODDECHOVÉ ÚLOHY... 82 Písnička Když jsem já sloužil... 82 Společenská hra Severní pól... 84 Zajíci a bažanti... 85 ČÍSELNÉ SOUSTAVY A PŘEVODY MEZI NIMI... 86 Převod z desítkové soustavy do dvojkové nové cifry se vypisují od nejvyšších... 88 Převod čísla z dvojkové soustavy do desítkové... 89 ŘADY ARITMETICKÉ, GEOMETRICKÉ, DALŠÍ... 90 Aritmetická řada výpočet hodnoty prvků řady, prvky se zobrazují průběžně... 90 Aritmetická řada výpočet hodnoty prvků řady, všechny prvky se zobrazí nakonec... 91 Aritmetická řada součet... 92 Geometrická řada výpočet hodnoty prvků řady, prvky se zobrazují průběžně... 93 Geometrická řada výpočet hodnoty prvků řady, všechny prvky se zobrazí nakonec... 94 Geometrická řada Suma... 95 Složité úrokování... 96 Stavební spoření... 98 Faktoriál... 100 Algoritmus pro výpočet Ludolfova čísla... 101 Algoritmus pro výpočet hodnoty přirozeného logaritmu čísla 2... 102 Algoritmus pro výpočet funkce sinus x pomocí mocninné řady... 103 Algoritmus pro výpočet funkce e x pomocí mocninné řady... 104 OPERACE S VEKTORY A MATICEMI... 105 Součet vektorů... 105 Skalární součin vektorů... 106 Minimum z řady čísel, metoda přímého výběru řešení pomocí vektoru... 107 Maximum z řady čísel, metoda probublávání řešení pomocí vektoru... 108 Matice načtení prvků... 109 Matice počet kladných a záporných prvků... 110 Největší a nejmenší prvek matice... 111 Pozice největšího a nejmenšího prvku matice... 112 Trojúhelníková matice... 113 Diagonální matice... 114 Matice otočená kolem hlavní diagonály... 116 Součet matic... 118 Součin matic... 119 TŘÍDICÍ ALGORITMY... 121 Select Sort (třídění přímým výběrem)... 121 Bubble Sort (třídění probubláváním) - zjednodušený... 123 Bubble Sort (třídění probubláváním) - klasický... 124 Shake Sort (třídění přetřásáním)... 126 4

Algoritmus - proces algoritmizace Algoritmus CÍL KAPITOLY: UVEDENÍ DO PROBLEMATIKY ALGORITMIZACE Důležité pojmy: Algoritmus Vlastnosti správného algoritmu Možnosti zápisu algoritmu Vývojový diagram Začátek a konec algoritmu Sekvence Větvení Cyklus Rozhodovací tabulky Program Překladač CO JE TO ALGORITMUS A PROČ VYTVÁŘÍME ALGORITMY Každý student v dnešní době už přišel do styku s počítačem a pracoval s počítačovými programy, byť jako uživatel. Tyto programy musel předtím někdo vytvořit musel počítači přesně říci, co mají dělat. To znamená, že: napřed musel vymyslet postup, kterému říkáme algoritmus; pak tento postup musel přepsat do kódu, kterému počítač bude rozumět přepsat jej do nějakého programovacího jazyka. Algoritmus je přesný postup, který je potřeba k vykonání určité činnosti. Musí splňovat následující podmínky: musí mít začátek a konec po konečném počtu kroků musí dojít od počátku do konce; musí být věcně správný; musí být jednoznačný - v každém jeho kroku musí být jasné, jaký bude jeho následující krok; musí být obecný; musí být opakovatelný; musí být srozumitelný. Význam těchto podmínek bude ukázán na příkladech. Začátek a konec algoritmu Podívejte se nejprve, jak by vypadal špatný algoritmus, ve kterém by byla tato základní podmínka porušena. Možná znáte písničku Pes jitrničku sežral zapsána do algoritmu by vypadala takto: Vidíte, že se písnička bude zpívat pořád dokola a tento algoritmus nikdy neskončí. Pokud byste podle tohoto algoritmu napsali program, fungoval by tak, že by se po jeho spuštění neustále vypisoval text písničky a program by nebyl k zastavení. Musel by být násilně ukončen, nebo byste museli vypnout počítač (což v obou případech není nejlepší řešení). Jak tedy algoritmus upravit? V běžném životě spoléháme na inteligenci člověka (v našem případě zpěváka písničky) až ho přestane zpívání bavit nebo až všichni posluchači usnou, skončí. Počítač však vlastní inteligenci nemá a dělá pouze to, co mu přikážete. docela maličkou 7

Sekvence - jednodušší vývojové diagramy Sekvence CÍL KAPITOLY: TVORBA NEJJEDNODUŠŠÍCH TYPŮ VÝVOJOVÝCH DIAGRAMŮ Důležité pojmy a nové dovednosti: Sekvence Přiřazovací příkaz Součet obsahu dvou buněk Výměna obsahu dvou buněk Matematické operace, které se mohou vyskytovat v sekvenci V této kapitole se seznámíte s jedním ze tří základních typů algoritmu, který se nazývá sekvence. Sekvence je nejjednodušším typem algoritmu, který se skládá (kromě mezních značek) pouze ze sekvenčních bloků. Pamatujte: Během sekvence nesmí docházet k větvení algoritmu ani k návratu zpět (k cyklu). Sekvence jsou jedním ze základních stavebních kamenů algoritmů. Existuje sice málo postupů, ve kterých byste vystačili pouze se sekvencí, ale právě sekvence jsou součástí všech algoritmů, tedy i těch nejsložitějších. Jednoduchá sekvence s jedním sekvenčním blokem příkaz výstupu Pro začátek nejprve to nejjednodušší - prvním příkladem bude algoritmus programu, který zobrazí na displeji větu: Jsi chytrý a krásný. Vývojový diagram je na obrázku vlevo dole. Sekvence se dvěma sekvenčními bloky Abychom si o sobě tolik nemysleli, hned to napravíme. Algoritmus bude upraven tak, že napřed sice zobrazí větu Jsi chytrý a krásný, ale pak doplní ale ne zas tak moc. Vývojový diagram je tentokrát na obrázku vpravo dole. Sekvence s jedním sekvenčním blokem - příkaz výstupu Sekvence se dvěma sekvenčními bloky 19

Součet obsahu dvou buněk, přiřazovací příkaz V předchozích úlohách byly prováděny operace s buňkami tak, že se s operátorem := (přiřazeno) pracovalo stejným způsobem jako s operátorem = (rovná se), který znáte z matematiky. Mezi oběma operátory je však rozdíl. Operátor := (přiřazeno) umožňuje to co rovnítko, ale ještě také něco navíc. Rozdíl si ukážeme na vztahu součtu C:=A+B. K této operaci jsou zapotřebí celkem tři buňky - A, B, C. Můžete si představit, že máte sklenici A (například se třemi díly vody) a sklenici B (se dvěma díly vody). Obsah obou sklenic nalijete do sklenice C, která nakonec bude obsahovat pět dílů vody (v tomto případě je to stejné, jako kdybyste použili rovnítko). Vývojový diagram Sklenice A se třemi díly vody Sklenice B se dvěma díly vody Sklenice C s pěti díly vody Celou operaci by ale bylo možné provést i tak, že byste jednu sklenici (buňku) ušetřili. Vezmete jednoduše sklenici B a přilijete její obsah k tomu, co už je ve sklenici A. Sklenice B se dvěma díly vody Vývojový diagram Sklenice A, nyní již s pěti díly vody Vztah bude mít formu zápisu: A:=A+B... a je čten jako: A přiřazeno A+B (novému A přiřadíte staré A, ke kterému ještě přičtete B). Poznámka: Stejným způsobem lze realizovat odečítání, násobení, dělení nebo i složitější funkce, kde nová hodnota buňky je nějakou funkcí hodnoty původní buňky. 20

Větvení CÍL KAPITOLY: TVORBA TYPICKÝCH ALGORITMŮ S POUŽITÍM VĚTVENÍ Nové dovednosti: Ošetřování nežádoucích důsledků v algoritmech Rozvětvení algoritmu v případech, kde přichází v úvahu několik žádoucích možností výrazy s absolutní hodnotou, zjišťování vlastností čísel (lichá, sudá, kladná, záporná, dělitelnost...) vyhledávání maxima a minima, řazení čísel podle velikosti úlohy z geometrie Kombinované algoritmy rozvětvení algoritmu z důvodu více korektních řešení v kombinaci s ošetřováním nežádoucích důsledků OŠETŘENÍ NEŽÁDOUCÍCH DŮSLEDKŮ Jedním z nejčastějších a nejdůležitějších důvodů, proč se používá v algoritmu větvení, je ošetření nežádoucích důsledků. Jak už víte, správný algoritmus musí dojít vždy do konce. Musí mít připravenou cestu pro všechny možnosti, které mohou nastat, tedy i pro ty, kde zadaná úloha nemá řešení a došlo by k havárii (ať v běžném životě, nebo ve virtuální realitě počítačového programu). Několik typických příkladů vám pomůže pochopit uvedenou problematiku. Křižovatka Představte si, že stojíte na neřízené křižovatce a chcete přejít na druhou stranu. Nejdříve se musíte rozhlédnout, zda nejede auto: pokud nic nejede, můžete bez z obav přejít na druhou stranu; jede-li něco, musíte zůstat stát. Každý si jistě dokáže představit následky, pokud by se nerozhlédl a vstoupil do křižovatky, nebo kdyby se rozhlédl až poté, co by do křižovatky vstoupil. Vidíte, že cílem algoritmu není přejít křižovatku okamžitě za každou cenu, ale přejít ji, když víte, že se vám nic nestane. Pokud není možno přejít, pak jediným správným řešením je zůstat stát. Algoritmus skončí a k havárii nedojde (a vy můžete algoritmus po chvíli zkusit znovu). Nejprve se situace vyhodnotí. Teprve poté se činnost provede. 26 Upozornění: Při tvorbě algoritmu je potřeba pečlivě zvážit, zda v některém jeho kroku není skryto nebezpečí havárie. Pokud krok toto nebezpečí skrývá, musíte nejdříve otestovat, zda jej můžete provést. Na základě výsledku testu se algoritmus rozvětví - krok buď provedete, nebo volíte jinou cestu, ve které se krok neprovede. V dalších příkladech se bude výklad zabývat algoritmy pro výpočet matematických operací, u kterých je skryto nebezpečí havárie, což je nezbytně nutné ošetřit právě větvením. Je to především: dělení; výpočet výrazů s odmocninou; některé další funkce (např. goniometrické - tangens).

Maximum ze tří čísel s použitím pomocné buňky Nyní si ukážeme, jak je možné stejné zadání zpracovat pomocí algoritmu výměny obsahu buněk. Použité proměnné: A... první číslo (zadané zvenčí) B... druhé číslo (zadané zvenčí) C... třetí číslo (zadané zvenčí) POM... pomocná buňka Je testováno, zda není první číslo větší než druhé. Pořadí A a B je správné, není zapotřebí vykonávat další operaci. Pořadí je nesprávné, obsahy buněk je nutné mezi sebou vyměnit. Bez ohledu na to, jaký byl stav na počátku, teď je B > A, o C zatím není nic známo. Testuje se, zda není druhé číslo větší než třetí. Pořadí B a C je správné, není nutné vykonávat další operaci. Pořadí je nesprávné, obsahy buněk je nutné mezi sebou vyměnit. Bez ohledu na to, jaký byl stav na počátku, teď je C největší. Maximum ze tří čísel s použitím dočasného maxima Příklad stejného zadání bude zpracován do třetice, ovšem opět jiným algoritmem. Povídka o masajském princi Masajský princ si hledal nevěstu a chtěl si vybrat tu nejkrásnější. Taková masajská krasavice musí být pěkně buclatá čím tlustší, tím krásnější. Rozhodl se tedy, že pozve všechny krásky z okolí a bude je vážit. Jako váha mu posloužil kmen stromu, který uprostřed podepřel obětním kamenem. Takže měl houpačku, na jejíž konce hodlal posadit proti sobě dvě krásky která tu druhou převáží, ta bude krásnější. Krajina byla řídce obydlená, proto se nevěsty trousily po jedné. Když přišla první, princ ji neměl s kým zvážit, proto ji zatím prohlásil za nejkrásnější a zdržel ji co kdyby už žádná jiná nepřišla? Po chvíli přišla další. Posadil tedy Masajky na houpačku a vážil. Tu těžší z nich opět zdržel a prohlásil ji prozatím za nejkrásnější, druhou vyhodil. A tak to opakoval, dokud nevěsty chodily (tentokrát přišly jen tři, ale algoritmus by se dal opakovat pořád dokola pro velký počet adeptek). Použité proměnné: A... první číslo (zadané zvenčí) C... třetí číslo (zadané zvenčí) B... druhé číslo (zadané zvenčí) MAX... pomocná buňka 34

Tvorba algoritmů s použitím cyklů Cykly CÍL KAPITOLY: NAUČIT SE VYTVÁŘET ALGORITMY S POUŽITÍM CYKLŮ Nové pojmy: Cyklus s předem daným počtem opakování Cykly řízené podmínkou podmínka na začátku cyklu podmínka na konci cyklu Nové dovednosti typické algoritmy, jejichž základem je cyklus: Úlohy s opakováním algoritmy, které byly v minulé kapitole řešeny jednorázově, budou rozšířeny o možnost opakování Sumy, hledání maxima a minima, prohledávání řady čísel a textů Oddechové úlohy písničky, hry, hádanky Číselné soustavy a převody mezi nimi Řady aritmetické, geometrické, mocninné a další Operace s vektory a maticemi Třídicí algoritmy CYKLUS A JEHO TYPY Jedním z nejsilnějších nástrojů algoritmů jsou cykly. Jejich podstatou je opakování určité části algoritmu buď se stejnými, nebo pokaždé s jinými daty. Protože však každý algoritmus musí být konečný, nesmí žádný cyklus běžet pořád dokola. Musí být jednoznačně defi nováno, kdy (jak dlouho) nebo za jakých podmínek se bude cyklus opakovat a kdy už musí skončit. Podle způsobu řízení opakování rozeznáváme tři typy cyklů. Jsou to: cykly s pevným počtem opakování; cykly řízené podmínkou s podmínkou na začátku cyklu; cykly řízené podmínkou s podmínkou na konci cyklu. Vzpomeňte si na písničku Pes jitrničku sežral z první kapitoly učebnice Algoritmizace. Víte, že správný algoritmus musí mít konec a že nelze písničku doopravdy zpívat pořád dokola. Cyklus můžete ukončit tak, že: Písničku zazpíváte například třikrát dokola a pak přestanete v tom případě se bude jednat o cyklus s pevně daným počtem opakování. Budete zpívat s podmínkou, že budete mít nějaké posluchače - napřed se rozhlédnete, je-li někdo nablízku. Pokud ano, dáte se do zpěvu a budete zpívat tak dlouho, dokud lidé neutečou pak je to cyklus řízený podmínkou na začátku cyklu. Dáte do zpěvu, aniž byste cokoli zjišťovali, a budete zpívat tak dlouho, dokud neochraptíte pak se bude jednat o cyklus řízený podmínkou na konci cyklu. docela maličkou Nekonečný cyklus - opakuje se neustále dokola 53

Zjištění, kolikrát se v textu objeví zadané písmeno text je zadán najednou Tato úloha řeší stejný problém jako předešlá, ovšem s tím vylepšením, že testovaný text nebudete zadávat znak po znaku, ale celý najednou. Nové informace, které budete využívat v tomto algoritmu: Programovací jazyky mají možnost také pracovat s textovými řetězci (řadou znaků), které načtou do jediné proměnné. Tato proměnná je strukturovaná každý znak tvoří jednu položku řetězce. Například: Textový řetězec VETA je Ahoj. Pak tedy: VETA [1] = A VETA [2] = H VETA [3] = O VETA [4] = J Programovací jazyky mají také možnost zjistit délku textového řetězce (mají na to potřebnou funkci). Nebudete proto zjišťovat délku textu sami, ale budete předpokládat, že bude v budoucím programu využita funkce, která to udělá za vás. Použité proměnné: VETA... strukturovaná proměnná (řetězec), do které se načte celá věta VETA [I]... I-tý znak proměnné VETA I... řídicí proměnná cyklu s pevným počtem opakování POCZN... počet znaků proměnná, do níž se uloží číslo, které udává počet znaků ve větě (zjistí funkce v budoucím programu) X... písmeno, které hledáte v textu POC... počítadlo, do nějž se ukládá počet znaků věty, které jsou shodné s hledaným znakem Načte se celá věta naráz Hledané písmeno Vynulování počítadla POCZN je počet znaků ve větě 74

ODDECHOVÉ ÚLOHY Na závěr této podkapitoly si můžete vyzkoušet několik oddechových algoritmů na práci s textem pomocí cyklu. Písnička Když jsem já sloužil Vytvořte algoritmus pro zobrazení textu písničky Když jsem já sloužil. Zde je text pro ty, kdo písničku neznají: Když jsem já sloužil to první léto, vysloužil jsem si kuřátko za to, a to kuře krákoře, chodí po dvoře, má panenka pláče doma v komoře. Když jsem já sloužil to druhé léto, vysloužil jsem si kačenku za to, a ta kačka bláto tlačká a to kuře krákoře, chodí po dvoře, má panenka pláče doma v komoře. Když jsem já sloužil to třetí léto, vysloužil jsem si husičku za to, a ta husa chodí bosa a ta kačka bláto tlačká a to kuře krákoře, chodí po dvoře, má panenka pláče doma v komoře. Když jsem já sloužil to čtvrté léto, vysloužil jsem si prasátko za to, a ten vepř jako pepř a ta husa chodí bosa a ta kačka bláto tlačká a to kuře krákoře, chodí po dvoře, má panenka pláče doma v komoře. Když jsem já sloužil to páté léto, vysloužil jsem si telátko za to, a to tele hubou mele a ten vepř jako pepř a ta husa chodí bosa a ta kačka bláto tlačká a to kuře krákoře, chodí po dvoře, má panenka pláče doma v komoře. Když jsem já sloužil to šesté léto, vysloužil jsem si kravičku za to, a ta kráva mléko dává a to tele hubou mele a ten vepř jako pepř a ta husa chodí bosa a ta kačka bláto tlačká a to kuře krákoře, chodí po dvoře, má panenka pláče doma v komoře. Když jsem já sloužil to sedmé léto, vysloužil jsem si volečka za to, a ten vůl jako kůl a ta kráva mléko dává a to tele hubou mele a ten vepř jako pepř a ta husa chodí bosa a ta kačka bláto tlačká a to kuře krákoře, chodí po dvoře, má panenka pláče doma v komoře. Princip řešení: Text písničky je jako stvořený pro cykly s pevným počtem opakování v tomto případě půjde o dva cykly, které budou vnořeny do sebe. Vnější cyklus s řídicí proměnnou I se bude opakovat 7x, jeden průchod cyklem pro každou sloku. Vnitřní cyklus s řídicí proměnnou J zařídí vyjmenovávání všech zvířat (i s příměrem, co dělají nebo jak vypadají), která si dotyčný vysloužil. Všimněte si, že v každé sloce přibude jedno nové zvíře a pak se zopakují pozpátku všechna zvířata z předchozích slok. Číslo sloky tedy udává, kolik v ní bude zvířat. Proto řídicí proměnná bude mít meze od I do 1 (zvířata se vyjmenovávají pozpátku, proto bude J při každém průchodu cyklem o jedničku klesat). Použité proměnné: I... řídicí proměnná 1. cyklu (vnějšího) J... řídicí proměnná 2. cyklu (vnitřního) Abyste nemuseli ve vývojovém diagramu psát dlouhé texty, uložte si je do strukturovaných proměnných. Tabulka strukturovaných proměnných je uvedena na následující stránce. 82

Tvorba algoritmů s použitím cyklů Text1[1] := kuřátko Text1[2] := kačenku Text1[3] := husičku Text1[4] := prasátko Text1[5] := telátko Text1[6] := kravičku Text1[7] := volečka Tabulka strukturovaných proměnných Text2[1] := a to kuře krákoře, chodí po dvoře, má panenka pláče doma v komoře Text2[2] := a ta kačka bláto tlačká Text2[3] := a ta husa chodí bosa Text2[4] := a ten vepř jako pepř Text2[5] := a to tele hubou mele Text2[6] := a ta kráva mléko dává Text2[7] := a ten vůl jako kůl Upozornění: V této úloze tentokrát použijete jiný typ strukturované proměnné než v úloze Zjištění, kolikrát se v textu objeví zadané písmeno na str. 73. V předešlé úloze jste do jedné položky strukturované proměnné mohli ukládat jediné písmeno (protože to tak vyhovovalo), zde můžete do každé položky uložit celý řetězec, budete pracovat s polem řetězců. Takový typ proměnné rovněž podporuje většina programovacích jazyků. Vnější cyklus Vnitřní cyklus Řídicí proměnná I řídí číslo sloky. Opakuje se jednou na začátku každé sloky, za TEXT1[I] se dosadí výše uvedený text. Pamatujte: Je-li v algoritmu několik cyklů vzájemně do sebe vnořených, pak se tyto cykly nesmějí křížit. To znamená, že cyklus, který začal nejpozději, musí skončit nejdříve, cyklus, který začal jako druhý nejpozdější, musí skončit jako druhý atd. Cyklus, který začal jako první, musí skončit až jako poslední. V algoritmu se také mohou vyskytovat cykly jeden za druhým, v tom případě se také nesmějí křížit. To znamená, že první, který začne, musí skončit ještě předtím, než začne druhý. Řídicí proměnná J řídí vyjmenovávání zvířat v rámci každé sloky po každém průchodu cyklem klesne o jedničku. Za TEXT2[J] se dosadí příslušný text. 83

Stavební spoření Vypracujte algoritmus pro výpočet částky, kterou naspoříte za celý jeden cyklus stavebního spoření. Podmínky stavebního spoření a vysvětlení pojmů, které budete dále potřebovat: Klient (střadatel) vkládá pravidelně jednou měsíčně dohodnutou částku (pořád stejnou). Spoří takto pravidelně po celý cyklus, který trvá několik let od ledna do prosince (dříve to bylo 5 let, nyní je to 6 let, za čas to bude zase jiná doba, proto bude ponechána doba obecná bude zadávána zvenčí). Délka cyklu musí být dodržena. Peníze, které klient ukládá, jsou úročeny obvyklým způsobem (viz předchozí příklad Složité úrokování na str. 96-97). Bude předpokládáno, že úroková míra během celého cyklu zůstane stejná. Až potud by se jednalo o obvyklou úlohu složitého úrokování, ovšem je dále ještě vylepšena: Naspoří-li klient během roku určitou maximální částku (dříve to bylo 18 000 Kč, nyní to je 20 000 Kč, za čas to bude třeba jinak, proto ji necháte obecnou a bude zadávána zvenčí), potom mu přísluší za tento rok maximální prémie (dříve to bylo 4 500 Kč, nyní to je 3 000 Kč, ponecháte ji proto zase obecnou a bude opět zadávána zvenčí): naspoří-li za rok méně než maximální částku, pak se maximální prémie úměrně zkrátí; naspoří-li více, maximální prémie se už nezvýší. Do naspořené částky se počítají i všechny úroky a prémie, které byly v daném roce připsány. Naspořená částka se vyhodnotí každý rok koncem prosince, prémie se však připisuje až v květnu. Jakmile se prémie připíše ke vkladu, normálně se úročí jako všechno ostatní. (Poznámka: Úloha je mírně zjednodušena.) Použité proměnné: ULOZ... pravidelná měsíční úložka PR... roční procentní úroková sazba N... počet let, po která střadatel spoří MPR... maximální prémie, která může být střadateli připsána, pokud naspoří za rok maximální částku, z níž se odvozuje prémie: naspoří-li za rok částku vyšší, pak už prémie dál neroste naspoří-li za rok částku nižší, pak se prémie zkrátí v poměru naspořené částky ku maximální částce, ze které se odvozuje prémie PREM... prémie, která bude střadateli připsána. Počítá se jako poměrná část z maximální prémie: naspoří-li za rok částku vyšší nebo rovnou maximální roční uspořené částce (MCR), pak dostane maximální prémii (MPR) naspoří-li za rok částku nižší, pak se prémie zkrátí v poměru naspořené částky ku maximální částce, ze které se odvozuje prémie MCR... maximální roční uspořená částka, ke které přísluší maximální prémie (pokud by střadatel naspořil víc, prémie se už dál nezvyšuje) Do roční uspořené částky se započítávají i připsané úroky a prémie za minulý rok. MPL... počet let, po která bude střadatel spořit SUMR... suma úspor v průběhu jednoho roku (do této částky se kromě vkladů započítávají i úroky a prémie za minulý rok) SUMC... celková suma za uplynulé období UROKC... roční úrok z částky, která leží na účtu déle než rok UROKR... úrok z úložek, které přicházely na účet během posledního roku 98 Princip řešení: Nebýt prémie, která se připisuje vždy jednou za rok v květnu, jednalo by se o obyčejnou úlohu o složitém úrokování (viz předchozí příklad Složité úrokování na str. 96-97).

Tvorba algoritmů s použitím cyklů Opět v tomto algoritmu poběží souběžně dva cykly složitého úrokování jeden s úložkou 1x měsíčně a jeden s úložkou 1x ročně. Vezmete-li v úvahu jen interval jednoho roku, pak se v něm projeví pouze měsíční úložky většinou pravidelné, pouze v 5. měsíci zvednuté o prémii. Tím můžete vytvořit cyklus s pevným počtem opakování (a to 12). Cyklus, který je zmíněn v předchozím bodu, bude součástí dalšího cyklu rovněž s pevný počtem opakování (počet let). V tom se zjistí, kolik klient naspořil, vypočítá se prémie, na kterou bude mít příští rok v květnu nárok a připočítají se úroky. Všechny proměnné, ke kterým se bude něco přičítat, musí být vynulovány. Vnější cyklus - počet let Vnitřní cyklus měsíční úložky během roku Je-li květen, připočítá se prémie. Připočítá se další úložka. Připočítá se úrok. Výpočet prémie uspoří-li klient více, dostane nakonec stejně jen maximální prémii. Úrok z částky, která je na účtu déle než rok Poměrná částka z maximální prémie Nová celková částka, do které je připočítána naspořená částka za uplynulý rok a jsou připsány všechny úroky. Vynuluje roční sumu a roční úrok. 99