V tomto dílu zakončíme téma podmínky složitějšími příklady, na kterých si ukážeme, že podmínek může být ve vývojové diagramu více.
Podmínky se používají na řízení toku programu, určujeme jimi, kudy se bude program ubírat dále. Ukázky, které jsou v předchozím dílu, by snadno mohly vést k mylnému dojmu, že ve vývojovém diagramu může být pouze jedna podmínka. Ve vývojovém diagramu není žádné omezení na počet a kombinace podmínek. Složitější programy obsahují destíky, stovky, tisíce,… podmínek. A stejně tak složitější vývojové diagramy mohou obsahovat více podmínek. V tomto dílu už nebudou u vývojových diagramů tabulky na průchody – můžete si je zkusit vytvořit sami.
Hledání minima
Prvním příkladem je hledání minima ze tří zadaných čísel. Zadání tohoto příkladu zní: najděte minimální číslo ze tří zadaných. Na vstupu tedy budou tři čísla, která zadá uživatel. Výstupem bude vypsané číslo, které je nejmenší (zadá-li uživatel 1, 2, 3, tak výsledkem algoritmu musí být vypsání čísla 1). Je více způsobů, jak zadanou úlohu řešit. Vzhledem k tomu, že nehledáme optimální nebo nejrychlejší řešení, ale pouze si demonstrujeme algoritmy s použitím podmínek, tak použijeme metodu „porovnání každý s každým“. Z těchto porovnání je samozřejmě možné některá vynechat. Pokud bude platit, že A < B, tak již víme, že A je menší než B. Dále tedy stačí A porovnat s C a B již s C porovnávat nemusíme, protože víme, že A je menší (jenom připomínám, že hledáme nejmenší číslo).
Výsledný vývojový diagram je na obrázku. Nejprve se tedy porovná A s B. Podle výsledku tohoto porovnáví se buď C porovnává s A (pokud předchozí podmínka byla splněna, neboli A je opravdu menší než B), nebo se C porovnává s B (v opačném případě). Pokud bychom stejnou metodu použili i pro více vstupních hodnot, tak by nám strom vývojového diagramu utěšeně rostl. Proto se častěji používá metoda s uloženým lokálním minimem (maximem), kterou si ukážeme některém z následujícíh dílů.
Kvadratická funkce
Druhý příklad je na výpočet reálných kořenů kvadratické rovnice. Zadání úlohy je následující: vytvořte algoritmus pro výpočet reálných kořenů kvadratické rovnice, která je zadaná koeficienty A, B, C (dle vzorce Ax2 + Bx + C = 0
). Na vstupu od uživatele dostaneme tři hodnoty (A, B, C) a výsledkem budou vypočtené kořeny.
Toto je první úloha, ve které se zmíním o kontrole vstupu od uživatele. V reálných programech je nutné vstup od uživatele kontrolovat vždy. Tam, kde váš program bude očekávat číslo, uživatel jistě zadá slovo „pokus" apod. Kvadratická rovnice je kvadratická pouze v případě, že A je nenulové. V případě, že A je nulové, pak se jedná o lineární rovnici a tu neřešíme. Při zadání A = 0 musí být výsledkem algoritmu hlášení, že zadané koeficienty netvoří kvadratickou rovnici.
Dále postupujeme přes výpočet diskriminantu. Vzorec pro výpočet diskriminantu je: D = B2 - 4AC
. Řešení kvadratické rovnice v oboru reálných čísel je pouze v případě, že vypočtený diskriminant není záporný. To bude druhá podmínka v algoritmu. V případě záporného algoritmu nemá kvadratická rovnice řešení (v oboru reálných čísel). Pokud není diskriminant záporný, pak je možné vypočítat kořeny a vypsat je.
Jednoduchá kalkulačka
Posledním příkladem je jednoduchá kalkulačka. Zadání je následující: vytvořte algoritmus pro jednoduchou kalkulačku, která bude umět načíst 2 operandy a operátor (+, -, ×, ÷), vypočítat výsledek a vypsat ho. Na vstupu od uživatele tedy budou 2 čísla a operátor (znak), který bude signalizovat operaci, která se má provést. Musíme tedy vytvořit rozhodovací strom, kde budeme kontrolovat, jestli se jedná o jednu z podporovaných operací, a pokud ano, tak provedeme výpočet. V případě, že zadaný operátor nebude mezi podporovanými, vypíšeme hlášení, že se nejedná o podporovanou operaci (kontrola vstupu od uživatele).
Vzhledem k tomu, že mezi vybranými operátory je i dělení, tak musíme (stejně jako ve 4. dílu) kontrolovat, jestli by nedošlo k dělení nulou. Před samotným dělením tak musí být podmínka, která této variantě zabrání, a místo chyby programu (tak by dělení nulou v programu končilo) zobrazíme uživateli hlášení, že nulou nelze dělit. Nakonec vypíšeme výsledek, který jsme vypočítali.
Krátká poznámka na konec. V této úloze by se dala s výhodou použít podmínka s více větvemi (switch), kde se každá větev prochází pro přesně danou hodnotu proměnné v podmínce. V našem případě by v podmínce bylo pouze oper a jednotlivé větve by byly označené +, -, ×, ÷. V tomto seriálu takto zapsanou podmínku používat nebudeme.
Tím tento díl zakončíme a příště na nás čekají cykly.