Vývojové diagramy – 10. díl
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vývojové diagramy – 10. dílVývojové diagramy – 10. díl

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Laser Game Ostrava

Vývojové diagramy – 10. díl

Google       Google       2. 9. 2011       13 928×

Doposud jsme se zabývali cykly, u nichž byl přesně dán počet opakování. Rozměry nebo rozsahy pro ně bývají dobře známy. Existují ale případy cyklů, kdy nevíme, kolik opakování budeme muset projít, abychom se dobrali cíle. O těch je tento díl seriálu.

Reklama
Reklama

Řekněme, že děláme program pro pračku. V jedné fázi programu budeme čekat na to, až se ohřeje voda na určitou teplotu, a toto čekání budeme provádět v cyklu. Možná někoho napadne, že bychom mohli čekat daný počet vteřin (daný čas). To bohužel nejde, protože jednak nevíme, jak studená voda bude na začátku, a také nevíme, jak rychle se bude voda ohřívat, takže se nedá určit, jak dlouhou dobu to bude trvat. Jediný opravdový konec čekacího cyklu může nastat ve chvíli, kdy teplota vody dosáhne požadované nebo vyšší hodnoty.

Možná vám to připadá jako podmínka, protože ona to podmínka je. Cykly, které si dnes ukážeme, se řídí takovou podmínkou a platí pro ni stejná pravidla jako pro „normální" podmínku.

Cykly, které se řídí podmínkou, jsou dva, a to s podmínkou na začátku a s podmínkou na konci. Obě varianty mají společné, ale i odlišné vlastnosti, které je předurčují k různým oblastem použití. Oproti cyklu s daným počtem opakování nemají index, který by automaticky měnil svou hodnotu.

Fragment vývojového diagramu pro první typ vidíte na obrázku. Jak je již patrné z názvu „cyklus s podmínku na začátku", tak vyhodnocovací podmínka je před samotným tělem. Cyklus má tyto vlastnosti:

  • nejprve se vyhodnocuje podmínka a až pak se provádí tělo,
  • tělo se vykonává, dokud je podmínka splněna,
  • tělo se nemusí vykonat ani jednou (pokud není podmínka splněna hned při prvním vstupu),
  • počet opakování je omezen pouze podmínkou a může jich být 0 až nekonečno.

Druhý typ (s podmínkou na konci) má dvě varianty. V některých programovacích jazycích se tělo vykonává, dokud není podmínka splněna (např. Pascal), a v jiných, dokud splněna je (např. C). Vzhledem k tomu, že pro výuku programování je vhodný více Pascal než C, tak budeme používat první variantu.

Fragment vývojového diagramu pro tento cyklus vidíte na obrázku, a protože existují dvě varianty, tak budeme důsledně označovat větve, tj. kdy cyklus končí a kdy pokračuje (a to i pro cyklus s podmínkou na začátku). Z názvu „cyklus s podmínkou na konci" jasně plyne, že vyhodnocovací podmínka je až za tělem. Cyklus má tyto vlastnosti:

  • nejprve se provede tělo a až pak se vyhodnocuje podmínka,
  • tělo se vykonává, dokud není podmínka splněna,
  • tělo se vykoná minimálně jednou,
  • počet opakování je omezen pouze podmínkou a může jich být v rozmezí 1 až nekonečno.

Možná někoho napadne: a co v případě, že podmínka je neustále splněná (pro cykus s podmínkou na začátku) nebo nebude nikdy splněná (pro cyklus s podmínkou na konci)? Odpověď je jednoduchá – jedná se o nekonečný cyklus. Jedná se o speciální typ algoritmu, který se používá pouze ve výjimečných případech (např. program v jednočipovém procesoru pro nějaké řízení, který běží neustále). Jinak musí platit, že výsledek algoritmu musí být znám v konečném počtu kroků.

Konečnost – výsledek algortimu musí být znám v konečném počtu kroků.

Než přejdeme na praktické ukázky, tak je potřeba zmínit, že jakákoliv úloha na cykly je řešitelná jakýmkoliv z těchto cyklů. Vždy je možné úlohu řešit jak s podmínkou na začátku, tak s podmínkou na konci. Dokonce mohou tyto cykly nahradit i předchozí typ, tj. s daným počtem opakování – jeden takový příklad si ukážeme. A i další příklady budeme nejprve řešit pro oba typy cyklů.

Možná se ptáte, proč jsou dva typy, když jsou v podstatě záměnitelné. Odpověď už tu byla naznačena – každý cyklus je vhodný na jiný typ úloh. Někdy je výhodnější použít podmínku na začátku, někdy na konci a v některých případech je to jedno. Uvedené příklady by to měly demonstrovat.

Login

Jediný dnešní příklad bude všem důvěrně známý, protože přihlašování (login) do nějakého systému (e-mail, Facebook, IM a mnoho dalších) je na denním pořádku (ač se často děje již automaticky). Zadání úlohy by mohlo být následující: vytvořte algoritmus pro přihlášení uživatele do systému. Přihlašování se děje zadáním jména a hesla. Vstupem algoritmu tedy bude jméno a heslo, které zadá uživatel. Výstupem bude hlášení, že jsou nebo nejsou zadané údaje správně a že již případně došlo k úspěšnému přihlášení.

Jak jsem slíbil, úlohu budeme řešit oběma typy cyklů. Nejprve je nutné zadat přihlašovací údaje a pak je teprve možné rozhodnout, jestli jsou správně a povolit další přístup. V tomto případě má výhodu cyklus s podmínkou na konci, neboť se nejprve vykoná tělo cyklu, kde uživatel zadá jméno a heslo, a pak dojde k vyhodnocení. Výsledný algoritmus je na obrázku. Cyklus s podmínkou na konci je pro tento typ úloh ten vhodnější.

Naproti tomu cyklus s podmínkou na začátku je na tento typ úloh méně vhodný. Před prvním vyhodnocením je nutné zadat přihlašovací údaje, ale následně v těle cyklu také (pro případ, že by je uživatel nezadal správně). V algoritmu tak dochází k opakování části diagramu (programu) a výsledný vývojový diagram není již tak přehledný. Volbou nevhodného typu cyklu si zbytečně přiděláváme práci a algoritmus se stává složitějším.

Všimněte si také rozdílnosti podmínek. Cyklus s podmínkou na začátku končí, pokud není podmínka splněna, takže se musíme ptát, jestli není jméno a heslo platné. V případě, že je podmínka splněna (tedy nejsou platné), tak je potřeba, aby je uživatel zadal znovu. V případě, že není splněna (neboli údaje jsou platné), tak se uživatel úspěšně přihlásil. U druhého cyklu je to vyhodnocení podmínky obráceně, takže se ptáme tak, jak bychom očekávali.

Jedinou výhodou cyklu s podmínkou na začátku je to, že se u něj přirozeně rozlišuje první zadání a následná zadání. To umožňuje vypsat hlášení o tom, že se přihlášení nezdařilo. U cyklu s podmínkou na konci bychom tohoto dosáhli přidáním podmínky na počet pokusů, které bychom si museli počítat. V případě, že by se nejednalo o první pokus, tak by se vypsalo hlášení o chybném přihlášení.

Možná to teď vypadá jako velká výhoda, ale pokud bychom dělali algoritmus pro login nejenom pro ukázkové účely, ale pro praktické použití, tak bychom v něm počítadlo pokusů stejně měli. Při nějakém počtu neúspěšných přihlášení se další přihlášení znemožní nebo se zařízení zablokuje (např. mobil po třech špatně zadaných PINech). Komplexnější vývojový diagram pro zadávání PINu s maximálním počtem opakování (i s podmínkou na hlášení) si ukážeme příště.

To je pro tentokráte vše. V příštím díle budeme s cykly pokračovat. Ukážeme si na jednom příkladu řešení pomocí všech tří cyklů a také si ukážeme příklad, ve kterém bude výhodnější použít cyklus s podmínkou na začátku.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
8 hlasů
Google
Autor se věnuje programování za peníze :)

Nové články

Obrázek ke článku Otevřené bankovnictví usnadní život nejen jednotlivcům, ale i firmám.

Otevřené bankovnictví usnadní život nejen jednotlivcům, ale i firmám.

Většina lidí by ráda obsluhovala své bankovní účty z jednoho místa. Díky evropské směrnici o platebních službách PSD2 by se brzy mohlo jednat o realitu. Některé tuzemské banky již služby takzvaného otevřeného bankovnictví umožňují, nejpozději od září by měly svá API rozhraní zpřístupnit vývojářům třetích stran. To otevírá prostor pro fintech firmy a start-upy, ale třeba i vývojáře ERP a fakturačních systémů, kteří by díky propojení svých produktů s bankami významně ulehčili klientům při správě financí.

Reklama
Reklama
Obrázek ke článku Velké srovnání TOP e-shopových řešení!

Velké srovnání TOP e-shopových řešení!

Předmět případové studie je ​středně velký e-shop​ s počtem produktů do 5 000, který chce expandovat na slovenský trh a potřebuje ​druhou jazykovou mutaci v eurech ​na vlastní doméně.

Výběr vhodného systému závisí na mnoha aspektech a měl by být pečlivě zvážen na základě potřeb a konkrétních požadavků plánovaného nebo migrovaného e-shopu.

Obrázek ke článku Master Data Management a jak nám pomůže

Master Data Management a jak nám pomůže

Master Data (česky také kmenová data) jsou data sdílená napříč různými systémy, nemění se příliš často a netransakční. Jedná se o informace o obchodních partnerech, produktech, vlastních pracovnících. Objednávky, faktury, účetní zápisy do této oblasti nespadají.

Obrázek ke článku Startup DoDo zajistí městskou logistiku pro RunCzech

Startup DoDo zajistí městskou logistiku pro RunCzech

Startup DoDo se stává důležitým partnerem RunCzecha na významných běžeckých závodech včetně 25. ročníku Volkswagen Maratonu Praha se bude starat o logistické zázemí. Lídr v oblasti městské logistiky bude mimo jiné zásobovat občerstvovací stanice a pomůže rovněž se zajištěním televizních přenosů ze závodů.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032019 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý