× Aktuálně z oboru

Vychází Game Ready ovladače pro Far Cry 5 [ clanek/2018040603-vychazi-game-ready-ovladace-pro-far-cry-5/ ]
Celá zprávička [ clanek/2018040603-vychazi-game-ready-ovladace-pro-far-cry-5/ ]

Vývojové diagramy – 5. díl

[ http://programujte.com/profil/17127-libor-benes/ ]Google [ ?rel=author ]       [ http://programujte.com/profil/118-zdenek-lehocky/ ]Google [ ?rel=author ]       20. 7. 2011       28 563×

V minulém díle jsme si ukázali, jak se pracuje s podmínkou. Dnes si předvedeme, jak k zápisu využít relační operátory. A dále vysvětlíme, jak spojovat více podmínek pomocí spojovacích operátorů.

minulém díle [ http://programujte.com/?akce=clanek&cl=2010042600-vyvojove-diagramy-4-dil ] jsme si ukázali, jak se pracuje s podmínkou. Již víme, že větev označená + se prochází v případě splnění podmínky. Větev označená se naopak prochází v případě nesplnění podmínky. Dnes si předvedeme, jak k zápisu využít relační operátory. A dále vysvětlíme, jak spojovat více podmínek pomocí spojovacích operátorů.

Při prvním seznámení s podmínkou jsme použili textový zápis. Tento způsob je samozřejmě možné použít vždy. Používání relačních operátorů není nezbytně nutné, ale vede k rychlejšímu a často i přesnějšímu zápisu a hlavně je tento zápis velmi blízký programovacímu jazyku.

Relační operátory jsou operátory, které známe z matematiky. Jejich funkcí je zjistit (porovnat) vztah mezi dvěma operandy. Minule jsem zapsali podmínku: Je Y nula? S pomocí relačního operátoru bychom napsali: Y = 0. Nepoužívá se otazník jako za větou, protože to se rozumí samo sebou – zapisujeme přece podmínku, ve které se na něco ptáme.

Nyní si uvedeme všechny relační operátory:

  • = …… rovno - X = Y: Je X rovno Y?
  • == …… rovno (ekvivalentní zápis) - X == Y: Je X rovno Y?
  • > …… větší než - X > Y: Je X větší než Y?
  • < …… menší než - X < Y: Je X menší než Y?
  • <> …… nerovno - X <> Y: Je X různé od Y? nebo Není X rovno Y?
  • != …… nerovno (ekvivalentní zápis) - X != Y: Je X různé od Y? nebo Není X rovno Y?
  • >= …… větší nebo rovno - X >= Y: Je X větší nebo rovno Y?
  • <= …… menší nebo rovno - X <= Y: Je X menší nebo rovno Y?

Výpočet dojezdu automobilu

Použití relačních operátorů si ukážeme na jednoduchém příkladu výpočtu dojezdu automobilu. Příklad je na principu, kdy známe vzdálenost, kterou chceme urazit, a dále známe aktuální obsah nádrže a spotřebu. Chceme spočítat, jestli vzdálenost máme šanci urazit, nebo ne. Na vstupu od uživatele tedy budou tři hodnoty: vzdálenost, kterou chceme urazit, aktuální obsah nádrže v litrech a spotřeba automobilu. Výsledkem algoritmu má být oznámení, zda zadanou vzdálenost můžeme urazit, nebo ne (spotřeba se uvádí v litrech na 100 ujetých kilometrů, proto je ve vzorci násobení hodnotou 100).

K porovnání dojezdu a zadané vzdálenosti je použit relační operátor větší nebo rovno. Pokud je tato podmínka splněna, pak je dojezdová vzdálenost větší nebo rovna zadané vzdálenosti, a proto víme, že ji s obsahem nádrže urazíme. V opačném případě, tj. vypočítaná dojezdová vzálenost je menší než zadaná, ji neurazíme.

Následující dvě tabulky obsahují jednotlivé kroky pro obě možnosti. První obsahuje hodnoty proměnných pro případ, kdy na obsah nádrže zadanou vzdálenost urazíme. V druhé tabulce projdeme druhou větev, tj. obsah nádrže na zadanou vzdálenost nestačí.

Často se stává, že rozhodnutí, kterou větví se budeme ubírat, závisí na více okolnostech. Musíme proto provádět více testů, tj. více podmínek. První možností je zapsat každou jednu podmínku do samostatného objektu a postupně ošetřovat jednotlivé větve. Nebo použijeme tzv. spojovací operátor. Spojovací operátory jsou dva:

  • a – tento spojovací operátor říká, že musí být splněny obě podmínky, které spojuje, aby byla podmínka vyhodnocena jako splněná; operátor se může značit slovem a, anglickým překladem and, případně značkou &&,
  • nebo – tímto operátorem se říká, že musí být splněna alespoň jedna ze dvou spojovaných podmínek, aby byl celek vyhodnocen jako splněný; operátor se může značit slovem nebo, anglickým překladem or, případně značkou ||.

Opět je možné použít více zápisů. My budeme používat zápis pomocí znaků, tj. && a ||.

Spojovací operátor && má ekvivalentní zápis dle obrázku. Jedná se o podmínky, které jsou řazeny za sebou a všechny musí být splněny, aby výsledkem byla splněná podmínka. Spojovací operátor && má tedy pouze jeden úspěšný scénář, ale více neúspěšných. Jinak řečeno, musí být splněny všechny části, aby byla celá podmínka splněná. V programovacích jazycích je to většinou tak, že při první nesplněné části je podmínka označena za nesplněnou.

Spojovací operátor || má ekvivalentní zápis dle obrázku. Jedná se o podmínky, které jsou řazeny za sebou a musí být splněna pouze jedna, aby výsledkem byla splněná podmínka. Spojovací operátor || má tedy více úspěšných scénářů a jeden neúspěšný. Jinak řečeno, musí být splněna alespoň jedna část, aby byla celá podmínka splněná. V programovacích jazycích je to většinou tak, že při první splněné části je podmínka označena za splněnou.

Spojovací operátory se mohou libovolně kombinovat. V jedné podmínkce může být několik spojovacích operátorů && a/nebo ||. Stejně jako v matematice lze ovlivnit „pořadí" uzavřením podmínek do závorek. Například chceme provést nějakou akci pro body z I. nebo III. kvadrantu [ http://cs.wikipedia.org/wiki/Kvadrant ]. Bod v I. kvadrantu má x a y souřadnici kladnou a ve III. kvadrantu má obě souřadnice záporné. Pro I. kvadrant by podmínka byla: x > 0 && y > 0, pro III. kvadrant by podmínka byla x < 0 && y < 0. Celá podmínka by byla spojením obou předchozích s tím, že musí být splněna alespoň jedna z nich (bod může ležet pouze v jednom kvadrantu): (x > 0 && y > 0) || (x < 0 && y < 0) Stejně bychom podmínku mohli zapsat i pomocí slovního zápisu operátorů: (x > 0 a y > 0) nebo (x < 0 a y < 0) nebo (x > 0 and y > 0) or (x < 0 and y < 0).

Trojúhelník

Spojovací operátor uplatníme v jednoduchém příkladu na zjištění, jestli tři úsečky mohou tvořit trojúhelník. Zadání úlohy je následující: vytvořte algoritmus pro zjištění, zda zadané tři strany (a, b, c) mohou tvořit trojúhelník. K řešení použijeme trojúhelníkovou nerovnost. Od uživatele dostaneme zadané tři strany a musí platit, že součet kterýchkoliv dvou z nich musí být větší než třetí strana. Máme tedy tři podmínky: a < b + c, b < a + c, c < a + b a všechny tyto podmínky musí platit najednou, tj. musíme použít spojovací operátor && (musí platit první podmínka a druhá podmínka a třetí podmínka). Výsledná podmínka tedy bude: a < b + c && b < a + c && c < a + b.

Následují dvě tabulky pro různé hodnoty na vstupu tak, aby byl ukázán průchod vývojovým diagramem pro obě možnosti. V prvním případě je podmínka splněna – zadané strany mohou tvořit trojúhelník. V druhém případě není podmínka splněna – zadané strany trojúhelník tvořit nemohou.

Paralelní zapojení dvou rezistorů

Dnešní díl zakončíme příkladem algoritmu na výpočet celkové hodnoty odporu dvou paralelně zapojených rezistorů, na kterém si ukážeme použití spojovacích operátorů. A také si na něm demonstrujeme, že lze podmínku zapsat různými způsoby, a také to, že obě větve mohou být platné, tj. že jedna z větví neoznačuje chybový stav.

Zadání příkladu je tedy následující: vytvořte algoritmus (a pro něj vývojový diagram) na výpočet celkové hodnoty odporu dvou paralelně zapojených rezistorů. Vstupem od uživatele tedy budou dvě hodnoty odporů. Výstupem algoritmu bude výsledná hodnota paralelního zapojení. Vzorec pro výpočet je následující: R = (R1 × R2) / (R1 + R2). Obě hodnoty paralelně zapojených rezistorů opět načteme od uživatele. Ze vzorce je vidět, že je zde dělení, tj. musíme testovat, jestli součet R1 + R2 není roven 0. Zapsaná podmínka by mohla vypadat takto: (R1 + R2) == 0 nebo bychom mohli testovat pouze jednotlivé hodnoty (neboť odpor nemůže být záporný): R1 == 0 && R2 == 0.

Ke vzorci jednu poznámku. Nejpodstatnější na tomto algoritmu je použitý vzorec. I kdyby byl algoritmus vymyšlený maximálně optimálně, ale byl by v něm použitý špatný vzorec, tj. dával by chybné výsledky, tak takový algorimus není správný. Každý algoritmus musí splňovat podmínku správnosti – musí dávat správné výsledky. Použité vzorce, postupy a metody výpočtu musí být správné.

Správnost – algortimus musí dávat správné výsledky.

Než podmínku zapíšeme, tak se zamyslíme nad tím, co se vlastně stane, když jeden nebo oba rezistory budou nulové. Výsledný odpor v takovém případě bude také 0 (v čitateli by bylo násobení 0), neboli je možné podmínku zapsat i ve tvaru, který je použit ve vývojovém diagramu: R1 == 0 || R2 == 0, kde testujeme, jestli hodnota rezistoru R1 je 0 nebo hodnota rezistoru R2 je 0. Pokud alespoň jeden z nich (nebo oba) jsou nulové, tak procházíme + větev a výsledný odpor bude 0. V opačném případě (oba rezistory jsou nenulové) se provede výpočet dle vzorce.

Následují dvě tabulky pro různé hodnoty na vstupu tak, aby byl ukázan průchod vývojovým diagramem pro obě možnosti. V prvním případě není podmínka splněna (provádí se výpočet přes vzorec) a v druhém případě je podmínka splněna (výsledek je 0).

Příště si ukážeme složitější příklady, ve kterých bude více podmínek.


Článek stažen z webu Programujte.com [ http://programujte.com/clanek/2010051900-vyvojove-diagramy-5-dil/ ].