Uživatelské nástroje

Nástroje pro tento web


informatika:maturita:16a

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revizePředchozí verze
Následující verze
Předchozí verze
informatika:maturita:16a [24. 03. 2015, 15.39] – [Základní prvky algoritmů] - For cyklus a for-each xmrnustikinformatika:maturita:16a [26. 05. 2020, 13.21] (aktuální) – [Eratosthenovo síto] xdostal
Řádek 1: Řádek 1:
 ====== Algoritmizace ====== ====== Algoritmizace ======
-===== Algoritmus ===== 
  
-Algoritmus je přesný popis pracovního procesu, který z měnitelných vstupních údajů dochází k žádaným výsledkům. +===== Pojmy =====
-==== Vlastnosti algoritmus ==== +
-  * **Determinovanost** - v každé situaci musí být naprosto zřejmé, co a jak se má provést, jak má provádění algoritmu pokračovat, pro stejné vstupní data musí mít stejný výstup +
-  * **Obecnost** - algoritmus by neměl řešit jeden konkrétní problém (například 5 x 5), ale měl by nabízet obecné řešení daného problému (například X x Y) +
-  * **Finitivnost** - algoritmus by měl vždy mít omezený počet kroků, po kterých skončí +
-  * **Resultativnost** - musí mít nějaký výstup +
-  * **Korektnost** - výstup by měl být správně +
-  * **Efektivita** - děláí se na paměťovou efektivitu (náročnost na paměť) a výpočetní efektivitu (náročnost na výpočet), tyto dvě vlastnosti jsou většinou k sobě ve vztahu nepřímé úměry +
-==== Základní prvky algoritmů ==== +
-=== Podmínky (selekce) === +
-Umožňují větvení algoritmů. Podmínky můžou mít čtyři možné formy. První forma jsou podmínky typu **if-then**, když něco, tak dělej ("Pokud máš řidičák, budeš řídit."). +
  
-Druhou formou jsou podmínky typu **if-else** když něco, tak dělej, a pokud ne něco, tak dělej něco jiného ("Když máte kuřecí kůžičky, přidejte je, pokud je nemáte použijte potravinovou fólii." - převzato z kuchařky Ládi Hrušky). Podmínka typu **if-else** může mít speciální variantu a tou je tzv. ternární operátor. Ternární operátor se používá ve chvílikdy se při splnění podmínky použije jedna hodnota při jejím nesplnění hodnota druhá (zápis vypadá takto: podmínka ? hodnota při splnění : hodnota při nesplnění).+  * **Algoritmus** – konečná sekvence operací sloužící k řešení určitého typu úlohy 
 +  * **Program** – systematicky sestavený soubor algoritmů, zapsaný v určitém programovacím jazyce, který lze zkompilovat spustit 
 +  * **Programovací jazyk** – prostředek pro zápis algoritmů a tvorbu programů
  
-Existuje ještě jeden typ podmínky a tou je **switch-case**. Tato podmínka je založena na tom, že konkrétní proměnná (například stavmůže nabývat několik specifických hodnot děj algoritmu se ubíhá podle hodnotykterou má tato proměnná (Pokud stav nabývá hodnoty čekám čekejpokud nabývá hodnoty načítám načítej,...).+===== Pravidla programovacích jazyků ===== 
 +  * **Syntaxe** (forma– Definuje kombinaci symbolů, které jsou považovány za správně strukturovaný kód. V každém programovacím jazyce bývá syntaxe odlišná. Jejími typickými prvky jsou např. závorky, středníky, mezery tabulátory. Je-li syntaxe chybnávýsledný program nelze zkompilovat.  
 +  * **Sémantika** (význam) – Zhodnocuje význam syntakticky platných řetězců a provádí jejich výpočty. Popisuje procesykteré počítač provádí při běhu programuNapříklad: 
 +  * //int number = 1 + 1;// 
 +  * Dojde k inicializaci deklarované proměnné "number" – je do ní vložen výsledek součtu 1 + 1.
  
-=== Cykly === 
-Umožňují vícenásobné opakování části algoritmu. Cykly můžou mít také dvě možné formy. První forma jsou cykly typu **while**, dokud něco tak prováděj ("Dokud máš v košíku nákup, skládej ho na pult."). Druhá forma jsou cykly typu **do-while** prováděj dokud něco("Ohřívej vodu, dokud nezačne vařit."). Hlavní rozdíl mezi cykly typu while a do-while je ten, že cyklus typu do-while proběhne minimálně jednou, zatímco cyklus while pokud nebude hned na počátku splněna podmínka nemusí. 
  
-Cyklus typu **for** je speciálním případem cyklu **while**. Cyklus for je založen na tom, žmáme číselnou proměnnoukterou po každém průchodu cyklu upravíme a na jeho začátku kontrolujeme podmínku (Příkladem můžbýt výpočet faktoriálu - "Dokud číslo není jednaodečti od něj jedničku a vynásob číslem předchozím"). Cyklus **for** se nejčastěji používá pro iteraci přes všechny prvky množiny, kvůli zjednodušení této operace byl ve většině programovacích přidán cyklus **for-each**, který toto umožňuje bez nutnosti pamatování si v kterém místě v rámci množiny jsem.+===== Vlastnosti algoritmu ===== 
 +  * **Determinovanost** (Určenost) – V každé situaci musí být naprosto zřejmé jaký krok (instrukce) se právě provádí a jaký má následovat 
 +  * **Obecnost** – Algoritmus by měl řešit typovou úlohu co nejvíce obecně, např. výpočty s využítím proměnných místo numerických konstant 
 +  * **Finitivnost** (Konečnost) – U algoritmu musí být možné určit po jaké době skončí, či musí být myslitelné naplnění podmínky pro jeho ukončení  
 +  * **Resultativnost** (Výslednost) – Musí mít nějaký výstup, tím je buď řešení úlohy a nebo oznámení o nemožnosti nalezení tohoto řešení  
 +  * **Korektnost** (Správnost) – Výstup by měl být správně (platí zejména pro výpočetní algoritmy)  
 +  * **Efektivita** – Dělí se na paměťovou efektivitu (náročnost na paměť) a výpočetní efektivitu (náročnost na výpočet)tyto dvě vlastnosti jsou většinou k sobě ve vztahu nepřímé úměry
  
  
-==== Ukázka algoritmu ====+===== Známé algoritmy =====
  
-**Vajíčka** +==== Eratosthenovo síto ====
-  * **Vstupní údaje:** počet vajec, typ tuku, šunka +
-  * **Výstup:** poživatelná volská oka+
  
-  - Vezmi pánev +Algoritmus pro získání všech prvočísel od dvou po dané číslo.
-  - POKUD je typ tuku máslo, vezmi z lednice máslo +
-  - POKUD NENÍ, vem ze skříně olej (**if-else**) +
-  - Dej olej na pánev +
-  - Přidej na pánev šunku +
-  - DOKUD není šunka dozlatova, čekej (**while**) +
-  - Přidej vejce, DOKUD tam nejsou všechny (**do-while**) +
-  - DOKUD vše není hotovo, čekej (**while**) +
-  - Vypni plotnu +
-  - Jez! +
-<WRAP center round tip 60%> +
-**Pseudokód** - klasický kód +
-</WRAP>+
  
 +Postup: 
  
 +Krok 1: Vytvoření seznamu, obsahujícího všechna čísla v rozsahu 2 až n: 
  
 +Krok 2: První číslo ze seznamu je zapsáno jako prvočíslo do seznamu prvočísel a ze seznamu je vymazáno společně se všemi jeho násobky.
  
 +Krok 3: Opakuj krok 2, dokud není původní seznam prázdný.
  
 +Krok 4: Seznam prvočísel obsahuje všechna prvočísla od 2 po n
  
  
 +[[https://www.youtube.com/watch?v=2SD2lLFj4h0&feature=player_detailpage|Ukázka erastotenova síta na číslech od 2 do 120]]
 +
 +
 +==== Euklidův algoritmus ====
 +
 +Algoritmus pro výpočet největšího společného dělitele (dále jen NSD) dvou čísel.
 +
 +Zde příklad: jsou zadána dvě čísla 140 a 15.
 +
 +Postup:
 +  * Nejprve zjistíme zbytek po dělení většího čísla číslem menším. (V našem případě 140 = 9 * 15 + **5**)
 +  * Nyní zopakujeme první krok, ale s dělením menšího čísla zbytkem po dělení (15 = 3 * 5 + **0**)
 +  * Vyšel nám zbytek 0, takže NSD je rovno 5, pokud by nám nevyšel zbytek 0 aplikovali bychom znovu krok jedna
 +
 +[[http://www.algoritmy.net/article/44/Eukliduv-algoritmus|Podrobnější vysvětlení]]
 +
 +
 +==== Djikstrův algoritmus ====
 +
 +Algoritmus sloužící pro výběr nejlepší trasy z bodu A do bodu B. 
 +
 +Postup:
 +  * Každá cesta mezi jednotlivými body dostane hodnotu, podle "náročnosti" (délka trasy, povolená rychlost, ...). 
 +  * Algoritmus si postupně vypočítává délku cesty z bodu A do všech sousedních bodů a z nich do dalších bodů. 
 +  * Pokud algoritmus najde novou cestu do již objeveného bodu, pomalejší cestu k tomuto bodu odstraní. 
 +  * Na konci zůstane pouze jedna nejrychlejší cesta do kažhého z bodů.
 +  * Algoritmus pak jako výstup vydá nejrychlejší cestu do požadovaného bodu B. 
 +
 +
 +{{:informatika:maturita:dijkstra_animation.gif?283|}}
 +
 +
 +Pravděpodobnostní algoritmy:
 +
 +==== Algoritmus Las Vegas ====
 +
 +Algoritmus hledající prvek žádaného typu v množině s více typy prvků. V základní podobě algoritmu je narušen jak princip determinismu, tak princip konečnosti (není-li běhový čas algoritmu či počet opakování cyklu nijak omezen, běhová doba algoritmu se teoreticky může blížit nekonečnu ...). 
 +
 +Postup:
 +  * Algoritmus vybere prvek množiny s náhodně přiděleným pořadovým číslem v rámci povoleného rozsahu odpovídajícím velikosti možiny.
 +  * Poté algoritmus u získaného prvku ověřuje typ, je-li typ shodný s typem hledaným, prvek vrátí jako výsledný výstup.
 +  * Pokud však typ prvku neodpovídá, postup se opakuje a to tak dlouho, dokud není nalezen prvek typově odpovídající.
 +
 +
 +==== Algoritmus Monte Carlo ====
 +
 +Algoritmus s cílem analogickým k výše zmíněnému. Je alternativou k algoritmu Las Vegas, neboť nabízí konečnost (ukončení běhu cyklu v závislosti na parametru maximálního běhového času či počtu opakování cyklu) výměnou za jistou pravděpodobnost nedosažení cíle (není-li v rámci daného času či počtu opakování nalezen prvek žádaného typu, algoritmus skončí a vrátí se "s prázdnou").
 +
 +Postup:
 +  * Algoritmus vybere prvek množiny s náhodně přiděleným pořadovým číslem v rámci povoleného rozsahu odpovídajícím velikosti možiny.
 +  * Poté algoritmus u získaného prvku ověřuje typ, je-li typ shodný s typem hledaným, prvek vrátí jako výsledný výstup.
 +  * Pokud však typ prvku neodpovídá a zároveň není dosaženo maximálního času či počtu opakování cyklu, postup je zopakován. 
informatika/maturita/16a.1427207969.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki