1. Algoritmizace

1.1. Algoritmizace

  • = přesný návod či postup, kterým lze vyřešit daný typ úlohy.

  • = analýza (rozbor) problému, návrh etap a způsobu jeho řešení a sestavení algoritmu v příslušném algoritmickém jazyku.

  • Za zvláštní způsob algoritmizace považujeme sestavení a napsaní programu ve vybraném programovacím jazyku, kterému říkáme programování.

1.2. Algoritmus

Název algoritmus pochází ze začátku devátého století z Arábie. V letech 800 až 825 napsal arabský matematik Muhammed Ibn Músá al Chwárizmí dvě knihy, z nichž jedna se v latinském překladu jmenovala Algoritmi dicit, česky „Tak praví al Chwárizmí“. Byla to kniha postupů pro počítání s čísly.
Algoritmus = posloupnost konečného počtu elementárních kroků vedoucích k vyřešení úlohy (slovník cizích slov).

Algoritmus je předpis, který se skládá z kroků, a který zabezpečí, že na základě vstupních dat jsou poskytnuta požadovaná data výstupní.

1.3. Zápis algoritmu

Jazykový
• slovní zápis,
• zápis v pseudojazyku,
• symbolický jazyk - je to prostředek, který připomíná programovací jazyk. Má přesně stanovenou syntaxi – způsob zápisu operací, formulace podmínek atd. i sémantiku – repertoár a význam operací, které lze použít. Vzhledem k tomu, že tyto prostředky jsou silně formalizované, lze takto zapsaný algoritmus snadno převést do programovacího jazyka. Často se jako symbolický jazyk používá existující programovací jazyk, např. Pascal, doplněný slovním popisem.
nsd(x,y):
if x<y then d:=x else d:=y;
while d není dělitelem x or d není dělitelem y do
d:=d-1;
nsd:=d;
• matematický zápis: vzorec, logické tabulky,
• zápis v programovacím jazyku 
Grafický
• strukturní diagram – zobrazuje hrubou strukturu řešení,
• vývojové diagramy (značky spojené spojnicemi, značky dány normou),
• strukturogramy (kompaktní schéma bez spojnic),
• kopenogramy – barevné vývojové diagramy.

strukturní diagram

 web.sks.cz/users/ku/DOKUMENTY/pri_syl.pdf

strukturniDiagram

vývojový diagram

strukturogram:

  strukturofram

vyuka.pecinovsky.cz/prispevky/2012-SW_Kopenogramy_a_jejich_implementace_v_NetBeans.pdf

kopenogram:

kopenogram

1.4. Požadavky kladené na algoritmus

Každý algoritmus musí splňovat následující vlastnosti:

  • konečnost - požadovaný výsledek musí být poskytnut v rozumném čase (pokud by výpočet trval na nejrychlejším počítači např. sto let, těžko bychom mohli hovořit o algoritmu řešení, nemluvě o výpočtu, který by neskončil vůbec). Za rozumný lze považovat čas, kdy nám výsledek výpočtu k něčemu bude.
  • hromadnost - vstupní data nejsou v popisu algoritmu reprezentována konkrétními hodnotami, ale spíše množinami, ze kterých lze data vybrat (např. při řešení třídění celých čísel bude vstupem M  Z). Při popisu algoritmu v programovacím jazyce se to projeví tím, že vstupy do algoritmu jsou označeny symbolickými jmény.
  • jednoznačnost - každý předpis je složen z kroků, které na sebe navazují. Každý krok můžeme charakterizovat jako přechod z jednoho stavu algoritmu do jiného, přičemž každý stav je určen zpracovávanými daty. Tím, jak data v jednotlivých stavech algoritmu vypadají, musí být jednoznačně určeno, který krok následuje.
  • opakovatelnost - při použití stejných vstupních údajů musí algoritmus dospět vždy k témuž výsledku.
  • rezultativnost - algoritmus vede ke správnému výsledku, i kdyby to bylo například vypsání textu, že rovnice nemá řešení.

1.5. Etapy řešení problému

  • specifikace (definice) problému, určení vstupních dat a požadavků na výstupy,
  • analýza problému – volba vhodné metody řešení, sestavení algoritmu – posloupnost na sebe navazujících kroků (řídící struktury), návrh datových struktur,
  • kódování – zápis algoritmu v jazyce procesoru a jeho ladění, odstranění syntaktických chyb,
  • testování – ověření správnosti navrženého algoritmu, odstranění sémantických chyb, 
  • údržba a aktualizace, optimalizace - vylepšení programu (zrychlení výpočtu, zmenšení paměťových nároků apod.).

1.6. Program

je předpis pro provedení určitých akcí počítačem zapsaný v programovacím jazyku Syntaxe a sémantika programovacích jazyků
  • syntaxe je souhrn pravidel udávajících přípustné tvary dílčích konstrukcí a celého programu,
  • sémantika udává význam jednotlivých konstrukcí - je obvykle popsána slovně.
Překladač je program, který jako vstupní data zpracovává text zapsaný v nějakém jazyce. Překladače můžeme rozdělit na dvě hlavní skupiny:
  • kompilační překladače (assemblery a kompilátory),
  • interpretační překladače (interprety).

Kompilační překladač čte zdrojový program zapsaný ve zdrojovém jazyce a překládá (transformuje) jej na ekvivalentní cílový program zapsaný v cílovém jazyce. Pokud je zdrojovým jazykem jazyk symbolických instrukcí a cílovým jazykem jazyk relativních nebo absolutních adres (strojový kód), potom se příslušný kompilační překladač obvykle nazývá assembler. V případě, že zdrojovým jazykem je vyšší programovací jazyk (Pascal, C, Fortran) a cílovým jazykem je jazyk symbolických instrukcí, jazyk relativních nebo absolutních adres, pak se příslušný překladač obvykle nazývá kompilátor. Při práci kompilačního překladače vzniká cílový program. Samotné provádění cílového programu (zadání vstupních dat, výpočet a získání výsledků) je činnost časově oddělena od překladu.

Interpretační překladač čte zdrojový program, analyzuje jej a zajišťuje provádění operací, které odpovídají jednotlivým příkazům zdrojového programu. Této činnosti se říká interpretace zdrojového programu. Při interpretaci příkazů vstupu se čtou vstupní data, při interpretaci příkazů pro výstup se provádí výstup výsledků. Při práci interpretačního překladače nevzniká cílový program.