Algoritmus a vazba na program
Je důležité si uvědomit, že dosud počítače nejsou schopné zcela samostatného myšlení. Pro provádění výpočtů a obecně zpracování dat je třeba vytvořit jasné postupy - algoritmy zpracování.
1. Algoritmus a vazba na program
1.7. Sekvenční bloky
Deklarace proměnné
Algoritmy (včetně programů) v převážné většině pracují s daty a tato data potřebují uchovávat. Za tímto účelem využíváme proměnnou (anglicky „Variable“), kterou lze vnímat jako pojmenovaný šuplík (v programu vymezený úsek paměti), do kterého lze ukládat data. Lze tedy logicky odvodit, že hodnota proměnné se v průběhu algoritmu mění. Proměnná je pojmenovaná svým pevným názvem. Tento název by měl být v konkrétním bloku algoritmu jedinečný, tzn., v konkrétním bloku algoritmu by se neměly vyskytnout dvě nebo více proměnných se stejným názvem. U názvu proměnných budeme psát malé počáteční písmeno. Název proměnné se používá k označení hodnoty, která je do ní uložena, a měl by dostatečně vystihovat podstatu proměnné, např. proměnná týkající se věku by měla být pojmenována jako vek a ne x39. Název proměnné by neměl být příliš dlouhý, nebo příliš krátký. Názvy proměnných by se neměly lišit pouze v počátečním písmenu, protože může dojít k jejich záměně např. MojePromenna vs mojePromenna.
U víceslovných názvů proměnných budeme využívat tzv. velbloudí notaci (anglicky „Camel Case“), která označuje způsob psaní víceslovných nadpisů, v nichž jednotlivá slova nejsou oddělena mezerami, ale každé z nich začíná velkým písmenem.
V programování se specifikací proměnné rozumí tzv. deklarace proměnné. Pod slovem deklarace (anglicky „Declaration“) si představme specifikaci názvu proměnné a typu hodnoty tzv. datového typu (anglicky „Data Type“), kterou proměnná bude obsahovat. Vzhledem k tomu, že pro tvorbu algoritmů budeme využívat nástroj Flowgorithm, uveďme si základní značku deklarace proměnné - viz Obrázek 1.

Obrázek 1: Značka deklarace proměnné
Aplikace Flowgorithm umožňuje při deklaraci proměnné používat následující základní datové typy:
-
Integer - pokud má proměnná v sobě uloženo celé číslo
-
Real - reálné číslo
-
String - textový řetězec (řetězec jednotlivých znaků)
-
Boolean - logická proměnná (hodnota True, False)
Datové typy by neměly být použity jako tzv. identifikátor, tj. např. název proměnné, název algoritmu atd.!
Přiřazení hodnoty proměnné
Vzhledem k tomu, že již víme, jak deklarovat proměnnou, měli bychom také vědět, jak do ní přiřadit (uložit) hodnotu. K tomu využijeme značku přiřazení (anglicky „Assign") - viz Obrázek 2.
![]()
Obrázek 2: Značka přiřazení hodnoty proměnné
Značka tvoří základní prvek algoritmu, jež se zpravidla zabývá zpracováním dat. Z formálního hlediska může jít o jeden příkaz, i když je vnitřně složitě strukturovaný. Obdélníková značka vyjadřuje tzv. příkaz (anglicky „Statement“). Nejčastějším příkazem je přiřazovací příkaz, který má tři části:
- Proměnnou, kam se přiřazuje hodnota,
- Operátor přiřazení ( jazyce C# =, v jiných jazycích také :=).
- výraz (anglicky „Expression“), tzn., vše, co může v algoritmu po svém vyhodnocení nabýt nějaké hodnoty.
Nejjednodušším výrazem je konstanta. Složitějším výrazem je proměnná a ještě složitějším je výraz, složený z proměnných a konstant spojených povolenými operátory (podle typu proměnných a konstant). Povolené operátory aritmetických výrazů jsou známé operace jako: sčítání „+“, odečítání „-“, násobení „*“, podíl „/“, nebo systém závorkování „(…)“. Při vyhodnocování aritmetických výrazů se vyhodnocuje zleva doprava, přičemž operátory násobení a podílu mají vyšší prioritu (jsou prováděny dříve) než sčítání a odečítání. Prioritu vyhodnocování lze měnit závorkovou skladbou.
Následující tabulka obsahuje aritmetické operátory, které lze využít ve vývojových diagramech – viz Tabulka 1. Značky aritmetických, relačních a logických operátorů, které jsme zvolili, jsou využity s ohledem na návrh algoritmů pro programovací jazyk C#. V tabulce proto také naleznete možné další zobrazení matematických a dalších operátorů, se kterými se můžete setkat v různých studijních zdrojích. Pokud jste se nesetkali s pojmy jako je celočíselné dělení (dělení dvou celých čísel) a zbytek po celočíselném dělení, přečtěte si následující odstavec.
Pro operaci celočíselného dělení budeme ve vývojových diagramech používat značku /. Pro zbytek po celočíselném dělení (MODULO) budeme používat značku %. Uveďme si příklad celočíselného dělení: 7 / 2 = 3. Dvojka se vejde celá do sedmičky celkem třikrát. U zbytku po celočíselném dělení: 7 % 2 = 1. Dvojka se do sedmičky vešla celá třikrát. Jednička je zbytek po celočíselném dělení (o kolik se dvojka nevešla celá do sedmičky), tedy 7-(2*3) = 1.
|
Operátor |
Operace |
Příklad |
Možná další označení – nebudeme používat! |
|
+ |
Sečtení |
x + y |
|
|
- |
Odečtení |
x – y |
|
|
* |
Násobení |
x * y |
|
|
/ |
Dělení (celočíselné dělení) |
x / y |
DIV … celočíselné dělení |
|
% |
Modulo – zbytek po celočíselném dělení |
x % y |
MOD |
|
^ |
Umocnění |
x^2 … druhá mocnina – v matematickém zápise x2 |
SQR … druhá mocnina čísla |
|
SQRT |
Druhá odmocnina |
SQRT (x) …samozřejmě lze použít převrácenou hodnotu mocniny x^0.5 |
|
Tabulka 1: Aritmetické operátory
Povolené operace v sekvencích jsou: rozdíl, součin, mocnina, logický součet, logický součin, negace. U podílu (popřípadě celočíselné dělení) lze dělit dvě čísla pouze tehdy, když je jmenovatel různý od nuly. Pokud tomu tak není, výsledkem je neurčitá hodnota a tuto vlastnost musíme v algoritmu ošetřit např. větvením, což už není sekvence!
Operace, které nejsou v sekvencích povolené: podíl (např. dělení nulou), celočíselné dělení, odmocnina (např. odmocnina záporného čísla), jakákoliv forma cyklu. Odmocnina – pokud neprovádíte výpočty s komplexními čísly, pak výraz pod odmocninou nesmí být záporný. V algoritmu musíme tento jev ošetřit např. větvením, což už není sekvence! [2]
Hodnotu proměnné lze také naplnit v jiném zavolaném podprogramu - v C# programování obecně metodě (proceduře), nebo ji lze přiřadit výstup z jiného podprogramu (výstup funkce). Ve starších vývojových diagramech lze najít jako značku přiřazení symbol ←. Tato značka již ale není dnes zpravidla využívána.
Pro větší úsporu místa ve vývojovém diagramu je také někdy napsáno více příkazů nebo výrazů v rámci jednoho bloku přiřazení. Jednotlivé příkazy jsou specifikovány na řádcích pod sebou. Tento přístup však někdy znesnadňuje čitelnost algoritmu.
Komentář
U algoritmů je zpravidla vhodné doplnit u jednotlivých prvků vlastní popisek, tzv. komentář (anglicky „Comment“) – viz Obrázek 3. Značka komentáře patří do skupiny Další značky, ale značka této dodatečná informace (popisující např. podstatu prvku) často uživateli pomůže rychle pochopit již dříve vytvořený algoritmus, ke kterému se po čase vrátil. Proto jsme tuto značku vysvětlili již nyní. Komentář nemá vliv na algoritmus (v programování na kód).
![]()
Obrázek 3: Značka komentáře
Blok výstupu
Pokud potřebujeme zobrazit tzv. výstup (anglicky „Output“), tj. např. vypsat text, nějaká data, vypsat hodnotu uloženou v proměnné, zapsat data do souboru apod., použijeme pro blok vstupu značku, která má tvar kosodélníku - viz Obrázek 4.
![]()
Obrázek 4: Značka výstupu
Pozn.: Protože pro vývojové diagramy nejsou omezeny normou, lze u českých vývojových diagramů nalézt podobné termíny jako: Piš, Vypiš, Zobraz, Tiskni, u anglických zase: Write, Print, Display apod. Za účelem sjednocení různých názvů pro jednu a tu samou činnost, budeme u bloků výstupu používat slovo Output.
Následující příklad ukazuje značku výstupu pro výpis textu "Hello, World!". Text je uvozen a zakončen horními uvozovkami " " – Obrázek 5.
![]()
Obrázek 5: Značka výstupu – příklad vypsání textu
Algoritmus HelloWorld
-
Popis: Vývojový diagram výpisu textu "Hello, World!"
-
Zadání: Zkuste vymyslet, jak byste zaznamenali výpis textu pomocí vývojového diagramu, včetně komentáře, který popisuje, co daná značka výpisu provádí
Algoritmus HelloWorldPromenna
-
Popis: Vývojový diagram výpisu proměnné s názvem osloveni v níž je uložen text "Hello, World!"
-
Zadání: Zkuste vymyslet, jak byste zaznamenali výpis hodnoty uložené v proměnné pomocí vývojového diagramu, včetně komentářů, které popisují, co jednotlivé značky zajišťují
Blok vstupu
Pro algoritmus je důležité načtení dat, které jsou využity při provádění procesů v algoritmu. Další neméně důležitou značkou je blok vstupu (anglicky „Input“) (někdy též označovaný jako Data). Tato značka kosodélníku je stejná jak pro načtení dat, tak i pro výpis dat - viz Obrázek 6. Proto pokud jsou v algoritmu načítána data, je vhodné uvést uvnitř značky informaci, že jde o načtení dat - slovo Input.
![]()
Obrázek 6: Značka vstupu
Pozn.: U českých vývojových diagramů je možné nalézt slova jako: Čti, Načti apod.. Za účelem sjednocení různých názvů příkazu načtení, budeme u bloků vstupu používat anglické slovo Input.
Za slovem Input následuje název nebo názvy proměnných, do kterých budou načteny (uloženy) hodnoty, které jsou vstupem do algoritmu, např. uživatel zadá hodnoty pomocí klávesnice apod.
Hodnoty se do algoritmu zadávají různým způsobem – nejčastěji použitím bloku vstupu (vstupní zařízení naplní určené proměnné např. klávesnice počítače, čtecí zařízení, import ze souboru apod.). Při plnění proměnné musíme dodržet zásady: vstupní seznam může být i prázdný a v seznamu mohou být pouze jména proměnných, které mají být naplněny (nesmí to být např. konstanta nebo jiný výraz. Hodnota konstanty se v průběhu algoritmu nemění a nemusí mít vždy jen číselnou hodnotu).
Algoritmus HelloWorldNacteni
-
Popis: Vývojový diagram výpisu proměnné v níž je uložen text zadaný uživatelem
-
Zadání: Zkuste vymyslet, jak byste zaznamenali výpis hodnoty zadané uživatelem uložené v proměnné s názvem osloveni pomocí vývojového diagramu, včetně komentářů, které popisují, co jednotlivé značky zajišťují