Algoritmizace – pomocný materiál k výuce
Obsah Algoritmus ...........................................................................................................................................................2 Značky vývojových diagramů ...............................................................................................................................2 Základní pojmy algoritmizace ..............................................................................................................................4 Úkoly k procvičení: ..............................................................................................................................................6 Vývojové diagramy s podmínkou ........................................................................................................................7 Tvorba algoritmů s použitím cyklů ................................................................................................................... 12 Cyklus s pevným počtem opakování ................................................................................................................ 12 Cyklus řízený podmínku na začátku cyklu ........................................................................................................ 13 Cyklu řízený podmínkou na konci cyklu............................................................................................................ 13 Tvorba algoritmů s použitím cyklů – příklady................................................................................................... 14 Další řešené příklady ........................................................................................................................................ 17 Úkoly k procvičení: ........................................................................................................................................... 20
Algoritmizace
Algoritmus Algoritmus je přesný postup, který je potřeba k vykonání určité činnosti. Přesně definovaná konečná posloupnost operací. Vlastnosti algoritmu: 1. Jednoznačnost (determinovanost) - jednotlivé kroky algoritmu a pořadí, v jakém budou prováděny, jsou jednoznačně určeny. Při stejných počátečních hodnotách vede algoritmus k témuž výsledku. 2. Konečnost (rezultativnost) - algoritmus vede vždy k určitým výsledkům v konečném čase. 3. Obecnost (hromadnost) - algoritmus lze použít pro řešení obecné úlohy, slouží k řešení libovolné úlohy, která patří do jisté třídy úloh. 4. Opakovatelnost - znamená, že algoritmus vede vždy ke stejným výsledkům, jsou-li zadána stejná data. 5. Srozumitelnost a přehlednost - je podmínkou pro pozdější snadné úpravy. Možnosti zápisu algoritmu -
slovní vyjádření – v přirozeném jazyce matematický zápis – soustava rovnic, vztah mezi veličinami graficky - vývojové diagramy počítačové programy – kódem srozumitelným pro počítač
Značky vývojových diagramů Mezní značky Představují vstup s vnějšího prostředí do programu nebo výstup z programu do vnějšího prostoru (začátek, konec). Používá se i pro začátek nebo konec samostatně zpracované části. Začátek
Konec
Začátek - použitá na začátku, do značky nesmí vstupovat žádná hrana a musí s ní vystupovat právě jedna hrana z dolního okraje směrem dolů, před touto značkou už nesmí být žádná jiná značka Konec - používá se na konci, do značky smí vstupovat právě jedna hrana z horního okraje směrem dolů, nesmí z ní vystupovat žádná hrana, za touto značkou nesmí být žádná jiná značka
Sekvenční bloky Vyskytuji se uvnitř vývojových diagramů, označuji sekvenční postup algoritmu, v jejich průběhu nesmí dojít k rozvětvení. Sekvenční blok - musí mít právě jeden vstup a jeden výstup Čti: A, B
Vstup nebo Výstup Vstup – načtení dat potřebných pro činnost programu, uvnitř je Čti: Výstup – zobrazení výstupu programu na zobrazovacím zařízení, uvnitř je Zobraz:… (Piš…)
2
Algoritmizace A:= A+B
Zpracování - znázorňuje část programu, při níž dochází k transformaci dat (mat. operace). V bloku může být zapsána jedna nebo více instrukci.
Větvení V některých případech nelze v algoritmu postupovat sekvenčně, ale ho potřeba rozvětvit. K větvení dochází na základě nějaké podmínky, je-li podmínka splněna, pak program pokračuje jednou cestou, není-li splněna, pokračuje cestou jinou (větví se) +
-
Podmínka
Rozhodovací blok - slouží k rozvětvení programu na základě podmínky. Není rozhodující, zda větev + bude vlevo nebo vpravo. Hrany nemusejí vycházet vždy z bočních vrcholů. V některých publikacích se setkáte s označením větví – a) ano, ne b) yes, no
Další značky Příprava - přípravná fáze programu, například pro zahájení cyklu o známém počtu opakování. Stejná značka může být i na konci cyklu s textem Konec cyklu
Cyklus I:= 1, N
Spojka - spojuje dvě části vývojového diagramu, které nebylo možno zakreslit souvisle. Spojky na konci přerušení a na začátku pokračování musí být označeny stejným číslem
1
Načíst matici
A
Podprogram- samostatná část programu, která může obsahovat větší množství kroků: a) vyskytuje-li se v programu nějaké část na více místech, je vhodné zpracovat samostatně, označit jako jeden blok a vložit do výsledného algoritmu b) vyskytuje-li se ve více algoritmech hodně často jednu část, zpracujeme ji jako část samostatnou
Syntaxe a sémantika syntaxe příkazu - popisuje, jak příkaz správně a bezchybně vytvořit sémantika příkazu - popisuje význam tohoto příkazu v ČJ: syntax (skladba) př.: Děti četli knihu.
X
sémantika (smysl) Kniha četla děti.
Syntaxi známe z hodin českého jazyka. Popisuje jak správně napsat větu. Pokud spletete i/y nebo písmeno znamená to, že jste udělali syntaktickou chybu. Sémantika hovoří o smyslu informace, kterou nám věta říká. Příklad chyby syntaxe: Dělníci vykopaly tunel. Mám rád hranolki. Hnet příjdu! Příklady chyb sémantiky: Klára prší. Zítra byl jsem včera. Medvěd liška zvítězíme. 3
Algoritmizace Základní pojmy algoritmizace Algoritmus
přesný postup, který vede k vyřešení určitého úkolů a danému výsledku
Proces
děj, událost, operace apod., který probíhá u objektů v určitém čase, je dynamický
Cyklus
jakýkoliv cyklicky se opakující děj, událost, proces či jev
Spojka
značka používající se pro přehlednost a zjednodušení, díky ní můžeme propojit různé bloky vývojového diagramu na kterýchkoli místech v diagramu (z důvodu nekřížení jednotlivých větví v diagramu)
Přiřazovací příkaz
slouží pro stručnější vyjádření změn hodnot proměnných, základ všech algoritmů syntaxe: proměnná = výraz sémantika: nejprve se vyhodnotí hodnota výrazu, tato hodnota je pak přiřazena proměnné uvedené na levé straně příkazu místo v paměti počítače označené identifikátorem, do kterého se ukládá hodnota,velikost tohoto místa je určená datovým typem objekt, který má pevně stanovené označení a nese určitou hodnotu; hodnota se může během programu měnit pro označení se používají písmena abecedy a číslice, první musí být písmeno Pozor! - proměnné potřebné pro výpočty je třeba na začátku nastavit (pro číselné proměnné to obvykle znamená přiřazení 0) - proměnná, která dosud nezískala žádnou hodnotu, má neidentifikovatelný obsah, nelze spoléhat na to, že obsahuje nulu nebo mezeru, použijeme-li na pravé straně příkazu nedefinovatelnou proměnnou, dojde k chybě v programu - stejná proměnná se může objevit na pravé i levé straně přiřazovacího příkazu (např. i: = i+1) - příkaz i=i+1 zvýší hodnotu proměnné o jedničku objekt určité hodnoty, jež se nemění (např. konstanta pi obsahuje hodnotu 3.14) jméno proměnné nebo konstanty příklady správných identifikátoru: a, b, i, suma, počet je pojmenovaný základním prvkem je podmínka (condition) – logický výraz, jehož hodnotou je pravda nebo nepravda syntaxe: proměnná relační operátor výraz, - relační operátory: >, <, =, >=, <=, <>, - výraz: lze použít proměnné, konstanty, (), - pomocí logických spojek AND, OR lze sestavovat složené podmínky, - větve plus a minus se na konci musí sbíhat v jednom bodě sémantika: - pokud podmínka platí, provede se příkaz/-y uvedené ve větvi plus (+), - pokud podmínka neplatí, provede se příkaz/-y uvedené ve větvi minus (-), podmínka v podmínce, složený podmíněný příkaz: příkazem uvnitř podmínky je další podmíněný příkaz neúplný podmíněný příkaz: jedna z větví rozhodovacího bloku je prázdný (větev minus)
Proměnná (variable)
Konstanta (constant) Identifikátor Rozhodovací blok
-
4
Algoritmizace Příklady: Jednoduché vývojové diagramy se sekvenčními bloky 1. Sestav vývojový diagram pro výpočet obvodu a obsahu čtverce. 2. Sestav vývojový diagram pro výpočet obvodu a obsahu kruhu. 3. Sestavte vývojový diagram pro výpočet průměru ze dvou čísel.
5
Algoritmizace Úkoly k procvičení: Sestavte vývojový diagram pro výpočet obvodu a obsahu obdélníka. Sestavte vývojový diagram pro výpočet povrchu a objemu krychle. Sestavte vývojový diagram pro výpočet povrchu a objemu kvádru. Sestavte vývojový diagram pro výpočet součtu dvou čísel. Sestavte vývojový diagram, který vymění hodnoty dvou proměnných. Sestavte vývojový diagram, který vytiskne délku přepony pravoúhlého trojúhelníka, jsou-li dány délky jeho odvěsen. 7. Sestavte vývojový diagram, který pro daný obdélník vytiskne stranu čtverce stejného obsahu. 8. Sestavte vývojový diagram, který zjistí kořen lineární rovnice ax+b=0 (zjistí x). 9. Sestavte vývojový diagram pro výpočet průměru ze tří celých čísel. 10. Sestavte vývojový diagram pro převod částky v Kč na euro a slovenské koruny. 11. Sestavte vývojový diagram, který zadanou hodnotu v metrech převede na mm, dm i km. 12. Sestavte vývojový diagram, který zadanou hodnotu v MB převede na kB,B i bity. 13. Sestavte vývojový diagram, který zadanou teplotu v stupních Celsia převede na Kelviny (Kelviny=stupně Celsia+273,15)a stupně Fahrenheita.(stupně Fahr.=stupně Celsia*9/5+32). 14. Babička má na dvorku k králíku a s slepic. Napište vývojový diagram, který vytiskne jak celkový počet hlav těchto zvířat i celkový počet jejich nohou. Neuvažujte mutace ani neúplná zvířata. Úloha má dvě možná řešení. 15. Délka ocasu klokana velikého činí 30% celkové délky těla. Napište vývojový diagram, který pro danou celkovou délku těla klokana vypíše délku jeho ocasu. 16. DPH činí u nás 5% nebo 19%. Sestavte vývojový diagram, který zadanou cenu zboží včetně DPH vypíše pro obě sazby daně cenu bez daně a daň. 1. 2. 3. 4. 5. 6.
6
Algoritmizace
Vývojové diagramy s podmínkou Větvení - slouží k ošetření nežádoucích důsledků, každý algoritmus musí dojít dokonce, pokud by nedošlo k ošetření nežádoucích situací, program by zkolaboval Začátek
Příklad křižovatka: -
stojíš na neřízené křižovatce a chceš přejít na druhou stran sestav slovní algoritmus (rozhodnutí, zda je volno nebo ne)
+
Jede auto
Stůj
Přejít na druhou stranu Konec
Poznámka: - při tvorbě algoritmu musíme vždy zvážit všechna nebezpečí, aby nedošlo k havárii - na základě toho můžeme algoritmus rozvětvit, kdy existuje cesta, ve které se krok neprovede Úkol: Sestav vývojový diagram pro operaci dělení. Slovní algoritmus Jsou dána čísla A, B o nichž není nic jiného známo a máme provést dělení. Jelikož nelze dělit nulou, provedu testování dělitele. Pokud je roven nule, napíšu dělení nulou a skončím. Pokud číslo ve jmenovateli je rovno C: = A/B Začátek
Poznámky k řešení - mohou nastat dvě situace: 1. B ≠ 0 ……může nastat dělení 2. B = 0 ……zobrazí se „Dělení nulou“
Čti:A, B
B=0
+
C: = A/B
Zobraz: „C“
Konec
7
Zobraz: „Dělení nulou „
Algoritmizace Úkol: Sestavte vývojový diagram, který vytiskne maximum ze dvou celých čísel. Slovní algoritmus: Přečtu dvě čísla, pokud je první vetší než druhé, vytisknu první číslo, jinak vytisknu druhé číslo. Poznámky k řešení příkladu: 1. Dvě zadaná čísla se načtou do proměnných a, b. 2. Zkoumá se pravdivostní hodnota podmínky a>b, což je odpověď na otázku: je a vetší než b? 3. Pokud podmínka platí (odpověď je ano), pokračuje se větví + a vytiskne se na výstup číslo a. 4. Pokud podmínka neplatí (odpověď je ne), pokračuje se větví - a vytiskne se na výstup číslo b. Je vidět, že hodnota proměnné a bude vytisknuta právě v tom případě, kdy platí a>b. Bude-li naopak platit a
b nebude platit (protože neplatí třeba 3>3), vytiskne se proto hodnota b. Protože však a=b, je úplně jedno, kterou proměnnou vytiskneme. Obojí je správně. Úkol: Sestavte vývojový diagram, který zjistí, zda dané číslo je nebo není kladné. Slovní algoritmus: Přečtu číslo, pokud je vetší než nula vytisknu odpověď je (kladné), jinak tisknu není (kladné). Poznámky k řešení: 1. Do proměnné n je načteno číslo. 2. Zkoumá se pravdivostní hodnota podmínky n>0, což je odpověď na otázku: je n kladné? 3. Pokud podmínka platí, vytiskne se na výstup odpověď je kladné. 4. Pokud podmínka neplatí, vytiskne se na výstup odpověď není kladné. Je vidět, že kladná odpověď bude vytisknuta právě v tom případě, kdy je číslo n kladné. Bude-li ale zadáno záporné číslo, vytiskne se zpráva, že číslo není kladné. Co se ale stane, bude-li zadána nula? Ověřovací podmínka n>0 nebude platit (protože neplatí 0>0), vytiskne se proto, není kladné. Je to správně, protože nula není kladné číslo.
8
Algoritmizace Úkol: Je dáno celé číslo. Rozhodnete, zda je kladné, záporné nebo nula. Slovní algoritmus: Přečtu číslo, pokud je vetší než nula, vytisknu je kladné a končím, pokud není vetší než nula, muže být záporné nebo nula. Na tuto informaci se tedy zeptám a podle výsledku vytisknu odpověď. Poznámky k řešení: 1. Do proměnné n je načteno číslo. 2. Zkoumá se pravdivostní hodnota podmínky n>0, což je odpověď na otázku: je n kladné? 3. Pokud podmínka platí, vytiskne se je kladné. 4. Pokud podmínka neplatí, ptáme se dále, platí-li n=0. V závislosti na platnosti této podmínky se vytiskne se je záporné nebo je nula. Pro každé celé číslo vždy musí nastat právě jedna z uvedených možností. Tento vývojový diagram ale není řešením jediným. Podmínky n>0, n=0 je možné vzájemné prohodit, samozřejmě též i texty u výstupní zprávy. Podmínky lze zapsat i v negaci (opačné), tedy n<0, n<>0. Vyzkoušejte sami.
Úkol: Je dáno přirozené číslo. Rozhodnete, zda je jednociferné, dvouciferné či víceciferné. Slovní algoritmus: Přečtu číslo, pokud je menší než deset, vytisknu je jednociferné a kočím, pokud je větší než deset, muže být dvojciferné nebo víceciferné. Zeptám se proto, jestli je menší než 100 a vytisknu odpověď. Poznámky k řešení: 1. Do proměnné n je načteno číslo. 2. Zkoumá se pravdivostní hodnota podmínky n<10, což je odpověď na otázku: je n menší než 10? 3. Pokud podmínka platí, vytiskne se na výstup odpověď je, jednociferné. 4. Pokud podmínka neplatí, ptáme se dále, platí-li n<100. V závislosti na platnosti této podmínky se vytiskne odpověď je dvojciferné či je víceciferné. Pro každé celé číslo vždy musí nastat právě jedna z uvedených možností, tedy musí být kladné, záporné nebo nula. 9
Algoritmizace Úkol 6: Uspořádejte dvě daná čísla vzestupně. Slovní algoritmus: 1. verze: Přečtu čísla a,b, pokud je první z nich vetší než druhé, vytisknu je v opačném pořadí (b,a), jinak vytisknu v pořadí načtení (a,b). 2. verze: Přečtu čísla a, b pokud je první z nich vetší než druhé, čísla prohodím. Vytisknu pak a, b. Poznámky k řešení: 1. verze: je bez komentáře 2. verze: v případě, že je první číslo větší než druhé, platí podmínka a>b a provede se výměna hodnot a,b. K tomu je třeba pomocná proměnná pom. V závěru se vytisknou hodnoty a,b vždy v tomto pořadí.
Úkoly k procvičení: Sestavte vývojový diagram pro výpočet vzdálenosti dvou celých čísel. Sestavte vývojový diagram, který zjistí, zda je dané číslo záporné. Sestavte vývojový diagram, který vytiskne maximum ze tří čísel. Uspořádejte tři daná čísla vzestupně. Vytisknete maximum ze tří celých čísel. Sestavte vývojový diagram, který zjistí, zda dané číslo muže představovat školní známku (1-5). 7. Sestavte vývojový diagram, který zjistí, zda dané číslo x leží v uzavřeném intervalu . 8. Sestavte vývojový diagram, který pozdraví podle zadané denní doby vyjádřené v hodinách. Do 12 hodin pozdraví Dobré dopoledne, do 18 hodin Dobré odpoledne, později Dobrý večer. 9. Sestavte vývojový diagram, který vypíše, kolik minut uplynulo mezi dvěma časovými údaji, např. mezi 9:30 a 11:15 uplynulo 105 minut. 1. 2. 3. 4. 5. 6.
10
Algoritmizace
10. Jsou dána tři kladná čísla. Mohou představovat délky stran rovnostranného trojúhelníka? 11. Sestavte vývojový diagram, který přečte tri celá čísla a vypíše to z nich, které je na číselné ose nejvzdálenější od bodu nula. 12. Aby se z Ivánka stal bohatýr, musí setnout 100 dračích hlav. Zatím přemohl s sedmihlavých saní a d devítihlavých draku. Sestavte vývojový diagram, který zjistí, zda už je Ivánek bohatýr. 13. V ZOO mají p papoušku a o opic. Ošetření jednoho papouška trvá 10 minut, zatímco ošetření opice je o 5 minut delší. Sestavte vývojový diagram, který zjistí, zda tuto práci zvládne jedna ošetřovatelka s osmihodinovou pracovní dobou, má-li přestávku na oběd 30 minut a jezdí do práce tramvají z Bohunic. Přestávka na oběd se do pracovní doby nepočítá. 14. Fotbalové utkání oddílu Žraloci Rájec a Klokani Jestřábí skončilo poměrem z:k. Sestavte vývojový diagram, který zjistí, který oddíl vyhrál či zda šlo o remízu. Dále vypište, kolik bodu získaly jednotlivé oddíly, mají-li za výhru 3 body, za remízu 1 bod a za prohru 0 bodu. Jaký byl procentuální poměr vstřelených gólu jednotlivých oddílu? 15. Tomáš si vydělá za hodinu v hypermarketu 160 Kč, za měsíc odpracoval n hodin. Sestavte vývojový diagram, který vypíše jeho hrubý měsíční výdělek v Kč. Kolik zaplatí na dani, činí-li dán se základu do 10000 Kč 15% a ze základu nad 10000 Kč 1500 Kč+25% z částky převyšující 10000 Kč? Jaký bude jeho čistý měsíční výdělek? Nakonec vypište informaci, jestli si už vydělal na nové kolo za 15000Kč. 16. Petr má na úctu n Kč. Převeďte tuto částku na eura. Jakou nejdražší dovolenou si muže dovolit, jestliže musí nejprve zaplatit bance 10% z částky na úctu? Možnosti jsou tyto: Chorvatsko-bus-240 Euro, Kréta-letecky-11500Kč, Norsko-bus, kolo-21300Kč, Maledivy-letecky-2050 Euro. Kolik mu na účtu po dovolené zbude? 17. Karel v závěti odkázal svým trem dcerám částku n Kč, kterou si mají rozdělit v poměru 2:3:4. Největší část případně nejstarší, nejméně získá nejmladší. Kolik dostane každá z nich? Muže si z tohoto dědictví nejstarší dcera zaplatit lyžařský zájezd do francouzského střediska Mottaret za 1500 eur? 18. Velitel se nazývá vojevůdce, pokud velel alespoň pěti bitvám, ať už dopadly jakkoliv. Velitel je taktik, pokud vyhrál alespoň tri bitvy. Velitel je stratég, pokud vyhrál více než 16 bitev a prohrál maximálně jednu. Sestavte vývojový diagram, který přečte počet vyhraných a prohraných bitev určitého velitele a rozhodne, zda je vojevůdce, taktik či stratég. 19. Jako chovatel s slepic máte vyřídit objednávku na k kuřecích křídel. Vypište informaci, kolik slepic vám zůstane či kolik jich urychleně musíte dokoupit. Nápověda: běžná slepice má dvě křídla. 20. Jirka je majitelem dvou obdélníkových pozemku stejných rozměru. Napište vývojový diagram, který odpoví na následující otázky: Jaká je celková plocha pozemku? Kolik metru pletiva potřebuje k jejich oplocení? Zemědělec se nazývá velkostatkář, vlastní-li více než 10000 m2 pozemku; má-li alespoň 1000 m2 pozemku, nazývá se statkář. Je Jirka zemědělec, statkář nebo velkostatkář?
11
Algoritmizace
Vývojové diagramy s cyklem Tvorba algoritmů s použitím cyklů Ve skutečných algoritmech se často setkáváme s cykly. Cyklus lze chápat jako určitý počet opakování. Protože u každého algoritmu musí platit podmínka konečnosti, musí být i u cyklu přesně stanoveno, počet opakování, určení, kdy musí algoritmus skončit. Opakování se ve vývojovém diagramu projeví zpětnou šipkou, která se vrací o několik příkazu nahoru. Příkazy, které se mají opakovaně vykonávat, tvoří tzv. tělo cyklu. Podle způsobu opakování rozeznáváme tři typy cyklů: 1. s pevným počtem opakování 2. řízené podmínkou - s podmínkou na začátku cyklu 3. řízené podmínkou - s podmínkou na konci cyklu Značení cyklu: Tělo cyklu
Cyklus s pevným počtem opakování Umožňuje provádět příkazy třeba desetkrát, stokrát i obecně n krát, kde n je proměnná načtená na začátku diagramu. Chod tohoto cyklu řídí jeho počítadlo. Je to proměnná, nejčastěji označovaná i, která automaticky při každém průchodu cyklem zvýší svoji hodnotu o jedničku. Její počáteční hodnota je dána dolní mezí (často je to 1), konečná hodnota je dána horní mezí (10,100, n). Po dosažení horní meze cyklus končí. Máme pro něj speciální značku.
12
Algoritmizace Výhoda tohoto cyklu je ta, že programátor nemusí psát ukončovací podmínku cyklu ani zvyšovat počítadlo. Presto je ukončovací podmínka implementována uvnitř cyklu, jedná se vlastně o cyklus s podmínkou na začátku. Pokud je horní mez menší než dolní mez, cyklus se neprovede ani jednou. Cyklus řízený podmínku na začátku cyklu V tomto cyklu nevíme kolikrát proběhne, ale jeho průběh bude záviset na tom, zda je nebo není splněná určitá podmínka řídicího cyklu. Není – li podmínka splněna hned na začátku před prvním vstupem do cyklu, pak se do cyklu vůbec nevstoupí.
Tělo cyklu
Cyklu řízený podmínkou na konci cyklu V tomto cyklu opět nevíme kolikrát proběhne, ale s určitosti můžeme říct, že proběhne nejméně jedenkrát. Další průběh bude záviset na tom, zda je nebo není splněná určitá podmínka. Není – li podmínka splněna, cyklus se po prvním opakování ukončí. Pokud bude probíhat, pokud bude splněna podmínka cyklu.
Tělo cyklu
13
Algoritmizace Tvorba algoritmů s použitím cyklů – příklady Cyklus s pevným počtem opakování Úkol: Sestavte vývojový diagram, který vytiskne čísla od 1 do n. Použijte cyklus s pevným počtem opakování. Poznámky k řešení: 1. Do proměnné n se načte vstupní hodnota. 2. Začíná cyklus, hodnota počítadla i je nastavena na 1. 3. Testuje se platnost ukončovací podmínky cyklu i=n. 4. Pokud podmínka platí, cyklus skončí a následuje také konec diagramu. Pokud podmínka neplatí, vypíše se hodnota počítadla a řízení se vrací na začátek těla cyklu, počítadlo se automaticky zvyšuje o jedničku.
Obecně lze říci k cyklu s pevným počtem opakování toto: -
Tělo cyklu nemusí být provedeno ani jednou (je-li počáteční hodnota počítadla vetší než hodnota koncová, např. pro I=1,0). Používá se velmi často, známe-li počet opakování. Zápis tohoto cyklu v Pascalu je velmi přirozený a snadný. Je oblíbený matematiky i techniky.
14
Algoritmizace Cyklus s podmínkou na konci Úkol: Je dána posloupnost n čísel. Sestavte vývojový diagram, který vytiskne počet kladných čísel v této posloupnost (poznámka: kladné číslo je vetší než nula). Použijte cyklus s podmínkou na konci. Slovní řešení: Nejprve si problém ujasníme na konkrétních příkladech: pro n=5 a posloupnost 4,10,-2,7,-1 je počet kladných čísel 3 pro n=3 a posloupnost -4, -10, -18 je počet kladných čísel 0 pro n=6 a posloupnost 2,3,2,8,10,5 je počet kladných čísel 6 Počet kladných čísel se pohybuje v intervalu <0,n>. Náš úkol je ho zjistit a vytisknout. Počet kladných čísel bude obsahovat nějaká proměnná, například k. Na začátku ji musíme vynulovat, stejně jako počítadlo cyklu i. Počet čísel v posloupnosti udává tradičně n, tuto hodnotu načteme. Poznámky k řešení: 1. Vynuluje se proměnná k pro výpočet počtu kladných čísel. 2. Vynuluje se počítadlo cyklu i. 3. Do proměnné n se načte vstupní hodnota. 4. Začíná tělo cyklu: do proměnné a se přečte jedno číslo. počítadlo se zvýší o jedničku, testuje se podmínka a>0, ptáme se tedy, je číslo a kladné? Pokud podmínka platí, zvýšíme dosavadní počet kladných čísel o jedničku, pokud podmínka neplatí, neuděláme nic. 5. Testuje se platnost ukončovací podmínky cyklu i=n. Pokud podmínka platí, cyklus skončí, vypíše se výsledný počet kladných čísel a následuje konec diagramu. Pokud podmínka neplatí, vracíme se zpět na začátek těla cyklu. Vyzkoušejte činnost diagramu třeba pro n=5 a řadu pěti čísel 2 -1 5 10 -3. V této řadě jsou tri kladná čísla a hodnotu 3 by měl vytisknout pomocí proměnné k i tento vývojový diagram. V diagramu byl použit neúplný podmíněný příkaz (pro podmínku a>0). Pokud v řadě čísel budou samé záporné hodnoty, vytiskne se na závěr nula, což je správně. V případě zadání záporné či nulové hodnoty do proměnné n se diagram zacyklí. Argumentem pro správnost uvedeného diagramu je to, že posloupnost - 4 čísel reálně neexistuje. Uživatel, který tento nesmyslný vstup zadá, to asi také nezdůvodní. I když kdyby to byl čistý matematik, kdo ví... Na druhou stranu skutečný program zapsaný v jakémkoliv programovacím jazyku reaguje smysluplně na jakékoliv (i hodně nesmyslné) vstupní hodnoty. Je tedy nad čím přemýšlet. 15
Algoritmizace Cyklus s podmínkou na začátku Úkol: Je dána posloupnost celých čísel zakončená nulou. Sestavte vývojový diagram, který vytiskne počet kladných čísel v této posloupnosti. Použijte cyklus s podmínkou na začátku.
Poznámky k řešení: 1. Vynuluje se proměnná k pro výpočet počtu kladných čísel. 2. Začíná tělo cyklu: do proměnné a se přečte jedno číslo, testuje se podmínka a>0, ptáme se tedy, je číslo a kladné? Pokud podmínka platí, zvýšíme dosavadní počet kladných čísel k o jedničku podmínka neplatí, neuděláme nic. 3. Testuje se platnost ukončovací podmínky cyklu a=0. Pokud podmínka platí, cyklus skončí, vypíše se výsledný počet kladných čísel a následuje konec diagramu. Pokud podmínka neplatí, vracíme se zpět na začátek těla cyklu. V tomto jednoduchém diagramu je vidět, že trpělivě čte vstupní čísla a každé kladné započítá do celkového počtu kladných čísel. Algoritmus končí, jakmile je načtena nula, v souladu se zadáním. Pokud uživatel nulu nezadá, cyklus se bude opakovat přesně podle zadání. Tento algoritmus je tedy napsán správně, bude se standardně chovat pro všechny vstupní hodnot.
16
Algoritmizace Další řešené příklady Úkol: Zobrazení čísel od jedničky do desítky. Poznámky k řešení: Použijeme cyklus s pevným počtem opakování. Při prvním průchodů cyklem má proměnná I hodnotu 1, při druhém průchodu cyklem má hodnotu 2, při třetím průchodů cyklem má hodnotu 3 atd…..., při desátém průchodů cyklem má hodnotu 10.
Úkol: Suma čísel od 1 do 10
Poznámky k řešení: Úkolem je součet čísel od 1 do 10 1+2+3+4+5+6+7+8+9+10 = Běžíš po ovále, v jednom místě je důlek, při každém proběhnutí budeš vhazovat míčky. Po prvním jeden, po druhém dva…atd.. Kolik jich tam bude na konci (10 x proběhneš okolo) Použité proměnné: SUMA…..proměnná sloužící k postupnému sčítání I…………řídící proměnná cyklu
17
Algoritmizace
Úkol: Na vstupu je 100 celých čísel. Vytisknete jejich průměr. Průměrem se myslí klasický aritmetický průměr. Slovní řešení: Průměr se vypočítá podle vzorce součet/počet. Počet čísel je roven 100, vzorec pro výpočet průměru 100 čísel je součet/100. Nejprve proto vypočítáme součet 100 daných čísel. Počet opakování cyklu je zde předem dán, můžeme použít cyklus s pevným počtem opakováním s počítadlem i nebo jakýkoliv cyklus s podmínkou. Pro výpočet součtu použijeme proměnnou součet. Proměnnou součet vynulujeme. Dále 100x opakujeme přečtení čísla a jeho přičtení k proměnné součet. Nakonec vytiskneme průměr jakožto součet/100. ¨ Poznámky k 1. řešení příkladu: 1. V 1. řešení je použit cyklus s podmínkou na konci. Vynuluje se počítadlo cyklu i. 2. Vynuluje se proměnná pro výpočet součtu soucet. 3. Začíná tělo cyklu: počítadlo se zvýší o jedničku, je přečteno číslo a k dosavadnímu součtu se přičte toto číslo a. 4. Testuje se platnost ukončovací podmínky cyklu i=100. Pokud podmínka platí, cyklus skončí, vypíše se výsledný průměr a následuje konec diagramu. Pokud podmínka neplatí, vracíme se zpět na začátek těla cyklu.
18
Algoritmizace Úkol 2: Kalkulačka Použité proměnné: KOD…kód operace, který je zadán zvenčí A,B ….dvě čísla zadaná zvenčí, se kterými se bude provádět požadovaná operace C……..výsledek operace Začátek
Zobraz: „ zadej 1. 2. 3. 4.
sčítání odčítaní násobení dělení
Čti: KOD
Čti: A, B
+
C:=A+B
KOD =1
KOD = 2
+
C : = A-B
KOD =3
+
C : = A*B
KOD = 4
-
+ B=0
C:= A/B
+ Zobraz: „B nesmí být 0“
Zobraz: „Zadal jsi špatný kód“
Skončit?
+
19
Konec
Zobraz: „C“
Algoritmizace Úkoly k procvičení: 1. Vytisknete sestupně celá čísla od n do 1. 2. Vytisknete součet čísel od 1 do n. 3. Vytisknete všechna celá čísla z intervalu . 4. Vytisknete prvních n kladných lichých čísel. 5. Je dána posloupnost čísel zakončená nulou. Vytisknete jejich počet, nulu nepočítejte. 6. Je dána posloupnost čísel zakončená nulou. Vytisknete maximální číslo. 7. Je dána posloupnost celých čísel zakončená nulou. Vytisknete průměr těchto čísel, nulu nepočítejte. 8. Je dána posloupnost n čísel. Vytisknete maximální číslo. 9. Je dána posloupnost celých čísel zakončená nulou. Zjistěte, zda je více kladných nebo záporných čísel. Vytisknete i jejich procentuální poměr. 10. Je dána posloupnost 50 čísel. Zjistěte, kolik z nich je jednociferných a tuto informaci vytisknete i procentuálně. 11. Je dána posloupnost 100 čísel. Zjistěte, zda je více jednociferných nebo víceciferných. 12. Vytisknete prvních deset násobku daného čísla n. 13. Vytisknete vzestupně všechna kladná sudá čísla menší než dané n. 14. Je dána posloupnost kladných čísel představujících známky zakončená nulou. Kolik z nich je jedniček? Kolik je pětek? Kterých známek je víc? 15. Je dána posloupnost 12 kladných čísel představujících známky. Vytisknete průměrnou známku a informaci, zda je jedná o vyznamenání. (Má-li žák nějakou pětku, neprospěl, jinak pokud má průměr do 1,5, získává vyznamenání, jinak prospěl.)
20