Instrukcja warunkowa (IF-THEN-ELSE)
Instrukcja warunkowa IF
(jeżeli), jest bardzo często wykorzystywana przez programistów. Dzięki temu elementowi języka Pascal, możemy na przykład dorobić zabezpieczenie w naszym poprzednim programie, które uniemożliwi dzielenie przez 0
, a to tylko jedno z możliwych zastosowań.
Ogólna składnia instrukcji warunkowej IF
wygląda tak (wersja skrócona):
IF (warunek) THEN instrukcja-1;
Oraz druga wersja (dłuższa):
IF (warunek) THEN instrukcja-1 ELSE instrukcja-2; {UWAGA! - po instrukcji-1 nie ma średnika, ponieważ to nie jest koniec IF'a}
Zasada działania powyższego kodu jest bardzo prosta. „Instrukcja-1
” zostanie wykonana tylko w tedy kiedy podany warunek zwróci true (tzn. będzie prawdziwy np. 2 > 1
). Natomiast w drugiej wersji (dłuższej), jest taka różnica, że w wypadku, gdy podany warunek zwróci false
(tzn. będzie nieprawdziwy np. 2 < 1
), to zostanie wykonana „Instrukcja-2
„.
IF (2 > 1) THEN wykonaj jeżeli prawda;
IF (2 > 1) THEN wykonaj jeżeli prawda ELSE wykonaj jeżeli fałsz;
Jeżeli kod po słowie THEN
lub ELSE
, będzie zawierał kilka funkcji tzn. będzie bardziej złożony należy go wtedy zamknąć w tzw. klamry (BEGIN
i END;
):
IF (1 > 0) THEN BEGIN instrukcja-1; instrukcja-2; END {UWAGA! - TU NIE MA ŚREDNIKA PONIEWAŻ TO NIE JEST KONIEC INSTRUKCJI IF} ELSE BEGIN instrukcja-3; instrukcja-4; END; {UWAGA! - TUTAJ JEST ŚREDNIK PONIEWAŻ ZAKOŃCZYŁA SIĘ INSTRUKCJA IF}
Wróćmy teraz do naszego programu, który dzieli liczby:
program kalkulator; uses crt; var liczba1,liczba2,wynikDodawania,wynikOdejmowania,wynikDzielenia,wynikMnozenia:integer; begin ClrScr; {czyścimy ekran} write('Podaj pierwszą liczbę: '); readln(liczba1); write('Podaj drugą liczbę: '); readln(liczba2); wynikDodawania := liczba1 + liczba2; { dodawanie } wynikOdejmowania := liczba1 - liczba2; { odejmowanie } wynikDzielenia := liczba1 / liczba2; { dzielenie - pamiętaj, że nie można dzielić przez 0! } wynikMnozenia := liczba1 * liczba2; { mnożenie } writeln('Wynik dodawania: ', wynikDodawania); writeln('Wynik odejmowania: ', wynikOdejmowania); writeln('Wynik dzielenia: ', wynikDzielenia); write('Wynik mnożenia: ', wynikMnozenia); repeat until keyPressed; {oczekujemy na wciśnięcie przycisku} end.
Musimy w nim zastosować instrukcję warunkową, która sprawdzi czy zmienna – „liczba2
„, która jest dzielnikiem jest różna od 0
.
program kalkulator; uses crt; var liczba1,liczba2,wynikDodawania,wynikOdejmowania,wynikDzielenia,wynikMnozenia:integer; begin ClrScr; {czyścimy ekran} write('Podaj pierwszą liczbę: '); readln(liczba1); write('Podaj drugą liczbę: '); readln(liczba2); wynikDodawania := liczba1 + liczba2; { dodawanie } wynikOdejmowania := liczba1 - liczba2; { odejmowanie } {INSTRUKCJA IF} if (liczba2 <> 0) THEN {sprawdzamy czy dzielnik jest różny od 0} wynikDzielenia := liczba1 / liczba2 {UWAGA! - tu nie ma średnika bo to nie jest koniec instrukcji IF} ELSE wynikDzielenia := 'Nie można dzielić przez 0!'); {koniec IF} {KONIEC IF'a} wynikMnozenia := liczba1 * liczba2; { mnożenie } writeln('Wynik dodawania: ', wynikDodawania); writeln('Wynik odejmowania: ', wynikOdejmowania); writeln('Wynik dzielenia: ', wynikDzielenia); write('Wynik mnożenia: ', wynikMnozenia); repeat until keyPressed; {oczekujemy na wciśnięcie przycisku} end.
Teraz po wprowadzeniu drobnych modyfikacji, program został zabezpieczony przed dzieleniem przez 0
.
Instrukcję warunkową IF
jak każdą inną funkcję można również zagnieżdżać:
if warunek-1 then instrukcja-1 {pamiętaj o...} else {...braku średnika!} if warunek-2 then {...oraz wcięciach} instrukcja-2 {a to już tyczy się drugiego IF'a} else {itd........}