You are on page 1of 9

Vývojové diagramy – Cykly

Vždy keď je potrebné opakovať niekoľko krát krok algoritmu resp. príkaz je výhodné použiť cyklus. Na
pochopenie cyklu nám poslúži úloha zameraná na hľadanie minima.

Príklad č.1 Vytvorte vývojový diagram algoritmu pre nájdenie minima z ľubovoľného počtu prvkov.

Diagram č.1:
Vyjadruje situáciu v ktorej sa bude hľadať minimum z dvoch čísel A a B. Využije sa na to značka vetvenia
s podmienkou kde sa testuje či A je väčšie ako B. Ak je A väčšie nastaví sa premenná MIN na hodnotu
B a v opačnom prípade sa MIN nastaví na A. MIN predstavuje výslednú minimálnu hodnotu. Pri dvoch
číslach je hľadanie minima celkom jednoduché a vystačíme si s vetvením. Ak by sme však pridali tretie
číslo algoritmus sa bude musieť rozšíriť o ďalšie vetvenie.
Diagram č.2:
Tu sa hľadá minimálna hodnota z troch čísel A, B, C. Algoritmus sa nám rozšíril o ďalší vetviaci blok kde
do premennej MIN uložíme C ak sa zistí že C je menšie ako už nájdené minimum uložené v MIN.
Diagram č3:
1
Peter Kačur, Programovanie, December 2020-Január 2021,
Dokument je voľne šíriteľný za predpokladu zachovania jeho pôvodného obsahu.
Hľadá sa minimum zo 4 čísel uložených v premenných A, B, C, a D. Algoritmus sa opäť rozrástol
o ďalší vetviaci blok a hodnota v MIN sa opäť zmení ak sa zistí že D je menšie ako už skôr nájdené
minimum uložené v MIN.
V troch diagramoch ste si mohli všimnúť, že sa tam niečo ustavične opakuje vždy keď sa pridá ďalšie
číslo pre nájdenie nového minima. Opakuje sa načítanie novej hodnoty, pridá sa vetviaci blok
s rovnakou podmienkou a vykoná sa priradenie nového minima do MIN. Ak by sme uvažovali
s hľadaním minima v rozsiahlej množine prvkov tak by sme strávili veľa času písaním a kreslením toho
čo sa vlastne ustavične iba opakuje. Preto si prácu zefektívnime a pokúsime sa to, čo sa v algoritme
opakuje vyjadriť cyklom.

Diagram 4:
Pred zavadením samotného cyklu je nutné algoritmus vhodne upraviť, a tak ho pripraviť aby cyklus
vôbec bolo možné použiť. Prvá vec je, že premennú určenú pre uloženie výsledného minima
nastavíme na začiatku algoritmu na počiatočnú hodnotu čím vykonáme tzv. inicializáciu. Ako prvé
načítavame premennú A preto je vhodné MIN nastaviť na A, teda MIN=A. Týmto zabezpečíme, že

2
Peter Kačur, Programovanie, December 2020-Január 2021,
Dokument je voľne šíriteľný za predpokladu zachovania jeho pôvodného obsahu.
prvý vetviaci blok bude mať namiesto pôvodných dvoch vetiev, už iba jednu vetvu z príkazovou
značkou, presne tak ako to budú mať aj nasledujúce vetviace bloky.
Diagram 5:
Inicializáciu vykonanú v diagrame 4 je možné vykonať aj iným spôsobom, a to tak že premennú MIN
si nastavíme na nejaké veľmi veľké číslo čo je v diagrame vyjadrené ako + nekonečno alebo +oo. Tým
sa zabezpečí, že každé číslo ktoré budeme porovnávať s MIN bude na začiatku vždy menšie. Tento
spôsob však nie je nutný, ale len pre krajšiu názornosť toho, ako sa neskôr budú opakovať takmer
identické bloky vetvenia ju použijem.
Diagram 6:
Na to aby sme mohli zaviesť cyklus musíme ešte odstrániť ustavične sa opakujúci názov premennej
do ktorej načítavame nové číslo. Namiesto A, B, C, D... potrebujem mať iba jednu premennú napr. A.
Túto prekážku rôznych premenný odstránime jednoducho nahradením premenných B, C, D...
premennou A. Teraz nám už nič nestojí v ceste pre zavedenie cyklu preto že ako sami vidíte diagram
pozostáva s opakujúcich sa identických blokov pre načítanie premennej a vetvenie.

Avšak, máme rôzne typy cyklov, ktoré sa odlišujú na základe spôsobu ich ukončenia. Ktorý z nich bude
pre náš príklad vhodný?

Cyklus so známym počtom opakovaní:

Ak dopredu vieme koľko opakovaní sa má vykonať, tak hovoríme o cykle so známym počtom
opakovaní. Opakovania budeme nazývať aj iterácie. Tento typ cyklus môžeme vyjadriť
v zjednodušenom tvare tak, ako je na obrázku v ľavo a v komplikovanejšom tvare tak, ako je na obrázku
v pravo. Výber tvaru diagramu v rámci tohto učiva bude ľubovoľný hoci správnejsič by bolo použiť
diagram v pravo.

Cyklus s podmienkou na začiatku a na konci:

3
Peter Kačur, Programovanie, December 2020-Január 2021,
Dokument je voľne šíriteľný za predpokladu zachovania jeho pôvodného obsahu.
Ak sa cyklus bude opakovať dovtedy pokiaľ bude splnená ukončovacia podmienka, tak budeme hovoriť
o cykle s podmienkou na začiatku. Ak sa vykoná aspoň raz telo cyklu, a jeho opakovanie sa bude
vykonávať dovtedy kým nebude splnená ukončovacia podmienka, tak hovoríme o cykle s podmienkou
na konci.

Teraz sa vráťme k diagramu č. 6. Pre zavedenie cyklu sa nám


ukazujú ako najvhodnejšie tie s neznámym počtom opakovaním,
no pre demonštráciu typu cyklu so známym počtom opakovaní
použijeme práve ten a tie ostatné typy si ukážeme na iných
príkladoch.
1. Inicializujeme si premennú MIN na nejaké veľmi veľké
číslo, čo je vyjadrené symbolom nekonečno +oo.
2. Značka cyklu obsahuje riadiacu premennú L, ktorá sa
automaticky navyšuje o 1 po každom opakovaní tela
cyklu, teda po každej iterácii. Riadiaca premenná sa
bude navyšovať do vtedy kým nedosiahne hodnotu 100,
čo zabezpečí, že sa cyklus ukončí a algoritmus bude
pokračovať ďalej v bode 6.
3. Telo cyklu obsahuje ako prvý krok načítanie čísla od
užívateľa do premennej A. Uvedomte si, že tento krok aj
celé telo cyklus sa bude cyklicky opakovať 100 krát.
4. Otestuje sa či užívateľom zvolené číslo v A je menšie ako
MIN, ktorý sme na začiatku nastavili na veľmi veľké
číslo. Ak je A menšie, vykoná sa vetva označená ako
True, inak sa vykoná vetva označená ako False.
5. Povedzme že A je menšie, preto sa jej hodnota uloží do
premennej MIN čím sa pôvodná hodnota v MIN prepíše.
Následne algoritmus pokračuje návratom do bodu 2 kde

4
Peter Kačur, Programovanie, December 2020-Január 2021,
Dokument je voľne šíriteľný za predpokladu zachovania jeho pôvodného obsahu.
sa navýši hodnota riadiacej premennej L o jedna. Potom sa opäť zopakuje telo cyklu.
6. Po vykonaní 100 iterácií cyklu sa ten ukončí a vypíše sa výsledok teda minimum uložené
v premennej MIN.
Ako ste si istotne všimli vývojový diagram je podstatne jednoduchší a flexibilnejší, ako ten pôvodný
Diagram č.6.

Príklad č. 2
Úlohou je vytvoriť vývojový diagram algoritmu, ktorý bude overovať správne zadanie prihlasovacích
údajov do informačného systému. Na diagramoch sú zobrazené riešenia úlohy s využitím cyklov
s podmienkou na konci a s podmienkou na začiatku. Všimnite si rozdiel medzi nim.

Všimnite si, že pri cykle s podmienkou na začiatku sa údaje MENO a HESLO načítajú aspoň raz a to aj
keď k vyhodnoteniu ukončovacej podmienky cyklu ešte nedošlo. Vývojový diagram je v porovnaní
s cyklom s podmienkou na začiatku stručnejší a málovravnejší. V cykle s podmienkou na začiatku je
užívateľ informovaný navyše o tom, že zadal nesprávne prihlasovacie údaje, čo je istá výhoda. Okrem
toho aj ukončovacia podmienka cyklov s podmienkou na konci a na začiatku sa vyhodnocuje trochu
odlišne. Cyklus s podmienkou na konci sa ukončí ak je výsledkom podmienkového výrazu kladná
odpoveď (Áno, True, Pravda, +), zatiaľ čo cyklus s podmienkou na začiatku sa ukončí ak je výsledok
podmienkového výrazu záporný (Nie, False, Nepravda, -).

5
Peter Kačur, Programovanie, December 2020-Január 2021,
Dokument je voľne šíriteľný za predpokladu zachovania jeho pôvodného obsahu.
Vnáranie cyklov

Na vývojovom diagrame vľavo sú znázornené 2 cykly umiestnené za sebou. Najprv sa vykoná horný
a potom dolný cyklus. Nejde o nič výnimočné, ale tento prístup nerieši isté algoritmické problémy.
Napríklad, predstavme si tabuľku, ktorej bunky by sme chceli prechádzať. Tabuľka by mala N riadkov
a M stĺpcov Diagramom vľavo by sme tento problém nevyriešili. Výhodným riešením je použiť
vnorený cyklus zobrazený diagramom vpravo. Jednotlivé riadky a stĺpce sa prechádzajú postupným
navyšovaním riadiacich premenných i a j. V rámci i-tého riadku sa prechádzajú j-té stĺpce cyklicky.
Nadradený cyklus navyšuje premennú i až potom čo je ukončený podriadený cyklus a jeho premenná
j dosiahla hodnotu v M. Nadradený cyklus sa ukončí až vtedy ak premenná i dosiahne hodntu v N.
Vnorený cyklus má široké využitie napríklad aj v algoritmoch pre usporadúvanie prvkov či
prechádzanie bodov rastrovej grafiky súradnicami x a y. Cykly sa môžu vnárať do seba do takej
úrovne, ako to vyžaduje daná aplikácia.

6
Peter Kačur, Programovanie, December 2020-Január 2021,
Dokument je voľne šíriteľný za predpokladu zachovania jeho pôvodného obsahu.
Nedovolené kríženie vnorených cyklov

Diagram znázorňuje nepovolené kríženie vnorených cyklov. Ide o situáciu keď podradený cyklus po
ukončení jednej iterácie pokračuje nadradeným cyklom. Takéto kríženie nemá žiadny praktický
zmysel a ide len o chybu spôsobenú nepozornosť pri tvorbe diagramu.

Príklad č.4
Úlohou je vytvoriť
Pre A=7 vývojový diagram
XXXXXXX algoritmu, ktorý
XXXXXXX vykreslí plný štvorec
XXXXXXX pomocou znaku ‘X‘.
XXXXXXX Dĺžku strany zadá
XXXXXXX užívateľ na vstupe.
XXXXXXX Pri hľadaní riešenia
XXXXXXX vás určite napadne
že plný štvorec
vykreslený nejakým
znakom sa podobá tabuľke/mriežke, ktorá
má riadky a stĺpce. Tam kde sa pretína riadok
a stĺpec tam sa vykreslí znak ‘X‘. Teda na
riešenie bude vhodné použiť vnorený cyklus.
V diagrame si všimnite, že dĺžka strany
štvorca vyjadrená premennou A zároveň
určuje počet riadkov a počet stĺpcov
pomyselnej mriežky a teda aj počet
opakovaní/iterácii nadradené, ale aj
podradeného cyklu. Jadrom algoritmu je
opakované vypísanie znaku ‘X’ a prechod na
nový riadok vždy, keď sa dosiahne predpísaný
počet stĺpcov v danom riadku. O prechod na
nový riadok sa stará nadradený cyklus
a o výpis znaku do stĺpca sa stará podradený
7
Peter Kačur, Programovanie, December 2020-Január 2021,
Dokument je voľne šíriteľný za predpokladu zachovania jeho pôvodného obsahu.
cyklus. Znak ‘X’ sa vypíše presne AxA krát. Ak by bola dĺžka strany štvorca A=7 potom počet
vypísaných znakov X by bol 7*7=49.

8
Peter Kačur, Programovanie, December 2020-Január 2021,
Dokument je voľne šíriteľný za predpokladu zachovania jeho pôvodného obsahu.
Použitá literatúra a nástroje

[1] Online nástroj na tvorbu diagramov: https://app.diagrams.net/

9
Peter Kačur, Programovanie, December 2020-Január 2021,
Dokument je voľne šíriteľný za predpokladu zachovania jeho pôvodného obsahu.

You might also like