• Podmienený príkaz

        •  

          Vetvenie

          Pri programovaní budeme často riešiť situácie, keď sa niektoré príkazy budú vykonávať len pri splnení istých podmienok.

          Podmienkou budeme rozumieť taký výraz, ktorého výsledkom je buď pravda alebo nepravda. Podmienka je splnená, ak nadobúda hodnotu pravda, inak je podmienka nesplnená. Veľmi často to budú podmienky, v ktorých sa nejaké hodnoty porovnávajú, napr. na rovnosť, alebo ktorá hodnota je väčšia.

          V Pascale na porovnávanie hodnôt máme k dispozícii tieto tzv. relačné operátory:

          • =       rovnaké hodnoty – rovnosť
          • < >    rôzne hodnoty – nerovnosť
          • <       prvá hodnota je menšia ako druhá
          • < =    prvá hodnota je menšia alebo rovná druhej
          • >       prvá hodnota je väčšia ako druhá
          • > =    prvá hodnota je väšia alebo rovná druhej

          Takto vyzerajú zápisy niekoľkých jednoduchých podmienok:

          • X > 100
          • 1 mod 5 = 0
          • I div 10 > = 1
          • A > B
          • Random(6) = 1
          • Abs(X) < 0
          • I + 1 = 2

          Výsledok podmienky väčšinou závisí od nejakých premenných (napr. X > 100), ale niektoré podmienky sú vždy nepravdivé (napr. Abs(X) < 0), iné sú zas pravdivé vždy (napr. X < X + 1).

          Teraz sa naučíme nový príkaz, tzv. príkaz vetvenia (hovoríme mu aj podmienený príkaz). Jeho zápis je nasledovný:

          if podmienka then

            príkaz1

          else

            príkaz2;

          Grafický to môžeme znázorniť takto:

          Tiež je veľmi dôležité formátovanie príkazu: zatiaľ vidíme, že príkaz1, else aj príkaz2 sú každé na novom riadku, else je na tej istej úrovni ako if a oba príkaz1 aj príkaz2 sú odsunuté vľavo o 2 medzery.

          Podobne ako for-cyklus, aj tento príkaz v sebe obsahuje nejaké iné príkazy a v tomto prípade sú dva: príkaz1príkaz2. Vnorený príkaz1 sa vykoná jedine vtedy, keď výsledok podmienky je pravdivý inak sa vykoná len vnorený príkaz príkaz2. Po slovensky by sme mohli povedať:

          ak je splnená podmienka, tak vykonaj príkaz1, inak vykonaj príkaz2;

          Treba tomu rozumieť tak, že vždy sa vykoná len jeden z týchto dvoch príkazov a to buď iba príkaz1, ak bola podmienka splnená alebo iba príkaz2, ak bola podmienka nesplnená.

          Treba si zapamätať to, že v príkaze vetvenia sa nesmie písať bodkočiarka za príkazom príkaz1 ešte pred else, ale bodkočiarku píšeme až za vnoreným príkazom príkaz2.

          Príkaz if nemusí mať else vetvu. Potom to vyzerá takto:

          if podmienka then

            príkaz1;

          Ak máme viac príkazov vo vetve použijeme zložený príkaz begin ... end, rovnako ako sme to urobili pri for-cykloch. Jeho zápis je nasledovný:

          if podmienka then

          begin

            príkaz1a;

            príkaz1b;

          end

          else

          begin

            príkaz2a;

            príkaz2b;

          end;

          Všimnite si formátovanie podmieneného príkazu if: pravidlá sú rovnaké, s akými sme sa stretli pri formátovaní for-cyklu: ak je vnorený jeden príkaz, tak ten je odsunutý oproti if (resp. else) v predchádzajúcom riadku o 2 medzery vpravo, ak je vnorených viac príkazov (teda sme použili zložený príkaz), tak slová beginend sú na rovnakej úrovni ako príslušný if a else a odsunuté sú až príkazy medzi beginend.

          Vnorené podmienené príkazy (if)

          Program má vypísať správu o tom, či používateľ zadal (cez vstupný riadok) kladné číslo, záporné číslo alebo číslo rovné 0.

          Riešenie si môžeme najprv nakresliť:

          V prípade, že bola zadaná 0, sa už v programe nič netestuje. Ak bolo zdané nejaké kladné číslo, tak sa urobí ešte jeden test. Ak zadáme záporné číslo, tak sa tiež uskutočnia iba dva testy.

          Tento program môžeme zapísať takto:

          var

            N: Integer;

          begin

            if N = 0 then

              TextOut(50 ,50, 'na vstupe je nula')

            else

              if N < 0 then

                TextOut(50 ,50, 'na vstupe je záporné')

              else

                TextOut(50 ,50, 'na vstupe je kladné')

          end;

          Takémuto príkazu if, ktorý je vo vnútri iného if-príkazu, hovoríme vnorený podmienený príkaz, a pri programovaní sa používa veľmi často.

          Zostavovanie zložených podmienok (logické operácie)

          V programovacom jazyku máme k dispozícii tieto 3 základné logické operácie:

          podm1 and podm2       - otestovanie, či súčasne platia obe podmienky podm1 aj podm2

          podm1 or podm2          - otestovanie, či platí aspoň jedna z podmienok podm1podm2

          not podm1                    - otestovanie, či neplatí podmienka podm1, to znamená znegovanie podmienky

          Pomocou týchto operácií môžeme skladať rôzne komplikované podmienky. Vtedy si treba uvedomiť, že operandy týchto logických operácií by mali byť výrazy (najčastejšie relačné), ktorých hodnota je pravda alebo nepravda.

          Už vieme, že s prioritou operácií je to pri programovaní veľmi vážne a tieto tri operácie nám prinášajú nové komplikácie, preto parametre logických operácií väčšinou dávame do zátvoriek.

          Zložený podmienený príkaz (case)

          Pascal poskytuje ešte jeden iný príkaz vetvenia, ktorý netestuje hodnotu nejakej podmienky na pravda/nepravda, ale podľa hodnoty nejakého číselného výrazu, vykoná jeden z možných príkazov. Príkaz zapisujeme takto:

          case výraz of

            hodnota1: príkaz1;

            hodnota2: begin

                        príkaz2a;

                        príkaz2b;

                      end;

            hodnota3: príkaz3;

            ...

          else

            príkazE;

          end;

          Príkaz case nemusí mať else – vetvu, vtedy, ak ani jedna z možnosí nie je medzi uvedenými hodnotami, tak príkaz nespraví nič, podobne, ako príkaz if bez else vetvy.

          Ak chceme, aby sa vykonalo viac príkazov pri nejakej hodnote, alebo v else vetve, vtedy musíme použiť zložený príkaz begin ...end.

          Zdroj:RNDr. Andrej Blaho, RNDr. Ľubomír Salanci, PhD.:  Programovanie 3

          Príklady na stiahnutie Vetvenie_povinna_domaca_uloha_do_18.docx