Preštudujte si: Vývojové diagramy

Portál: amos.ukf.sk
Kurz: Programovanie 1
Kniha: Preštudujte si: Vývojové diagramy
Vytlačil(a): Hosťovský používateľ
Dátum: piatok, 26 apríla 2024, 20:00

Opis

Dozviete sa o jednoduchom grafickom zápise algoritmov.

Vývojové diagramy

Algoritmický jazyk by mal byť skonštruovaný tak, aby spĺňal vlastnosti algoritmu. Ako sme už spomenuli, zrejme najbližším jazykom je pre každého človeka jeho prirodený jazyk. Nie je však ani zďaleka najvhodnejším a zápis algoritmov prostredníctvom neho, je najmä pre začiatočníkov príliš neprehľadný. Pre túto kategóriu používateľov poskytujú omnoho reálnejšiu predstavu o tom, ako algoritmus pracuje skôr zápisy využívajúce grafické prvky, ktoré už svojim vzhľadom napovedajú o hlavnom účele.

Po dlhých úvahách sme dospeli k názoru, že najvhodnejším grafickým jazykom pre začiatočníkov sú vývojové diagramy.

Jazyk vývojových diagramov (JVD)

- používa štátnou normou stanovené značky
- prehľadne vyjadruje tok riadenia a dát
- ide o staršiu formu zápisu algoritmu

Príkaz vstupu a výstupu

Jednou z vlastností algoritmu je hromadnosť, ktorá mu prisudzuje schopnosť byť použiteľný na riešenie problému so všetkými prípustnými hodnotami vstupných údajov. Prvým predpokladom, ktorý nám umožní využiť algoritmus skutočne hromadne, je možnosť vkladania rôznych vstupných údajov. Na získanie údajov od používateľa využíva algoritmus príkazy vstupu, prostredníctvom ktorých umiestni hodnoty zadané používateľom do premenných uvedených na vstupe.

S prečítanými hodnotami potom realizuje predpísané operácie a výsledok vypíše (prípadne iným spôsobom zobrazí) prostredníctvom príkazov výstupu.
Pre operácie vstupu a výstupu využívajú vývojové diagramy blok

vstup vystup

... vstup: dlzka, sirka ...

... vstup: polomer...
... výstup: obsah_obdlznika...

Premenná

Okrem najjednoduchších prípadov používame pri vytváraní algoritmov takmer vždy premenné. Premenná je objekt (môžeme ju považovať za nejakú pamäť, alebo miesto v pamäti) slúžiaci počas behu algoritmu na odkladanie údajov. Jej hodnota sa počas činnosti algoritmu môže meniť (a zvyčajne sa aj mení). Môže obsahovať číslo, znak, textový reťazec a pod. Každá premenná má svoje meno pozostávajúce z písmen, číslic a niektorých špeciálnych znakov (napr. obsah, dlzka, a2, priemer a pod.). Univerzálnym pravidlom je, že na prvom mieste musí byť písmeno a nie je možné používať znaky s dĺžňami a mäkčeňmi.
Je žiaduce, najmä pri rozsiahlejších algoritmoch a neskôr programoch, voliť také mená premenných, z ktorých je okamžite zrejmé ich použitie, napr. obsah, prepona, menoUcitela a nie xxx, pes, bryndza(i keď v niektorých prípadoch môže byť i takýto názov opodstatnený).

Na nasledujúcich riadkoch budeme dodržiavať zásadu, že názvy jednoslovnej premennej budú zapísané malými písmenami a v prípade viacslovných názvov, bude prvé slovo zapísané písmenami malými a každé prvé písmeno ďalšieho slova bude veľké (napr. obsahKruhu, menoPouzivatelaPocitaca). Podotýkame, že ide len o dohodu a jeden z používaných zápisov. Osvedčil sa nám najmä v programátorskej praxi, kde predstavuje určitú časovú úsporu a zvyšuje prehľadnosť napr. oproti zápisu používajäcemu oddeľovanie jednotlivých slov podčiarkovníkom (obsah_kruhu, meno_pouzivatela_pocitaca).

Hodnoty sa do premennej dostávajú priradením alebo načítaním. Načítanie je realizované prostredníctvom operácií vstupu a výstupu, priradenie umiestni (priradí) do premennej konkrétnu hodnotu.

Operácia priradenia je vyjadrená dvojicou znakov „:=“ a platí, že pokiaľ je meno premennej uvedené naľavo od operácie priradenia, tak do tejto premennej vkladáme (priraďujeme). Uvedením premennej napravo od symbolu priradenia prikazujeme algoritmu pracovať už len s hodnotou, ktorú táto premenná obsahuje – jej obsah sa tým nemení.

Často sa príkaz priradenia pletie s rovnosťou známou z matematiky, ktorá sa v algoritmizácii využíva v podmienkach. Znak „=“ v nasledujúcom texte predstavuje porovnanie, znaky „:=“ priradenie.

Priradenie môže byť realizované prostredníctvom:
  • priradenia konkrétnej hodnoty (číselnej, textovej alebo inej), napr.:

polomer := 15
meno := 'Jozef'

  • priradením obsahu (hodnoty) inej premennej, napr. :

novyPolomer := polomer
meno2 := meno

Postup, ktorý algoritmus vykoná je veľmi jednoduchý: vezme hodnotu premennej umiestnenej na pravej strane a vloží ju do premennej uvedenej na strane ľavej.

  • výpočtom, resp. zistením hodnoty výrazu zapísaného na pravej strane, do premennej sa vloží len získaná hodnota, nie spôsob výpočtu:

cislo := 15 + 12
obsah := vyska * sirka
objem := a * b * c
obsahKruhu := 3,14 * polomer * polomer
vypocet := a * b + c – 3 * (d + f)

Postup algoritmu: vyhodnocuje výraz na ľavej strane rovnako ako matematický výraz t.j. uprednostňuje výpočty v zátvorkách i násobenie a delenie pred sčítaním a odčítaním. Namiesto mena premennej vždy dosadí hodnotu, ktorú premenná aktuálne obsahuje.

Zaujímavým, špecifickým a v praxi často používaným typom zápisu je:

x := x+1

ktorý zvyšuje hodnotu premennej x o 1. Ak x obsahuje napr. hodnotu 11, tak proces prebehne tak, že sa vyhodnotí výraz na pravej strane x+1, t.j. 11+1 a výsledok (12) sa vloží do premennej x. Vloženie prebehne až po ukončení výpočtu na pravej strane a preto nehrozí, že by použitie tej istej premennej na pravej i ľavej strane zápisu mohlo vyvolať kolíziu alebo neočakávané správanie.

Nesprávne zápisy:

12345 := meno
a + b := c

postupnosť znakov uvedených na ľavej strane ani v jednom prípade nepredstavuje platné meno premennej (v prvom prípade nezačína písmenom, v druhom obsahuje nepovolený znak „+“). Nezávisle na tom, čo chcel autor týmito zápismi dosiahnuť sú nesprávne.

Operácia priradenia využíva pre svoj zápis vo vývojových diagramoch značku obdĺžnika:

 priradenie

napr.
obsah := vyska * sirka
objem := a * b * c

Okrem premenných, ktoré svoje hodnoty počas behu algoritmu môžu meniť, sa niekedy používajú aj konštanty. Ich hodnota sa obvykle určí na začiatku algoritmu (programu) a zostáva nemenná - nie je možné vykonať do nich priradenie. Známe sú konštanty z matematiky a fyziky, napr. pi, g, G atď.


Sekvencia

Kombináciou jednoduchých príkazov vstupu, niekoľkými priradeniami a operáciou výstupu dokážeme vyriešiť jednoduché problémy a zapísať pre ne algoritmy. Vo všeobecnosti možno sekvenciu zapísať ako:

sekvencia
pričom za príkaz môžeme na základe našich doterajších vedomostí považovať príkazy vstupu, výstupu a priradenia.
Ak vytvárame komplexné algoritmy, je potrebné uviesť ich vstupné a výstupné podmienky a označiť začiatok i koniec algoritmu. Na označenie začiatku a konca algoritmu vývojové diagramy používajú značky:

začiatok algoritmu
zaciatok

koniec algoritmu

koniec
V tomto okamihu sme sa dostali do štádia, keď by naše vedomosti mohli postačovať na vytvorenie jednoduchých sekvenčných algoritmov.

res
Napíšte algoritmus na výpočet obsahu a obvodu o bdĺžnika.

Vstupom do algoritmu budú rozmery strán obdĺžnika, výstupom požadované hodnoty:

{VST: a,b > 0 – strany obdĺžnika}
?
{VÝS: S – obsah obdĺžnika, O – obvod obdĺžnika}

Samotný algoritmus bude pozostávať zo štyroch krokov:

obvod obsah obdlznik

- zo vstupu prečítame veľkosti strán, ktoré sa uložia do premenných a a b v takom poradí, v akom sú na vstupe uvedené premenné
- do premennej S priradíme hodnotu získanú ako súčin strán, t.j obsah obdĺžnika
- analogicky do premennej O priradíme veľkosť obvodu
- získané hodnoty vypíšeme

 

V príklade sme použili také názvy premenných, na aké sme zvyknutý v matematike, no pokojne sme ich mohli nazvať sirka,vyska, obsah a obvod (v zložitejších príkladoch sú takéto názvy žiadúce kvôli lepšej prehľadnosti).

r
Napíšte algoritmus, ktorý pre zadaný polomer vypočíta obsah a obvod kruhu.

Riešime úplne analogicky:

{VST: r > 0 – polomer kruhu}
?
{VÝS: S – obsah kruhu, O – obvod kruhu}

 

obsah_obvod_kruh

- prečítame zo vstupu hodnotu r, ktorá reprezentuje veľkosť polomeru.
- pomocou nej vypočítame hodnotu obsahu, ktorú uložíme do S
- a obvodu, ktorú uložíme do premennej O
- vypočítané hodnoty vypíšeme.

neriesene

1.
Vypočítajte súčet dvoch čísel.

2. Napíšte algoritmus, ktorý zistí pre zadané rozmery hrán povrch a objem kvádra.

Vetvenie

Vetvenie je v algoritmizácii reprezentované podmienkou, ktorá predstavuje možnosť rozhodnúť sa podľa pravdivosti skúmaného znaku. V závislosti od jej splnenia sa postup vetví na rôzne prípady. Ak je podmienka splnená, pokračuje sa vykonávaním vetvy označenej ako „+“ , v opačnom prípade sa spracúvajú príkazy vo vetve „-“.

Vetvenie, v ktorom sa príkazy vykonávajú ako v kladnej, tak i v zápornej vetve sa označuje ako úplné.
uplna

No často sa môžeme stretnúť i so stavom, že príkazy sú uvedené len v prípade splnenia či nesplnenia podmienky. Takéto vetvenie sa označuje ako neúplné, no neznamená to, že je menejcenné – veľmi často totiž nie je potrebné niektoré príkazy pri splnení podmienky vykonávať.
neuplna

riesene
Napíšte algortimus na nájdenie maxima z dvoch čísel.

{VST: a,b – ľubovoľné čísla}
?
{VÝS: max – maximum z dvojice}

maximum z dvoch

- zo vstupu prečítame dvojicu čísel,
- ak a>b, algoritmus pokračuje vykonávaním príkazov vo vetve „+“ a je jasné, že maximom z dvojice je a. V opačnom prípade môže byť a<b alebo sú obe čísla rovné. Tak či onak, správnou hodnotou bude hodnota uložená v premennej b.
- premennú max, do ktorej sme výsledok ukladali, len vypíšeme.

Algoritmus by sme mohli vytvoriť i jednoduchým výpisom hodnoty bez použitia ďalšej premennej.

{VST: a,b – ľubovoľné čísla}
?
{VÝS: maximum z dvojice}

max z dvoch

riesene
Napíšte algoritmus na zistenie podielu dvoch čísel.

Zistiť podiel znamená vydeliť dve čísla. Mohli by sme prečítať čísla, priradiť ich podiel do premennej a vypísať ho, ale môže nastať prípad, že ako deliteľa zadáme nulu. A už v prvej triede na základnej škole nás učili, že nulou deliť nemožno. Preto potrebujeme takúto situáciu ošetriť – v prípade zadania nuly sa vypíše text „Nulou nedelíme!“, inak sa vypočíta podiel a vypíše sa.

{VST: a,b – ľubovoľné čísla}
?
{VÝS: podiel – podiel dvojice}

podiel s testom na nulu

- prečítame dvojicu čísel
- ak je druhé číslo nula, vypíšeme upozornenie
- ak je b nenulové, vypočítame podiel a vypíšeme ho

Pokiaľ je text za príkazom výstup v úvodzovkách, vypíše sa presne to, čo je v úvodzovkách. Ak text za výstupv úvodzovkách nie je, považuje sa za premennú.

Ak potrebujeme vetviť postup na viacero rôznych riešení v závislosti od podmienky, vkladáme viacero alternatív “do seba”.

riesene
Napíšte algortimus na nájdenie maxima z dvoch čísel a v prípade, že sú rovnaké, podajte o tom informáciu.

{VST: a,b – ľubovoľné čísla}
?
{VÝS: maximum z dvojice alebo info o rovnosti}

max z dvoch s testom rovnosti

- zo vstupu prečítame dvojicu čísel,
- ak a>b, vypíšeme hodnotu a.
- v opačnom prípade potrebujeme odlíšiť situácie, keď sú čísla rovné a keď a<b. Vložíme do tejto vetvy podmienku a=b, ktorá v prípade kladného výsledku vypíše správu o tom, že hodnoty sú totožné.
- ak neplatí, že a=b, tak je väčším číslom b, pretože v celej tejto vetve platí, že a nie je väčšie ako b a v tomto prípade ani nie sú rovné.

riesene
Napíšte algoritmus na nájdenie maxima z troch čísel.

Prvé riešenie by mohlo vyzerať nasledovne:

{VST: a,b,c – ľubovoľné čísla}
?
{VÝS: maximum z trojice}

max z troch cisel

Ak sa však zamyslíme nad energiou, ktorú sme museli venovať uvedomeniu si situácie v jednotlivých vetvách, určite uprednostníme nasledujúce, na prvý pohľad možno dlhšie, no na rozmýsľanie i na možnosť vyvarovať sa chyby určite vhodnejšie riešenie.

max-z-troch-neuplnou
- ako maximum určíme prvé číslo
- ak je b väčšie ako max, tak je jasné, že maximom bude b. V opačnom prípade netreba urobiť nič, v max zostane priradená hodnota a
- ak je hodnota v c väčšia ako hodnota v max (čo môže byť a alebo b), zmeníme ju, inak sa opäť nič nedeje
- vypíšeme max

Záver: nie vždy platí, že najkratšie alebo na prvý pohľad zrejmé riešenie je najvhodnejšie.


Napíšte algoritmus na zistenie absolútnej hodnoty zadaného čísla.

Opäť ide o jednoduchý príklad s neúplným vetvením – ako relatívne nový prvok si dovolíme použiť tú istú premennú na načítanie hodnoty i výpis výsledku.

{VST: a – ľubovoľné čísla}
?
{VÝS: absolútna hodnota z a}

absolutna hodnota

- načítame číslo do premennej a
- ak je a záporné, priradíme doň číslo k nemu opačné, t.j. –a (ako príklad môže slúžiť –5: a:= - -5 = +5)
- v prípade, že a je kladné, nie je potrebné vykonávať nič
- na záver hodnotu vypíšeme

 Zložitejšie podmienky

Podmienka je v programovacích jazykoch chápaná ako logický výraz, t. j. zistenie vzťahov (relácie) medzi výrazmi, prípadne zviazané logickými operáciami (and = “a súčasne”, or = “alebo” a not = “neplatí, že”).

Cyklus

Cyklus nám poskytuje prostriedok umožňujúci opakovať činnosť alebo činnosti. Pri jeho použití je potrebné vedieť čo sa má opakovať a dokedy sa to má opakovať. Činnosť, ktorá sa opakuje, označujeme ako telo cyklu, podmienku, ktorá určuje dokedy sa bude telo cyklu opakovať, nazývame podmienka cyklu.
V závislosti od vzťahu medzi telom a podmienkou cyklu môžeme cykly rozdeliť na:

  • cyklus so známym počtom opakovaní
  • cyklus s podmienkou na začiatku
  • cyklus s podmienkou na konci

Cyklus so známym počtom opakovaní

 

Predpokladom využitia takéhoto cyklu je, že počet opakovaní poznáme pred jeho odštartovaním a operácie v tele naň nemajú žiaden vplyv. Vo všeobecnosti ho možno zapísať:

cyklus so znamym poctom opakovani

riesene
Napíšte algoritmus na zistenie súčtu prvých 100 čísel.

V tomto prípade budeme pripočítavať čísla po jednom.
Vstup do algoritmu nepotrebujeme, napíšeme ho neuniverzálne tak, že vždy sčíta len prvých 100 čísel. Využijeme cyklus, ktorého počet opakovaní poznáme (100). Každý cyklus so známym počtom opakovaní musí používať premennú – hovorí sa jej riadiaca premenná – ktorá si „pamätá“ koľkokrát cyklus prebehol. V zápise cyklu určíme jej spodnú a hornú hranicu (pre i od 1 po 100). Po skončení tela cyklu sa automaticky (má to na starosti cyklus, nie my) pripočíta hodnota 1 a skočí sa na začiatok cyklu. Zvyšovanie o 1 je štandardné pre všetky cykly so známym počtom opakovaní.
Riadiacu premennú môžeme v tele cyklu používať ako hociktorú inú, neodporúča sa však priraďovať do nej hodnoty (mohlo by sa stať, že cyklus skončí skôr ako predpokladáme, alebo bude nekonečný ak riadiaca paremenná nedosiahne hornú hranicu cyklu).

{VST: }
?
{VÝS: súčet prvých 100 čísel}

sucet prvych 100

- v prvom riadku vykonáme inicializáciu premennej sucet – priradíme jej počiatočnú hodnotu (niekedy sa stáva, že neinicializovaná premenná obsahuje náhodnú hodnotu, ktorá by „pokazila“ výsledok). V našom prípade je vhodná 0, pretože v nej na začiatku nemá byť umiestnené nič.

- „podmienka“ cyklu zabezpečujúca nastavenie dolnej hranice do riadiacej premennej i, jej zvyšovanie a ukončenie cyklu po dosiahnutí hornej hranice.

- zvýšenie premennej sucet o hodnotu aktuálne uloženú v premennej i. Do premennej sucet sa v každom opakovaní cyklu pridá hodnota uložená v i tak, že sa k premennej sucet pripočíta hodnota i a získaná nová hodnota sa opäť umiestni do premennej sucet.

- ukončenie tela cyklu a zabezpečenie návratu na jeho začiatok,

Na sledovanie hodnôt premenných a overovanie správnosti algoritmu sa často používajú sledovacie tabuľky, prostredníctvom ktorých sa nám často podarí pochopiť činnosť algoritmu oveľa jednoduchšie ako siahodlhým slovným vysvetľovaním.

riesenie
Upravte algoritmus tak, aby bolo možné zadať počet čísel, ktoré sa majú sčítať (na začiatku prečítajte napr. n a nahraďte ním číslo 100 v cykle).

sucet N

riesene
Napíšte algoritmus na zistenie súčinu celých čísel nachádzajúcich sa medzi dvoma zadanými hodnotami, čiže napr. pre hodnoty 5 a 7 bude výsledkom 5*6*7.

{VST: a,b – celé čísla, pre ktoré platí a<b}
?
{VÝS: súčin prvých 100 čísel}

sucin od a po b

- algoritmus prečíta vstupné hodnoty
- nastaví premennú sucin na hodnotu 1, ktorá v prípade násobenia predstavuje neutrálnu hodnotu (číslo vynásobené 1 sa nezmení). Pokiaľ by sme premennú inicializovali na 0, nedokázali by sme jej hodnotu násobením zmeniť.
- definujeme cyklus od počiatočnej po konečnú hodnotu
- a každou z hodnôt, ktoré bude postupne nadobúdať riadiaca premenná cyklu i, sucin vynásobíme.
- výsledok vypíšeme

Sledovacia tabuľka:

tabulka

Prostredníctvom cyklu so známym počtom opakovaní (prípadne v kombinácii s príkazmi na okamžité ukončenie cyklu) dokážeme vyriešiť všetky problémy, no niekedy je pohodlnejšie, prehľadnejšie a najmä v súlade zo zásadami štuktúrovaného programovania, použitie ďalších dvoch typov cyklov. Tieto využívame vtedy, keď nám počet opakovaní nie je známy v momente vstupu do cyklu a/alebo ukončenie cyklu ovplyvňujú operácie v jeho tele. Kontrolu ukončenia cyklu môžeme realizovať:
- pred vykonaním kroku (tela) cyklu – cyklus s podmienkou na začiatku

- po vykonaní tela cyklu – cyklus s podmienkou na konci

neriesene

1. Napíšte algoritmus na zistenie súčinu dvoch celých čísel pre zariadenie, ktoré nepozná operáciu násobenia (nahraďte ju kombináciou cyklu a sčítania).

Cyklus s podmienkou na začiatku

 

Tento typ cyklu má podmienku, ktorá sa stará o ukončenie cyklu umiestnenú pred telom. Ak je podmienka splnená, vykoná sa telo cyklu a opäť sa otestuje. Ak „vstupná“ podmienka nie je splnená už pri prvom vstupe do cyklu, nemusí sa tento vykonať vôbec. Graficky vyzerá zápis nasledovne:

while

riesene
Napíšte algoritmus, ktorý zistí zvyšok pri delení dvoch čísel.

Pre používateľov by bolo najjednoduchšie riešiť túto úlohu ručne. Počítač však natoľko inteligentný nie je, a v prípade štandardného delenia môžeme získať len desatinné číslo. Čo s tým?
Ak si uvedomíme, že delenie je vlastne zistenie počtu výskytov jedného čísla v druhom, môžeme zvyšok nájsť tak, že budeme od prvého čísla (delenca) odpočítavať druhé číslo (deliteľa) dovtedy kým bude zostatok  väčší ako 0 (prípadne  rovný 0).
Vezmime napr. 72.
7-2=5, 5 je väčšie ako 2, odčítavať môžeme ďalej,
5-2=3, od 3 stále dokážeme 2 odčítať,
3-2=1 a 1 je už menšie číslo ako 2, takže zostane – je zvyškom.

Algoritmus zovšeobecníme a realizujeme ho prostredníctvom cyklu (odčítavanie sa opakuje). Presný počet odčítaní nepoznáme, teda cyklus so známym počtom opakovaní môžeme zavrhnúť. Podmienkou bude test, či číslo, ktoré nám zostalo je už menšie ako deliteľ. Kam dať podmienku? Môže sa stať, že delenec je menší ako deliteľ a vtedy by žiadne delenie prebehnúť nemalo – teda podmienka bude na začiatku.

{VST: a,b – celé kladné čísla}
?
{VÝS: zvyšok po vydelení a:b}

delenie zvysok

- prečítame vstupné hodnoty
- podmienka cyklu zabezpečujúca beh dovtedy, kým je hodnota a väčšia alebo rovná ako b a môžeme ju tým pádom odpočítavať,
- telo cyklu zabezpečí samotné odpočítavanie,
- cyklus skončí ak je b väčšie ako a a nemožno ho teda v obore prirodzených čísel odpočítať,
- hodnotu uloženú v a vypíšeme.

sledovacia-tabulka-1 

riesene
Pridajte do algoritmu výpočet podielu (napr. pri každom odčítaní zväčšiť podiel o 1).

Algoritmické i programovacie jazyky už v sebe zvyčajne funkcie pre celočíselné delenie a zistenie zvyšku po celočíselnom delení obsahujú. Ak chceme dve čísla vydeliť, použijeme namiesto „/“ operáciu div (7 div 3 je 2), ak chceme zistiť zvyšok, máme k dispozícii mod (37 mod 10 je 7). Pri použití týchto funkcií sa naše podmienkové algoritmy zmenia na štvorriadkovú sekvenciu.

zvysok a podiel

neriesene
 

1. Vypočítajte ciferný súčet párnych číslic daného prirodzeného čísla N (využite fakt, že poslednú cifru z čísla viete „odtrhnúť“ prostredníctvom operácie mod).

2. Vypočítajte aritmetický priemer vopred neznámeho počtu prirodzených čísel. Zadávanie čísel ukončite nulou, pričom nulu už do aritmetického priemeru nezaratajte.

 

Cyklus s podmienkou na konci

Tento cyklus na prvý pohľad vyzerá oproti cyklu s podmienkou na začiatku ako opačný – najprv sa vykoná telo cyklu a až potom sa zisťuje splnenie podmienky. Ak je podmienka cyklu splnená, vykonávanie cyklu sa ukončí, v opačnom prípade sa pokračuje opätovným vykonávaním tela cyklu. Dôsledkom takéhoto riadenia je, že cyklus vždy prebehne minimálne raz.

Tento cyklus sa môžeme označiť ako “neopatrný”: najskôr sa niečo vykoná, potom sa rozhoduje, či to bolo dobre; cyklus s podmienkou na začiatku sa naproti tomu niekedy nazýva ako opatrný – najprv otestuje platnosť podmienky a až potom sa vykonáva.

Tento typ cyklu sa často využíva napr. pri vkladaní vstupných hodnôt a testovaní ich správnosti – v prípade algoritmov síce vieme určiť vstupné podmienky, no pri programovej realizácii ťažko dokážeme nariadiť nedisciplinovanému používateľovi, aby ich aj skutočne dodržiaval – ošetrenie musíme zabezpečiť na úrovni samotného algoritmu.

riesene
Vráťme sa k algoritmu, ktorý delí dve čísla. Zabezpečte, aby algoritmus požadoval zadanie druhej hodnoty dovtedy, kým používateľ zadá nenulovú hodnotu.

{VST: a,b – ľubovoľné čísla}
?
{VÝS: podiel – podiel a/b}

podiel-s-testom-na-0

- načíta sa osobitne prvá hodnota (delenec). Nebudeme načítavať obe hodnoty súčasne, pretože v prípade zadania nulového b, by sa museli zadávať opätovne obe.
- prečítame hodnotu b
- a budeme to opakovať dovtedy, kým b nebude rôzne od 0
- vypočítame podiel
- a vypíšeme ho

neriesene
1. Napíšte algoritmus, ktorý bude sčítavať dve čísla. Zabezpečte, aby sa po skončení výpočtu opýtal, či chce používateľ pokračovať a aby skončil až vtedy, keď odpoveď na otázku bude „nie“.