Pascal pro začátečníky 4 - Podmínkové příkazy

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: Kub@z
Datum: 13.4.2004
Hodnocení/Hlasovalo: 1.73/26

Co je to podmínka? To je snad jasné. Prostě pokud něco platí, něco dalšího se vykoná. Vše předvedu na jednoduchém...

Co je to podmínka? To je snad jasné. Prostě pokud něco platí, něco dalšího se vykoná. Vše předvedu na jednoduchém příkladu:

var cislo: integer;
begin
cislo := 5;
if cislo = 5 then write('Ahoj');
end.

Do proměnné číslo se přiřadí hodnota 5 a pokud je hodnota proměnné "cislo" 5, tak se vypíše "Ahoj". Tu podmínku zajišťuje klíčové slovo "if". Takže kdyby tam bylo "cislo := 6", tak by se nic nevypsalo. Úplně stejně lze porovnávat textové řetězce:

var txt: string;
begin
readln(txt);
if txt = 'ahoj' then write('Cau');
end.

Pokud chceme, aby se vykonalo více příkazů, nemusíme tam psát podmínku "if" několikrát, ale použijeme další "begin" a "end":

var txt: string;
begin
readln(txt);
if txt = 'ahoj' then begin (* když uživatel zadal "ahoj" *)
 write('Cau');
 write(':-)');
 end;
end.

Podmínkové operátory jsou:


OperátorVýznam
  =  Rovná se
  <>  Není rovno
  >=  Je větší nebo rovno
  <=  Je menší nebo rovno
  >  Je menší
  <  Je větší


Teď je vhodná chvíle, abych se zmínil o spojování více podmínek pomocí dalších operátorů. Jsou to operátory "and", "or", "xor" a "not".

Použití operátorů:


OperátorVýznam
  And  Pokud platí obě podmínky
  Or  Pokud platí alespoň jedna podmínka
  Xor  Pokud platí pouze jedna podmínka
  Not  Pokud podmínka neplatí


Příklad:

var cislo: integer;
begin
cislo := 5;
if (cislo >= 2) and (cislo < 4) then write('Ahoj');
if not (cislo = 1) then write('Cislo neni jedna');
end.

Jak vidíme, ahoj se nevypíše, protože podmínka splněna není. Pozor! Podmínky je nutné uzavírat do závorek, jinak by to bylo bráno jako bitová operace s čísly, ale tím se teď zabývat nebudu. Operátor not znamená negaci, tzn. že zápis "not (cislo = 1)" znamená to samé jako "cislo <> 1". Podmínky lze utvářet i složitější a to pomocí závorek:

var cislo: integer;
begin
cislo := 5;
if ((cislo > 2) and (cislo < 7)) or (cislo = 10) then write('Ahoj');
end.

Ahoj se tedy vypíše, pokud je "cislo" větší než 2 a menší než 7, nebo je 10. V souvislosti s "if" se musím zmínit ještě o příkazu "else". Všechno co je za příkazem "else" se vykoná, pokud předcházející podmínka nebyla splněna:

var cislo: integer;
begin
cislo := 4;
if cislo = 5 then write('Cislo je pet')
else write('cislo je nejake jine');
end.

Pozor! U posledního příkazu před else se nepíše středník. Pokud se má za else vykonat více příkazů, je samozřejmě nutné je uvést mezi "begin" a "end". Pascal má ještě jeden typ podmínky, a to "case". Case se používá místo více podmínek. Použití je následující:

var cislo: integer;
begin
cislo := 5;
case cislo of (* zjistíme hodnotu *)
1: write('cislo je jedna');
2: write('cislo je dva');
5: write('cislo je tri');
7: begin
     write('cislo je sedm');
     cislo := 15;
   end;
else write('cislo je jine');
end;
end.

Tedy "case proměnná of" určuje proměnnou, ze které se má zjišťovat hodnota, následuje výčet hodnot. Za každou hodnotou je uvedena dvojtečka a příkaz, který se má vykonat. Pokud chceme vykonat více příkazů, uzavřeme je mezi "begin" a "end". Pokud žádná hodnota neplatí, vykoná se příkaz za "else". Výčet hodnot končí slovem "end". Příkaz case je bohužel možné použít pouze na číselné proměnné. V souvislosti s podmínkami bych měl zmínit datový typ "boolean", který nabývá hodnot "true" (pravda) a "false" (nepravda). Tento typ může být uveden místo podmínky. Příklad:

var plati: boolean;
begin
plati := true;
if plati then write('Podminka plati');
end.

Hodnota přiřazená do tohoto typu může být i výsledkem výrazu vracejícího logickou hodnotu:

var plati: boolean;
begin
plati := 5 > 3;
if plati then write('Podminka plati');
end.

Teď zde uvedu ještě jednu funkci, která sice s podmínkami nesouvisí, ale je velice užitečná. Je to funkce "random". Tato funkce vrátí náhodné číslo v určitém rozsahu a to je vymoženost asi pouze Pascalu. Zde je příklad použití:

var cislo: integer;
begin
randomize; (* inicializuje generátor náh. čísel *)
cislo := random(15); (* Do proměnné se přiřadí náhodná *)
                     (* hodnota od 0 do 14 *)
writeln(cislo); (* číslo vypíšeme *)
end.

Jak vidíte, ještě se nám zde objevilo jakési "randomize". Inicializuje to generátor náhodných čísel a je vhodné to uvést třeba na začátku programu. Se znalostmi, které jste do teď získali a se znalostí cyklů (6. lekce) už dokážete naprogramovat třeba hru, kde uživatel bude hádat náhodné číslo a program mu zahlásí třeba něco ve stylu "zadej větší".

Kub@z