Cyklus while


Ďalším cyklom, s ktorým sa oboznámime, bude cyklus s podmienkou na začiatku - cyklus while. V programovaní využívame jeho konštrukciu pri riešení tých problémov, pri ktorých nemáme vopred stanovený počet opakovaní. Na rozdiel od cyklu for jeho štruktúra môže byť v niektorých prípadoch výhodnejšia a prehľadnejšia. V zásade platí, že všetko, čo môžeme naprogramovať cyklom for sa dá naprogramovať aj pomocou cyklu while.

Rovnako ako pri cykle for musíme:

  • riadiacej premennej nastaviť počiatočnú hodnotu
  • pomocou podmienky zabezpečiť ukončenie cyklu (telo cyklu sa vykonáva len dovtedy, kým je podmienka splnená - má hodnotu true
  • nastaviť riadiacej premennej meniacu sa hodnotu (cyklus for zabezpečuje sám)

Cyklus while najskôr testuje výraz (podmienku) a pokiaľ platí (má hodnotu true), vykoná sa zadaný príkaz

Syntax konštrukcie while:

Ak chceme opakovať postupnosť príkazov, využijeme zložený príkaz (príkazy, ktoré sa majú opakovať uzavrieme medzi rezervované slová begin a end).

Realizácia cyklu while je nasledovná:

  • Najskôr sa vyhodnotí podmienka (logický výraz). Ak je podmienka splnená (platí),vykoná sa príkaz (respektíve zložený príkaz) zapísaný za slovíčkom do. Ak podmienka splnená nie je (neplatí), príkazy sa nevykonajú. Tento proces je opakovaný dovtedy, kým podmienka platí. Ukončenie cyklu nastáva vtedy, keď podmienka prvý krát nebude splnená (nadobudne hodnotu false).
  • Pozn. Podmienka je vždy testovaná na začiatku, teda pred vykonaním príkazov. Ak podmienka nie je splnená cyklus sa ukončí. Telo cyklu sa v tomto prípade nevykoná ani raz. 

  • Pozor!!! Je potrebné si uvedomiť, že musíme zabezpečiť, aby od určitého okamihu podmienka prestala platiť. Inak by nastal prípad nekonečného cyklu a program by nikdy neskončil.

Povedali sme, že príkazy "zabalené" v cykle while sa vykonajú vtedy, ak je splnená podmienka. Pod podmienkou rozumieme väčšinou nejaký matematický výraz, ktorého hodnota je buď pravda (true - príkazy sa vykonajú), alebo nepravda (false - príkazy sa nevykonajú). Takémuto výrazu hovoríme logický výraz. Časté je porovnávanie nejakých číselných hodnôt, pričom v Pascale, resp. v Lazaruse máme tieto možnosti na porovnávanie:

a < b                      a je menšie ako b

a <= b                    a je menšie alebo sa rovná b

a > b                      a je väčšie ako b

a >= b                    a je väčšie alebo sa rovná b

a = b                      a sa rovná b

a <> b                    a je rôzne od b

Pomocou cyklu while nakreslíme zväčšujúce sa štvorce tak, aby sa aj posledný (najväčší) celý vmestil do grafickej plochy. Koľko štvorcov sa vykreslí teda závisí od veľkosti prvého štvorca, veľkosti grafickej plochy a od toho, o koľko sa budú jednotlivé štvorce zväčšovať. Prvý štvorec bude mať veľkosť strany = 10 a začneme ho kresliť v X-ovej súradnici X =10  (obr. 64). 


obr. 64 Kreslenie zväčšujúcich sa štvorcov pomocou cyklu while
obr. 64 Kreslenie zväčšujúcich sa štvorcov pomocou cyklu while
obr. 65 Cyklus while
obr. 65 Cyklus while


Skôr, ako program vykreslí štvorce, skontroluje, či platí podmienka, teda či pravá strana štvorca je menšia ako veľkosť grafickej plochy (túto kontrolu program vykoná pred kreslením každého štvorca).

Všimnime si, že okrem nakreslenia štvorca sme do cyklu while zapísali príkazy pre zvyšovanie hodnoty X-ovej súradnice a zväčšovanie strany. Tieto hodnoty sa zmenia vždy po nakreslení každého ďalšieho štvorca (podobne to bolo aj pri cykle for), tzn. že druhý štvorec bude mať X-ovú súradnicu 20 a veľkosť strany bude 20.

Skúste konštantu 250 (v podmienke) zmeniť na Image1.Width, aby bol program univerzálnejší a sám si zistil, aká je šírka grafickej plochy.

Pomocou cyklu s podmienkou na začiatku môžeme počítať napríklad:

  • celú časť odmocniny (obr. 66):


obr. 66 Výpočet odmocniny pomocou cyklu while
obr. 66 Výpočet odmocniny pomocou cyklu while


Na zadávanie vstupu (zápis čísla, z ktorého odmocninu chceme vyrárať) sme použili nový komponent Edit1 zo záložky Standard. Tento komponent dokáže pracovať len s textom (postupnosťou znakov), ktorý je typu String. Na to, aby dokázal načítať číselné hodnoty je potrebná konverzia - zmena údajového typu, preto sme pri zadávaní hodnoty do premennej N najskôr premenili String na Integer (skratka StrToInt) a pri výpise výsledku do komponentu Label (tiež údajového typu String) sme opäť využili konverziu, tentokrát opačnú a zmenili sme Integer na String (skratka IntToStr). Ak by sme túto konverziu nevykonali, program by nás upozornil na chybu, pretože by nevedel, akú akciu chceme vykonať.

Komponentu Edit1 v Inšpektore objektov nastavíme vlastnosť Text na nulovú hodnotu (zmažeme Edit1) a pri spustení programu sa nám zobrazí prázdne okno pripravené na zadanie vstupu (obr. 67). Následne môžeme zadať číslo, z ktorého chceme odmocninu vyrátať a po stlačení tlačidla dostaneme výsledok (obr. 68).


obr. 67 Príprava na zadanie vstupu do komponentu Edit
obr. 67 Príprava na zadanie vstupu do komponentu Edit
obr. 68 Zadanie vstupu do komponentu Edit a výpis odmocniny čísla do komponentu Label
obr. 68 Zadanie vstupu do komponentu Edit a výpis odmocniny čísla do komponentu Label

  •  alebo faktoriál čísla:
obr. 69. Výpočet faktoriálu pomocou cyklu while
obr. 69. Výpočet faktoriálu pomocou cyklu while
Vytvorte si webové stránky zdarma! Táto stránka bola vytvorená pomocou služby Webnode. Vytvorte si vlastný web zdarma ešte dnes! Vytvoriť stránky