Datové typy i proměnné máme za sebou. Můžeme se tedy pustit do podmínek.
Výklad učiva:
Podmínky v Pascalu máme vlatně jen dvě. Jsou výjimky typu While, ale já osobně pokládam while za cyklus a ne podmínku. První z podmínek má hodně možností zapsání, kdežto druhá má pouze dva.
Příkaz IF
Podmínka IF aneb "jestliže", má mnoho způsobů zapsání, ovšem všechny mají stejné jedno, a to porovnání podmínky. Podmínka se zapisuje pomocí porovnávíní Cproměnné a máme několik možností porovnání:
Číselné hodnoty (Integer)
a<5 (* proměnná a je menší než 5 *)
a>5 (* proměnná a je větší než 5 *)
a<=5 (* proměnná a je menší nebo rovna 5 *)
a>=5 (* proměnná a je větší nebo rovna 5 *)
a<>5 (* proměnná a se nerovná 5 *)
a=5 (* proměnná a se rovná 5 *)
Písmena (Char)
a='N' (* proměnná a se rovná N *)
a<>'N' (* proměnná a se nerovná N *)
Logické hodnoty (Boolean)
a=TRUE (* proměnná a se rovná TRUE (pravda) *)
a<>False (* proměnná a se nerovná FALSE (nepravda) *)
Číselné příklady jsou, myslím si, jasné. U písmen, tedy typu Char, je možné dělat i stejné operace jako u čísel, protože každé písmeno má svojí hodnotu v ASCII tabulce, ale dopředu se dohodneme, že budeme u písmen používat pouze rovná se a nerovná se. U posledního typu (Boolean) si bystřejší z vás všimnou, že obě podmínky mají stejný význam, protože pokud se 'a' nerovná FALSE, logicky se rovná TRUE, což je napsané nad ní.
Podmínky lze také kombinovat, samozřejmě, a to pomocí logických operátorů AND a OR, přičemž se musí výraz umístit do závorek. Uveďme si příklad:
(a='N') AND (a='n')
(a=5) OR (a=10)
Složené podmínky můžeme také kombinovat a vnořovat, takže nám může vzniknout například tohle:
( (a='N') OR (a='n') AND (a='A') OR (a='a') )
Upozorňuji na velkou ostražitost při psaní závorek!
To by byl základ psaní podmínek a teď již k samotnému příkazu.
Jednoduchá podmínka
Jednoduchá podmínka se zapisuje ve tvaru: IF podminka THEN prikaz; např.: IF a=5 THEN write('Ahoj svete');
Program zkontroluje výraz v podmínce jestli je pravdivý a pokud ano, provede příkaz za slůvkem THEN. Pokud není podmínka pravdivá, celý příkaz přeskočí a pokračuje v programu. Například:
...
writeln('Pokud zmacknes klavesu O vypise se ti ,,Obraz" ');
a:=readkey;
if (a='O') OR (a='o') then writeln('Obraz');
write('Pokracujeme v programu');
...
Jak vidíte, rovnou jsem si pojistil v podmínce, že zmáčknutá klávesa může být jak velké tak malé ,,O" . Jde o to, že v syntaxi kompilátor sice nerozpoznává velká a malá, ovšem hodnota proměnné je buď velká nebo malá.
Úplná podmínka
Úplná podmínka se zapisuje ve tvaru : IF podminka THEN prikaz ELSE prikaz; např.: IF a=5 THEN write('Ahoj svete') ELSE write('Nashle svete');
Program tedy zkontroluje podmínku a pokud je pravdivá, vykoná příkaz za slůvkem THEN, pokud není pravdivá, vykoná příkaz za slovem ELSE. Všiměte si, že příkaz za slůvkem THEN není ukončen středníkem a to proto, že pokud v podmínce použijete slovo ELSE, nesmí se za THEN psát středník. Program tedy vykoná větev podle vyhodnocení podmínky a pokračuje dál. Například:
...
write('Chces vypsat ahoj svete? A/N ');
readln(volba);
IF (volba='A') OR (volba='a') THEN writeln('Ahoj svete') ELSE writeln('Nevypisu');
write('Podminka byla vykonana a pokracujeme');
...
Podmínky se mohou samozřejmě také vnořovat, ale moc to nedoporučuji, protože se pak zdrojový kód stává dost nepřehledným.
Myslím, že prozatím nebudeme k příkazu IF více potřebovat. Poslední co potřebujete vědět je, že, jak jste si všimli, za slůvka THEN a ELSE lze vložit pouze jeden příkaz. Taková podmínka by nám byla samozřejmě k ničemu, a proto se tento problém řeší použitím složeného příkazu BEGIN END; . Dejte si pozor na středník za endem.
Příkaz CASE
Předchozí příkaz (IF) nám program dokázal rozvětvit pouze do dvou větví, což je dobré jen pro nějaká opatření a další maličkosti, ovšem pro větší projekty je samozřejmě potřeba větvení do více větví. O to se právě stará příkaz CASE nebo-li přepínač.
Příkaz se zapisuje v tomto tvaru:
CASE promenna OF
'hodnota': prikaz;
'hodnota2': prikaz;
....
'hodnotaN': prikaz;
End;
Nejlepší asi bude, když hned uvedu příklad:
...
writeln('zadej tvoji volbu: ');readln(volba);
CASE volba OF
'A','a' : writeln('Ahoj svete');
'N','n' : writeln('Nashle svete');
'E','e' : writeln('Euklidovo cislo');
'K','k' : writeln('Konec');
End;
write('Prepinac vypsal, co mel a my pokracujeme');
...
Příkaz CASE, stejně jako IF, má ještě jednu variantu, a to se slůvkem ELSE. Tzn., že přepínač zkontroluje všechny větve a pokud výraz neodpovídá žádné z nich, provede to, co je za slůvkem ELSE. Pokud slovo ELSE nepoužijeme, tak program normálně pokračuje dále.
Problematika podmínek je, myslím si, velmi těžká látka a pro dnešek jsme si toho už vysvětlili hodně. Nakonec tedy malá ukázka programu s použitím podmínek:
Program podminky;
Uses crt;
label skok; (* Deklarace skoku *)
var i:integer; (* Deklarace promennych *)
odpoved,volba:char;
Begin
clrscr;
write('Vitejte v programu Test'); (* Uvitani *)
readln;
skok: (* Zacatek skoku *)
clrscr;
writeln('1. Jaka je nejlepsi stranka o programovani? ');
writeln('a) Azetko.sk');
writeln('b) Programujte.com'); (* Otazka *)
writeln('c) Seznam.cz');
readln(odpoved);
CASE odpoved OF (* Prepinac *)
'A','a' : Begin (* pokud je odpoved A *)
write('Nene Azetko je slovensky vyhledavac zkus to znovu');
readln;
goto skok;
end;
'B','b' : write('Vyborne! Programujte rulezzz'); (* Pokud je odpoved B *)
'C','c' : Begin (* Pokud je odpoved C *)
write('Ale to vis ze ne Seznam je Cesky vyhledavac zkus to znovu');
readln;
goto skok;
end;
ELSE Begin (* Pokud je odpoved jina nez a,b,c *)
write('Spatne zadani. Zadej a,b nebo c');
readln;
goto skok;
end;
End;
readln;
clrscr;
Write('Odpovedel jsi spravne chces to zkusit znovu ? (N/A)');
readln(volba);
if (volba='A') OR (volba='a') Then goto skok ELSE write('Dekuji za pouziti'); (* Opakovat ? *)
readln;
end.
Úkol
Jak ste si asi všimli, měl jsem trošku problém vymslet rychle nějaký problém, kde bych použil IF i CASE a nebylo to na tisíc řádků. A jelikož programátor musí být nápaditý a mít fantazii, tak je to samé teď na vás. Vymyslete nějaký program, ve kterém použijete jak IF, tak CASE. Dopředu říkam, že chci, aby program měl určitou úroveň, tzn. počty s proměnnými a další a další věci.