Pascal – #6 Podmínky

V této lekci se naučíme podmínkám. Podmínky se v programu používají k rozhodování a větvení programu. Například pokud uživatel zadá číslo, udělej něco, pokud uživatel zadá písmeno, udělej něco, pokud zadá znak, udělej něco jiného atd. Podmínky jsou nedílnou součástí každého programovacího jazyku. Je to jedna z nejdůležitějších věcí. V podstatě nejde napsat žádný větší program bez užití podmínek. Proto je velmi důležité je pochopit. Nemějte však, strach v zásadě se nejedná o nic složitého. Tolik tedy na úvod. Teď si pojďme ukázat, jak to bude vypadat v praxi.

Boolenovský výraz

Řekněme si co to je boolenovský výraz, stručně řečeno, je to takový výraz, na který se dá odpovědět ANO – NE respektive PRAVDA – NEPRAVDA. Příklad takového boolenovského výrazu je například následující  10>6 v tomto případě se jedná o ANO nebo také PRAVDU. Další možný příklad by byl 5=7 tady se však jedná o NEPRAVDU. Místo čísel však můžeme užít také proměnné, které uživatel naplní daty až za chodu programu např. a<b zde nelze na první pohled rozhodnout jedná se však také o boolenovský výraz stejně tak jako například zde x=‘A‘ tady se pro změnu ptáme, zda je v proměnné x načtený znak „A“.

Obecná syntaxe podmínky:

If (boolenovský vyraz) then
Begin

 Vykonávané příkazy;
 Vykonávané příkazy;

End;

Pojďme si to teď popsat slovy. Na začátek si řekneme, že tomuto celému se rozhodovací blok nebo taky podmínkový blok. Teď již na překlad. IF v překladu znamená ‚pokud‘ nebo taky ‚když‘. První řádek by se tedy dal přečíst takto. Pokud boolenovský výraz je pravda potom. Následující řádky jsou již blok příkazů, tak jak jsme již zvyklí například z lekce o cyklech. Pokud boolenovský výraz na začátku není pravda program skočí až na řádek s End;. Toto byla jen velice jednoduchá ukázka pojďme si ukázat něco trochu složitějšího. A tím jsou složené podmínky.

Obecná syntaxe Složené podmínky:

If (boolenovský vyraz) then
Begin

  Vykonávané příkazy;
  Vykonávané příkazy;

End

Else if (boolenovský vyraz) then
Begin

  Vykonávané příkazy;
  Vykonávané příkazy;

End;

Zde dochází k tomu, že program testuje první boolenovský výraz a pokud neplati, tak neskočí hned na konec celého bloku podmínek, ale řeší boolenovský výraz následující za slovem Else If pokud je pravda vykoná jeho příkazový blok, pokud ani ten neplatí tak hledá další boolenovský výraz za Else IF pokud žádný takový nenajde skočí na konec a pokračuje v dalším chodu programu.

Zde si ještě řekneme, že pokud by byl první boolenovský výraz platil tak by se již druhý výraz ani nekontroloval a vykonaly by se pouze příkazy následující po prvním boolenovském výrazu. Dále je důležité vědět, že Počet Else if v podmínce není omezen a můžeme ho tedy využít, kolikrát chceme. Zde si povšimneme ještě jedné zvláštnosti pascalu, že před end, za kterým následuje else se nepíše ‚;‘. Pokud bychom znak napsali, compilator by hlásil chybu.  Aby toho nebylo málo, čeká nás ještě třetí typ struktury. Ten vypadá opět podobně

Obecná syntaxe Podmínka S ELSE na konci:

If (boolenovský vyraz) then
Begin

  Vykonávané příkazy;
  Vykonávané příkazy;

End;

Elseif (boolenovský vyraz) then
Begin

  Vykonávané příkazy;
  Vykonávané příkazy;

End

Else
Begin

  Vykonané příkazy;

End;

Zde nám ke konci přibylo slovo Else, zde si opět povšimneme, že na řádku před else není za end znak ‚;‘. Druhá zvláštnost je, že se neuvádí žádný boolenovský výraz z logiky věci tedy platí, že všechny příkazy napsané za else se vykonají vždy. Else je však volitelné nemusí být v podmínce vůbec obsaženo. Většinou se jedná o koncové řešení, které pouze vypíše zprávu na obrazovku. Else by se dalo přeložit jako, pokud nastane cokoliv jiného než výše uvedené boolenovské vyrazy pak dělej následující příkazy.

Příklad 1

Tak dost bylo teorie, pojďme si ukázat, jak to funguje v praxi. Tím to pochopíte stejně nejlépe. Jako první si ukážeme zcela jednoduchý rozhodovací blok. V nadcházejícím příkladu program rozhodne zda uživatel zadal číslo větší menší než nula a nebo samotnou nulu.

Program IF1;
Uses crt;

Var a : integer;

Begin
Clrscr;
 Readln(a);

 If a > 0 then
 Begin
   Writeln('číslo vetší jak nula');
 End

 Else if a < 0 then
 Begin
   Writeln('číslo mensi jak nula') ;
 End

Else Writeln('zadané číslo je nula');

Repeat until keypressed;

End.

Logické operátory:

V druhé části lekce si ještě řekněme něco o logických operátorech, které můžeme v podmínkách využít.

OR: jedná se o logické nebo.

AND: by se dalo přeložit jako ‚a současně‘

Použití těchto operátoru v podmínkách je pak následující:

If( (boolenovský výraz) OR( boolenovský výraz)) then

taková to podmínka se provede, pokud alespoň jeden boolenovský příkaz bude pravda.

If( (boolenovský výraz) AND ( boolenovský výraz)) then

taková to podmínka se provede jen a pouze pokud budou oba boolenovské výrazy pravda

Komplexní Příklad

Vše si ukážeme hned na dalších dvou příkladech, které budou demonstrovat vše co jsme se dnes naučili. Tentokrát se bude jednat o program, kterému zadáme tři rozměry reprezentující hrany trojúhelníku, a program rozhodne, zda je vůbec možné tento trojúhelník sestavit a poté vypíše, zda se jedná o rovnoramenný rovnostranný nebo obecný trojúhelník. Při rozhodování, zda je možné sestrojit, použijeme pravidla, že součet kterýchkoliv stran musí být větší než strana třetí

Program trojuhelnik;

   uses crt;

   var a : integer;
       b : integer;
       c : integer;

 begin
     clrscr;
     Writeln('načti 3 strany trojúhelníku');
     readln(a,b,c);

              if ((a+b<c) or (b+c<a) or (c+a<b)) then
              begin
                  Writeln('Trojuhelnik nelze sestrojit');
              end
              else if  (a=b) or (b=c) or (c=a) then
              begin
                  Writeln('Rovnoramený');
              end
              else if (a=b) and (a=c) then
              begin
                  Writeln('Rovnostranný');
              end
              else Writeln('Obecný');

           repeat until keypressed;

        end.

Příklad 3

Další program neukazuje nic nového spíše procvičuje použití podmínek a logického operátoru AND.

program IF2;
 uses crt;
 var x : integer;

Begin
 clrscr;
  Writeln('Zadej cislo x od 0 do 100');
  Readln(x);
  If (x>=0) and (x<=50) then
  begin
    writeln('Zadane cislo je v intervalu od 0 do 50 včetně') ;
  end
  else if (x>=51) and (x<=100)then
  begin
    writeln('Zadane cislo je v intervalu 51 a 100');
  end
  else writeln('nezadali jste číslo v rozsahu od 0 do 100 zkuste znova');

  repeat until keypressed;

  end.

Závěr

Z dnešní lekce je to již vše. Měli byste tedy chápat obecnou strukturu podmínek if vědět kdy použít složitější podmínky s else if a else. Dále byste měli vědět, co je to boolenovský výraz. Měli byste chápat spojení boolenovských výrazů pomocí logických operátorů AND a OR. Případně si sami můžete zkusit vymyslet nějaký prográmek či pouze nějakou jinou variantu na to co jsme si dnes ukázali.

V příští lekci se podíváme na opět na cykly, které budou tentokrát ukončovány podmínkou.

Napsat komentář