200 likes | 355 Views
Algoritmy a programování. Vladimír Dostál 4.c. Algoritmy-úvod. První člověk, který poprvé vyslovil slovo algoritmus byl perský matematik Abū ‘ Abd Allāh Muhammad ibn Mūsā al - Khwārizmī . Tento matematik jako první prakticky vytvořil systém arabských číslic a základy algebry.
E N D
Algoritmy a programování Vladimír Dostál 4.c
Algoritmy-úvod • První člověk, který poprvé vyslovil slovo algoritmus byl perský matematik Abū ‘AbdAllāhMuhammadibnMūsāal-Khwārizmī. Tento matematik jako první prakticky vytvořil systém arabských číslic a základy algebry. • Algoritmus bývá často definován jako: „přesný návod či postup, kterým lze vyřešit daný typ úlohy.“ Toto je sice na první pohled pravdivá, ale při bližším prozkoumání nepřesná definice. Například některé matematické postupy by této definici vyhovovaly, ale nejsou algoritmy. Přesné znění definice algoritmu zní: „Algoritmus je procedura proveditelná Turingovým strojem“ (Skládá se z procesorové jednotky, tvořené konečným automatem a programu ve tvaru pravidel přechodové funkce a potenciálně nekonečné pásky pro zápis mezivýsledků a vstupů dat.)
Vlastnosti algoritmů • Algoritmus většinou pracuje s určitými vstupy, veličinami, které jsou mu předány před započetím jeho provádění, nebo v průběhu jeho činnosti. Vstupy mají definované množiny hodnot, jichž mohou nabývat. Algoritmus má alespoň jeden výstup, veličinu, která je v požadovaném vztahu k zadaným vstupům, a tím tvoří odpověď na problém, který algoritmus řeší.
Konečný • Každý algoritmus musí skončit v konečném počtu kroků. Počet kroků může být libovolně velký, ale pro každý jednotlivý výstup musí být konečný. Speciálním příkladem nekonečné výpočetní metody je relativní proces, který průběžně reaguje s okolním prostředím.
Deterministický • Každý jeden krok algoritmu musí být jednoznačně a přesně definován: 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.
EfektivníEfektivní • Obecně se požaduje, aby algoritmus byl efektivní vtom smyslu, že požadujeme, aby každá operace udělána algoritmem, aby byla dostatečně jednoduchá na to, aby mohla být zhotovena pouze s použitím tužky a papíru. • Př. Vyšetřování hypokalámie
Obecný • Algoritmus neřeší jeden konkrétní problém (např. 2 x 3), ale obecnou třídu obdobných problémů (např. ,, jak spočítat součet nebo rozdíl dvou celých čísel). • Rezultativní • Algoritmus, který při zadání vstupních dat vždy vrátí nějaký výsledek pořád dokola (může se jednat jen o chybné hlášení)
Druhy algoritmů • Algoritmy můžeme rozdělovat různými způsoby, mezi nejvýznamnější patří rekurzivní, hladové, rozděl a panuj, dynamického programování, pravděpodobnostní, genetické a heuristické algoritmy.
Rekurzivní algoritmy- využívají (neboli volají) samy sebe. • Hladové algoritmy- požívají se k řešení propracování po jednotlivých rozhodnutích, která, jakmile jsou jednou učiněna, už nejsou nadále revidována. • Algoritmy typu rozděl a panuj-dělí problémy na menší podproblémy, po čemž se dílčí řešení vhodným způsobem sloučí. • Algoritmy dynamického programování- funguje podobně jako hladové algoritmy, ale negeneruje se pouze jedna postoupnost. Zkoumají se všechny posloupnosti, které by mohly být optimální a vylučují se ty, které optimální nebudou. Používají se dílčí výsledky, které byly získané již dříve během výpočtu. Typickým příkladem využití dynamického programování jsou grafové úlohy a jejich grafové algoritmy. • Pravděpodobnostní algoritmy (neboli probabilistické) provádějí některá rozhodnutí náhodně nebo pseudonáhodně. Pokud bychom měli k dispozici více počítačů (jader nebo procesorů), můžeme úlohu mezi ně rozdělit, což nám umožní danou problematiku rychleji vyřešit. Tomuto cíli se věnují paralelní algoritmy • Genetické algoritmy- pracují na postupu, který se snaží aplikací principů evoluční biologie nalézt řešení složitých problémů, pro které neexistuje použitelný exaktní algoritmus.Evoluční algoritmy používají techniky napodobující evoluční procesy známé z biologie – dědičnost, mutace, přirozený výběr a křížení – pro „šlechtění“ řešení zadané úlohy.
Zápis algoritmů • Slovním popisem • -Slovní popis v přirozeném jazyce • Vývojovým diagramem • -Grafické znázornění algoritmu řešení úlohy jednotnými značkami a zkratkami • Strukturogramy • -Používá obdobné symboly ale přesnější, tento systém přesně splňuje podmínky důležité pro strukturované programování. • Datově orientované diagramy (HIPO) • -Je grafickým vyjádřením funkčního členění problému, struktury dat a postupu řešení problému při různém stupni podrobnosti. • Rozhodovací tabulky • -Požíváme při velmi složitých větveních
Programování-Binární kód • Binární kód je způsob uložení informace v počítači definován jako konečný počet bitů, ze kterých každý může nabývat pouze jednu ze dvou hodnot (označených jako 0 nebo 1). Dneska se převážně požívá Byte (bajt) s délkou slova osm bitů. Pro vypočítání binárního zápisu se používá binární soustava. • Označení binárního kódu, které se požívá v případě, že člověk neví, jaká informace je v zápisu hodnot použita. Aby mohla informace být uložena a později zase obnovena, používá se při převodu do binárního kódu vždy nějaké kódování, které určuje, jak je převedena informace do číselného zápisu.
Systém kódování • -Kódování ASCII (nebo-li American Standard Cod efor InformationInterchange), požívá 7 bitový binární kód, který představuje text pro počítače, komunikační zařízení a mnoho jiných zařízení, která požívají text. V každém znaku nebo písmenu je přiřazeno číslo od 0 do 127 ( např. v 8 bitovém kódu ASCII je malé a reprezentováno jako řetězec bitů 01100001)
Programovací jazyk • Programovací jazyk je prostředek pro zápis algoritmů, které mohou být provedeny na počítači. Program se nazývá zápis algoritmu v daném programovacím jazyce. Programovací jazyk je komunikačním nástrojem mezi programátorem (který v daným programovacím jazyce formuluje postup řešení daného problému) a počítačem.
Typy programovacích jazyků • Komplikované-(např. Pascal nebo C) • -jsou kompletně přeloženy kompilátorem ještě předtím než se spustí • -výsledkem je větší náročnost na správně zapsaný kód,ale také větší rychlost • 2) interpretované- (např. Basic,Perl,shell a Phython) • -interpretované jazyky, které se pouze interpretují (z toho důvodu jsou pomalejší - proto většina jazyků má alespoň nějakou jinou možnost, pokud nejsou stejně zpomalované něčím jiným, jako třeba shell) • -interpretované jazyky, které se překládají, ale pouze do mezikódu, nikoli do strojového kódu počítače (např. Java, Python) • -interpretované jazyky, které se po spuštění za běhu programu překládají do strojového kódu počítače (např. Java, pokud se použije systém JIT)
Programovací jazyk C • Programovací jazyk C vyvinuli počátkem 70. let 20. století KenThompson a DennisRitchie pro potřeby operačního systému Unix. • V součastné době je jeden z nejznámějších a nejpopulárnějších jazyků. Nejčastěji se používá pro psaní systémového softwaru, ale je velmi rozšířený i pro aplikace. Programovací jazyk C je nízko úrovňový, kompilovaný a relativně minimalistický. • Je dostatečně mocný na většinu systémového programování (ovladače a jádro OS), přičemž zbytek lze dořešit tzv. iniline assemblerem ( metoda zápisu assembleru přímo do kódu). Ukládání dat je v C řešeno třemi základními způsoby: statickou alokací paměti, automatickou alokací paměti na zásobníku a dynamickou alokací na haldě za pomocí knihovních funkcí.
Datové typy • Programovací jazyk C má tyto datové typy • Char- požívá se pro znaky • Int- používá se pro celá čísla • Float- používá se pro desetinné číslo s plovoucí řádkovou čárkou • Double- používá se pro desetinné číslo s plovoucí řádkovou čárkou s dvojnásobnou přesností • Void-požívá se pokud nepotřebujeme žádnou hodnotu( např u funkcí)