ALGORITMUS zklad kadho programu CO JE TO ALGORITMUS
- Slides: 25
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 ú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 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 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 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 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 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 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 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, 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é 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 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 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 = (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. 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
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 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ž 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 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 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: 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 > 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 • 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
- Kadho
- Rovnos
- Zklad
- Zklad
- Zklad
- Zone diet definition
- Zklad
- Zklad
- Zklad
- Anna negacz
- Ugdymo programų atnaujinimas
- Działania profilaktyczne w szkole sprawozdanie
- Osnove rada u programu prikupljanje i unos podataka
- Etapy tworzenia programu
- Paint narzędzia główne
- Permutáció
- Bankár algoritmus
- Algoritmus fogalma
- Algoritmus vlastnosti
- Dda algoritmus
- Hátizsák probléma
- Algoritmy na rubikovu kocku
- Lll-algoritmus
- Algoritmus vlastnosti
- Dda algoritmus
- Algoritmus fogalma