Lekce 1.12
Podmφnky v programu


p°edchozφ lekce (1.11) obsah kurzu nßsledujφcφ lekce (1.13)

Jak jsme ji₧ uvedli v ·vodu probφran²ch lekcφ, je programovßnφ vlastn∞ sestavovßnφ posloupnosti vykonßvan²ch akcφ. V n∞kter²ch p°φpadech musφme mφt ale mo₧nost n∞kterou z akcφ bu∩ vynechat, nebo provΘst akce jinΘ. Obojφ na zßklad∞ zadanΘ podmφnky. Nap°φklad pokud mßm v kapse vφce ne₧ dvacet korun, p∙jdu do kina, jinak p∙jdu dom∙ na televizi. Zadanß podmφnka by se dala v lidskΘ mluv∞ popsat nßsledujφcφm vztahem:

POKUD hotovost > 20 POTOM
   p∙jdu do kina
JINAK
   budu se dφvat na televizi
KONEC
UvedenΘmu zßpisu se °φkß algoritmus a popisuje schematicky postup provßd∞n²ch akcφ. Vztahu hotovost>20 se °φkß podmφnka. Podmφnka nßm tedy urΦuje, jakß akce se bude provßd∞t. Zßpis algoritmu je nutnΘ pro poΦφtaΦ p°evΘst do programu. Nap°φklad nßsledujφcφm zp∙sobem:

Program hotovost;
var
   hotovost : Integer;
begin
   hotovost := 15;          {zadejte vaÜi hotovost}
   if hotovost > 20 then
      Writeln('Kino')       {pokud je podmφnka spln∞na}
   else
      Writeln('Televize');  {pokud nenφ podmφnka spln∞na}
end;
end.
Nejprve jsme deklarovali prom∞nnou se jmΘnem hotovost. Dßle jsme jφ v programu p°i°adili urΦitou hodnotu. V podmφnce jsme potom zjiÜ¥ovali, zda odpovφdß naÜim po₧adavk∙m a podle toho jsme provedli urΦitou akci. Zkuste si zadat sami r∙znΘ hodnoty stavu vaÜφ hotovosti.

Podmφnka se v programu zadßvß klφΦov²m slovem If, za kter²m musφ nßsledovat vyhodnocovanß podmφnka. Za klφΦov²m slovem Then se uvede akce, kterß se provede p°i spln∞nφ podmφnky. Po uvedenφ klφΦovΘho slova else je mo₧nΘ uvΘst akci, kterß se mß provΘst v p°φpad∞ nespln∞nφ podmφnky. VÜimn∞te si, ₧e mezi then a else je mo₧nΘ uvΘst pouze jeden p°φkaz, kter² nesmφ b²t navφc ukonΦen st°ednφkem. Pokud byste po₧adovali uvΘst v rßmci podmφnky vφce p°φkaz∙, museli byste je uvΘst v bloku ohraniΦenΘm klφΦov²mi slovy begin a end. Viz nßsledujφcφ p°φklad:


Unit podminka;
interface
implementation
var
   plat : Integer;
begin
   plat := 12000;          {zadejte vaÜi hotovost}
   IF plat > 15000 then
   begin
      Writeln('Do prßce jezdφm autem');
      Writeln('Bydlφm v rodinnΘm domku');
      Writeln('Dovolenß u mo°e');
   end
   else
   begin
      Writeln('Do prßce jezdφm vlakem');
      Writeln('Bydlφm v panelßku');
      Writeln('Dovolenß na koupaliÜti');
   end;
end;
end.
VÜimn∞te si, ₧e jsme v programech u zßpisu podmφnky odsadili vykonßvanΘ p°φkazy na °ßdku o t°i znaky. Tφm vynikla struktura podmφnky a na prvnφ pohled je viditelnΘ jejφ rozΦlen∞nφ. Nenφ to sice nutnost, p°esto vÜak doporuΦujeme uvedenou grafickou podobu zßpisu programu ve vlastnφm zßjmu dodr₧ovat.

Podmφnku p°edstavuje logick² v²raz, kter² udßvß, zda je podmφnka spln∞na nebo ne. LogickΘ v²razy mohou mφt proto v²sledek pouze pravda nebo nepravda. V poΦφtaΦovΘ terminologii True (pravda) nebo False (nepravda). Pokud byste cht∞li v²sledek podmφnky deklarovat jako prom∞nnou, museli byste pou₧φt typ BOOLEAN. Logickß podmφnka zpracovßvß nejΦast∞ji matematick² v²raz. M∙₧e to vÜak b²t i v²raz zpracovßvajφcφ °et∞zce, to vÜak bude psßno a₧ se nauΦφme s °et∞zci d∙kladn∞ji pracovat. MatematickΘ v²razy porovnßvajφ nejΦast∞ji n∞kolik hodnot. Ve v²razu se p°itom m∙₧e takΘ pou₧φt libovolnΘho matematickΘho v²poΦtu, kter² je v jazyce definovßn. MatematickΘ v²razy zpracovßvajφ aritmetickΘ operace. V²razy se sklßdajφ z operßtor∙ a operand∙. Operßtor je p°itom porovnßvanß hodnota a operand je zp∙sob porovnßnφ hodnot. Operßtor m∙₧e p°edstavovat libovoln² matematick² v²poΦet, kter² je v jazyce definovßn. Operand slou₧φ k vyhodnocenφ operßtor∙. Pou₧φvajφ se nßsledujφcφ dostateΦn∞ znßmΘ operandy:


    >       v∞tÜφ ne₧
    >=      v∞tÜφ nebo rovno ne₧
    <       menÜφ ne₧
    <=      menÜφ nebo rovno ne₧
    =       rovno
    <>      nerovno
Ve v²razu je samoz°ejm∞ mo₧nΘ pou₧φvat zßvorky. P°φklad v²raz∙ zpracovßvajφcφch matematick² v²poΦet:

hotovost >   20
  a/2    <   10
2*(a+b)  = 2*a+2*b
V²razy m∙₧eme dßle v jednΘ podmφnce spojit logick²m operßtorem s dalÜφm v²razem a vyhodnocovat tak slo₧enou podmφnku. Pou₧φvajφ se p°itom nßsledujφcφ logickΘ operßtory:

AND       a zßrove≥ platφ
OR         platφ jeden nebo druh² v²raz
NOT       nenφ pravda, negace v²razu
V p°φpad∞ pou₧itφ logick²ch operßtor∙ majφ tyto ve vyhodnocovßnφ v²raz∙ p°ednost p°ed ostatnφmi operßtory. Dßle se vyhodnocujφ zßvorky a a₧ na konci matematickΘ v²poΦty. Pokud budete chtφt zapsat v programu n∞kolik v²raz∙ spojen²ch logick²m operßtorem, musφte umφstit v²razy do zßvorek. Nap°φklad pro zjiÜt∞nφ rozsahu hotovosti od 10 KΦ do 30 KΦ pou₧ijete nßsledujφcφ zßpis:

if (hotovost >= 10) and (hotovost <= 30) then
   Writeln('Kino')        {pokud je podmφnka spln∞na}
else
   Writeln('Televize');   {pokud nenφ podmφnka spln∞na}
V tΘto lekci jsme si probrali mimo mo₧nosti rozv∞tvenφ Φinnosti programu takΘ zp∙sob zßpisu podmφnek v programu. Podmφnky se v programu pou₧φvajφ i v dalÜφch p°φkazech. Nap°φklad pro zadßnφ poΦtu opakovßnφ zvolenΘ Φßsti programu, jak si ukß₧eme v nßsledujφcφ lekci.
p°edchozφ lekce (1.11) obsah kurzu nßsledujφcφ lekce (1.13)

OZOGAN, 1 Mßje 97, 460 01 Liberec
tel.,fax: (048) 52 28 338, e-mail: info@ozogan.cz