ALGORITMUS zklad kadho programu CO JE TO ALGORITMUS

  • Slides: 25
Download presentation
ALGORITMUS základ každého programu

ALGORITMUS základ každého programu

CO JE TO ALGORITMUS? • přesný návod či postup, kterým lze vyřešit daný typ

CO JE TO ALGORITMUS? • přesný návod či postup, kterým lze vyřešit daný typ úlohy • teoretický princip řešení problému • nejde o přesný zápis v programovacím jazyce

ALGORITMUS: JAK POŽÁDAT STÁTNÍ SPRÁVU O INFORMACE Příklad algoritmu mimo programátorský svět: Algoritmus napravo

ALGORITMUS: JAK POŽÁDAT STÁTNÍ SPRÁVU O INFORMACE Příklad algoritmu mimo programátorský svět: Algoritmus napravo ukazuje „jednoduchost“ vyřízení úřední žádosti o poskytnutí informace na základě zákona o svobodném přístupu k informacím. Algoritmy se běžně používají v mnoha lidských oborech, např. při stanovování diagnózy a medikace v lékařství a psychiatrii, při práci se zvířaty a rostlinami, při výzkumech, při stavebních a konstrukčních postupech atd.

ZÁKLADNÍ STAVEBNÍ PRVKY • vstupy – s čím bude pracovat (z proměnných, z klávesnice,

ZÁKLADNÍ STAVEBNÍ PRVKY • vstupy – s čím bude pracovat (z proměnných, z klávesnice, z pohybu myši, ze souboru, z kamery, ze zásobníku v paměti. . . ) • příkazy – co bude dělat. Lze je slučovat do bloků (např. když je třeba opakovat víc jednotlivých příkazů v cyklu nebo při rozhodování) (příkazy mohou být cokoli – od aritmetických operací po složité ovládání periferního hardwaru – tiskárny, robota. . . ) • rozhodování – zjišťuje, zda je splněna podmínka a podle výsledku vybírá, která větev programu se vykoná (buď jednoduché [když – tak] nebo větvené [když – tak – jinak], případně přepínač [podle obsahu proměnné udělej: buď – nebo 1 – nebo 2 – nebo 3 – jinak]) • cyklus – opakuje příkaz nebo blok příkazů (buď s pevným počtem opakování [proveď n-krát], s podmínkou na začáku [pokud je splněna tato podmínka, opakuj tohle] nebo na konci [opakuj tohle, dokud není splněna tato podmínka] • výstup – výpis nějaké hodnoty, uložení výsledku do proměnné nebo do paměti, zvuk, ovládání tiskárny, robota. . . (nemusí být na konci, program může vypisovat hodnoty za běhu)

VLASTNOSTI • Je zapsán jako konečný počet kroků je sestaven z konečného počtu jednoduchých

VLASTNOSTI • Je zapsán jako konečný počet kroků je sestaven z konečného počtu jednoduchých příkazů • V každém kroku je přesně jasné, co má algoritmus dělat např. není možné, aby v některém bodě bylo na výběr „udělej tohle a nebo tohle, to je jedno“ • Musí skončit v čase nesmí pokračovat donekonečna, musí skončit v rozumném čase • Musí být obecný neřeší jeden konkrétní problém („jak spočítat 3× 7“, ) ale obecnou třídu obdobných problémů (např. „jak spočítat součin dvou celých čísel“) • Za stejných podmínek (pro stejné vstupy) poskytuje stejný výstup pokud nepracuje s generátorem pseudonáhodných čísel • Musí mít nějaký výstup (odpověď na řešený problém, výsledek) algoritmus, který nemá výstup, je zbytečný

ZPŮSOBY ZÁPISU • popis řešení v přirozeném jazyce (čeština, angličtina) – nepřesné, špatně se

ZPŮSOBY ZÁPISU • popis řešení v přirozeném jazyce (čeština, angličtina) – nepřesné, špatně se překládá • blokový diagram – názorné, ale zdlouhavé a náročné na kreslicí plochu • programovací jazyk – nutnost ovládat konkrétní programovací jazyk

PŘÍKLAD 1: NALEZENÍ NEJVĚTŠÍHO SPOLEČNÉHO DĚLITELE Máme dvě čísla, u a w. Jaký je

PŘÍKLAD 1: NALEZENÍ NEJVĚTŠÍHO SPOLEČNÉHO DĚLITELE Máme dvě čísla, u a w. Jaký je jejich nejmenší společný dělitel? Řešením je jeden z nejstarších známých algoritmů: Eukleidův algoritmus.

SLOVNÍ POPIS ALGORITMU • Mějme dána dvě přirozená čísla, uložená v proměnných u a

SLOVNÍ POPIS ALGORITMU • Mějme dána dvě přirozená čísla, uložená v proměnných u a w. • Dokud w není nulové, opakuj: • Do r ulož zbytek po dělení čísla u číslem w • Do u ulož w • Do w ulož r • Konec algoritmu, v u je uložen největší společný dělitel původních čísel.

ZÁPIS V BLOCÍCH (ZD E S CR ATCH )

ZÁPIS V BLOCÍCH (ZD E S CR ATCH )

ZÁPIS V PROGRAMOVACÍM JAZYCE (ZD E JAV AS CR IPT ) Verze s komentáři

ZÁPIS V PROGRAMOVACÍM JAZYCE (ZD E JAV AS CR IPT ) Verze s komentáři <script> Verze bez komentářů <script> // Mějme dána dvě přirozená čísla, uložená v proměnných u a w. var u = 40902; var w = 24140; // Dokud w není nulové, opakuj: do { // Do r ulož zbytek po dělení čísla u číslem w r = u % w; // Do u ulož w u = w; // Do w ulož r w = r; } while (w != 0); // Konec cyklu r u w } while = u % w; = r; (w != 0); document. write("Nejmenší společný dělitel je "+u); // Vypiš výsledek </script>

PŘÍKLAD II: FIBONACCIHO POSLOUPNOST Fibonacciho posloupnost je řada čísel, začínající čísly 0 a 1,

PŘÍKLAD II: FIBONACCIHO POSLOUPNOST Fibonacciho posloupnost je řada čísel, začínající čísly 0 a 1, v níž každé číslo je součtem dvou předchozích: 0 1 1 2 3 5 8 13 21 34 55 89. . . Více na https: //cs. wikipedia. org/wiki/Fibonacciho_posloupnost

TEXTOVÝ ZÁPIS ALGORITMU (JEDEN Z MOŽNÝCH) • Mějme dáno přirozené číslo, uložené v proměnné

TEXTOVÝ ZÁPIS ALGORITMU (JEDEN Z MOŽNÝCH) • Mějme dáno přirozené číslo, uložené v proměnné n, které označuje poslední číslo Fibonacciho řady, jehož chceme dosáhnout. (První číslo řady (tedy 0) považujeme za nulté. ) • Do proměnné a ulož hodnotu 0 (jde o nulté číslo řady) • Do proměnné b ulož hodnotu 1 (jde o první číslo řady) • Do proměnné f ulož hodnotu 0 (do proměnné budeme ukládat aktuální číslo řady) • Vypiš proměnné a a b • Opakuj (n-1)krát: • Do f ulož a + b • Vypiš f • Do a ulož b • Do b ulož f • Konec algoritmu, v f je uloženo n-té číslo Fibonacciho posloupnosti

ÚKOLY 1. Přepište textový zápis algoritmu do blokového diagramu. 2. Převeďte textový zápis algoritmu

ÚKOLY 1. Přepište textový zápis algoritmu do blokového diagramu. 2. Převeďte textový zápis algoritmu výpočtu Fibonacciho řady do programu ve Scratchi, Java. Scriptu nebo jiném jazyce a ověřte jeho funkčnost. 3. Zadejte n = 25. Kolik vyjde f? Výsledek si ověřte.

PŘÍKLAD III: VÝPOČET DATA VELIKONOC Stanovení konkrétního data Velikonoc je složitým matematickým úkonem: jde

PŘÍKLAD III: VÝPOČET DATA VELIKONOC Stanovení konkrétního data Velikonoc je složitým matematickým úkonem: jde o první neděli po prvním úplňku po 21. březnu. Je tedy potřeba znát, jakým dnem v týdnu začíná rok, kdy je Měsíc v úplňku a zda je rok přestupný. Velikonoční neděle může nastat v jednom ze 35 různých dní. První univerzální algoritmus na výpočet data Velikonoc vytvořil ve svých 23 letech geniální matematik Carl Friedrich Gauss (1777– 1855).

TEXTOVÝ ZÁPIS ALGORITMU • • • • a = rok % 19 bc =

TEXTOVÝ ZÁPIS ALGORITMU • • • • a = rok % 19 bc = (rok + rok / 4 ) % 7 k = rok / 100 p = (13 + 8 * k) / 25 q = k / 4 M = 15 − p + k − q N = 4 + k − q d = (19 * a + M) % 30 je-li d rovno 28 a současně 'a' je větší jak 10, pak d = d - 1 je-li d rovno 29, pak d = d - 1 e = (35 + N - bc - d) % 7 je-li (d + e + 22) menší jak 32, pak je Velikonoční neděle (d + e + 22). března jinak je Velikonoční neděle (d + e − 9). dubna Více na https: //kalendar. beda. cz/gaussuv-algoritmus-vypoctu-velikonocni-nedele

ÚKOLY 1. Převeďte textový zápis algoritmu výpočtu data Velikonoc do programu ve Scratchi, Java.

ÚKOLY 1. Převeďte textový zápis algoritmu výpočtu data Velikonoc do programu ve Scratchi, Java. Scriptu nebo jiném jazyce a ověřte jeho funkčnost. 2. Zadáte-li do programu letošní rok, vyjde správné datum Velikonoc? Ověřte výsledek v letošním kalendáři.

ÚLOHY

ÚLOHY

ALGORITMUS PŘÁTELSTVÍ • Na následujícím slidu najdete blokový diagram „algoritmu přátelství“ Sheldona Coopera ze

ALGORITMUS PŘÁTELSTVÍ • Na následujícím slidu najdete blokový diagram „algoritmu přátelství“ Sheldona Coopera ze seriálu Big Bang Theory (Teorie velkého třesku). • Prozkoumejte ho a zkuste odpovědět na otázky, které jsou vedle diagramu vypsané.

Podle Sheldonova algoritmu: Jaký je první krok k uzavření přátelství? a) nechat někomu zprávu

Podle Sheldonova algoritmu: Jaký je první krok k uzavření přátelství? a) nechat někomu zprávu na záznamníku b) zavolat někomu c) zeptat se ho na jeho zájmy d) nabídnout mu nápoj Co udělá Sheldon, když s ním oslovený odmítne jít na jídlo? a) nabídne mu horký nápoj b) zeptá se ho na koníčky c) počká, až mu člověk zavolá zpátky d) začne se s ním přátelit Co se stane, když oslovený odmítne horký nápoj? a) je mu nabídnut studený b) dostane pozvání na jídlo c) přátelství je odsouzeno k neúspěchu d) je otázán na své záliby Kolikrát se Sheldon zeptá osloveného na jeho volnočasové aktivity a záliby? a) ani jednou b) pětkrát c) někdy vůbec nebo alespoň šestkrát d) přesně šestkrát e) někdy vůbec, maximálně šestkrát

NAJDĚTE CHYBU V NÁSLEDUJÍCÍM ALGORITMU: do proměnné a vlož 10 do proměnné b vlož

NAJDĚTE CHYBU V NÁSLEDUJÍCÍM ALGORITMU: do proměnné a vlož 10 do proměnné b vlož 0 opakuj, dokud se a nezačne rovnat 0: do b ulož b * 2 do a ulož a + 1 vypiš b

CO BY MĚL ALGORITMUS DĚLAT? CO JE ULOŽENÉ V PROMĚNNÝCH A A B? do

CO BY MĚL ALGORITMUS DĚLAT? CO JE ULOŽENÉ V PROMĚNNÝCH A A B? do proměnné a vlož 10 do proměnné b vlož 0 opakuj, dokud se a nezačne rovnat 0: do b ulož b * 2 do a ulož a + 1 vypiš b

K ČEMU SLOUŽÍ NÁSLEDUJÍCÍ KÓD? var den = 3; var cast_dne; switch(den) { case

K ČEMU SLOUŽÍ NÁSLEDUJÍCÍ KÓD? var den = 3; var cast_dne; switch(den) { case 1: den_v_tydnu = "pondělí"; break; case 2: den_v_tydnu = "úterý"; break; case 3: den_v_tydnu = "středa"; break; case 4: den_v_tydnu = "čtvrtek"; break; case 5: den_v_tydnu = "pátek"; break; case 6: den_v_tydnu = "sobota"; break; case 7: den_v_tydnu = "neděle"; break; default: den_v_tydnu = "neurčený den v týdnu"; } document. write(den_v_tydnu+" je "+den+". den v týdnu");

CO VYPÍŠE TENTO KÓD? var den = 30; var cast_dne; switch(den) { case 1:

CO VYPÍŠE TENTO KÓD? var den = 30; var cast_dne; switch(den) { case 1: den_v_tydnu = "pondělí"; break; case 2: den_v_tydnu = "úterý"; break; case 3: den_v_tydnu = "středa"; break; case 4: den_v_tydnu = "čtvrtek"; break; case 5: den_v_tydnu = "pátek"; break; case 6: den_v_tydnu = "sobota"; break; case 7: den_v_tydnu = "neděle"; break; default: den_v_tydnu = "neurčený den v týdnu"; } document. write(den_v_tydnu+" je "+den+". den v týdnu");

NAJDĚTE V KÓDU CHYBU A 2 PŘEKLEPY: var hodina = "15"; if ((hodina >

NAJDĚTE V KÓDU CHYBU A 2 PŘEKLEPY: var hodina = "15"; if ((hodina > 0) && (hodina <= 4)) cast_dne = "v noci"; if ((hodina > 4) && (hodina <= 10)) cast_dne = "ráno"; if ((hodina > 10) && (hodina <= 12)) cast_dne = "dopoledne" if ((hodina > 12) && (hodina <= 18)) cast_dne = "odpoledne"; if ((hodina > 18) && (hodina <= 22) cast_dne = "večer"; if ((hodina > 22) && (hodina <= 0)) cast_dne = "v noci";

VYTVOŘTE ALGORITMUS A/NEBO PROGRAM: • pro výpočet n! (n-faktoriálu) • pro výpočet kvadratické rovnice

VYTVOŘTE ALGORITMUS A/NEBO PROGRAM: • pro výpočet n! (n-faktoriálu) • pro výpočet kvadratické rovnice • pro stanovení, zda je zadaný rok přestupný • pro stanovení, zda je zadané rodné číslo platné (existuje datum? je dělitelné 11? ) a patří-li muži nebo ženě • pro zjištění, zda je dané číslo prvočíslo