Instrukcje warunkowe, instrukcje wyboru
if-then-else
Najprostsza składnia to:
IF warunek (lub warunki, o tym niżej) THEN instrukcje
Jest to typ okrojony, pełna instrukcja warunkowa wygląda tak:
IF warunek (lub warunki, o tym niżej) THEN instrukcje ELSE instrukcje
Zobrazujmy to na przykładzie prostego programu:
program if_then_else;
var x: integer;
begin
write('Podaj jakas liczbe typu integer: ');
readln(X);
if(X>0) then writeln('Liczba wieksza od zera!') {gdy warunek X>0 jest prawdziwy}
else writeln('Wprowadzona liczba jest albo zerem, albo jest ujemna');
readln;
end.
I tu należy zrobić jeszcze jedną uwagę - należy pamiętać, że ostatnia instrukcja przed "else" nie może się kończyć średnikiem.
Może jeszcze dwa przykład na zagnieżdżenie instrukcji:
if wynik>= 50
then if wynik>= 60
then if wynik>= 70
then if wynik>= 80
then if wynik>=90
then ocena:= 5.0
else ocena:= 4.5
else ocena:= 4.0
else ocena:= 3.5
else ocena:= 3.0
else ocena:= 2.5
else ocena:= 2.0
program zagnieżdzone_instrukcje_IF;
var
sz: char;
ascii: integer;
begin
writeln('Podaj liczbę hex od A do F a ja Ci ją podam w ASCII');
readln(sz);
if (sz>= '0') and (sz <= '9')
then ascii:= Ord(sz) - Ord('0')
else if (sz>= 'a') and (sz <= 'f')
then ascii:= Ord(sz) - Ord('a') +10
else if (sz>= 'A') and (sz <= 'F')
then ascii:= Ord(sz) - Ord('A') +10
else writeln('To nie jest liczba hekasdecymalna...');
writeln('Wartość dziesiętna ',sz,' wynosi ',ascii);
readln; {czeka na nacisniecie klawisza enter, pozniej konczy program}
end.
if-then-else pozwala jednak na wykonanie tylko dwóch różnych instrukcji w zależnośCi od wartości (prawda, fałsz) badanego warunku. W Pascalu istniej jeszcze instrukcja CASE OF.
CASE OF
Spójrzmy zatem na problem z ocenianiem jeszcze raz:
CASE Wynik DIV 10 OF
10,9 : Ocena = 5.0 ;
8 : Ocena = 4.0;
7 : Ocena =4.0 ;
6 : Ocena = 3.5 ;
5 : Ocena =3.0 ;
0,1,2,3,4 Ocena = 2.0
END { prawda, ze o wiele szybsze i czytelniejsze? }
Pomówmy jeszcze o warunkach. Jeden IF może zbadać kilka warunków, używa się wtedy koniunkcji(AND), alternatywy(OR) bądź też negacji(NOT).
if (x>=0) AND (x<1) THEN writeln('Ten przedzial jest zbyt maly!')
ELSE oblicz(x);
Oczywiście można używać kilku AND, OR i NOT w jednym warunku - zależy to np.: od stopnia złożonośCi algorytmu.