Instrukcja warunkowa i złoŝona. Budowa pętli warunkowej. JeŜeli mielibyśmy przetłumaczyć instrukcję warunkową to brzmiałoby to mniej więcej tak: jeŝeli warunek jest spełniony, to wykonaj jakąś operację w przeciwnym razie wykonaj inną operację. Przekładając to na angielski otrzymujemy postać instrukcji: lub if warunek then {blok instrukcji 1} else {blok instrukcji 2} if warunek then {blok instrukcji 1} Jest to skrócona wersja warunkowa, pomijająca alternatywną gałąź w przeciwnym razie. PowyŜsze konstrukcje rozpoczynają działanie od sprawdzenia wartości warunku, który musi być wyraŝeniem logicznym (tj. dawać w efekcie wartość True lub False). Jeśli warunek jest prawdziwy, wykonany jest blok instrukcji 1, a jeŝeli nie blok instrukcji 2 (w przypadku formy uproszczonej, jeŝeli warunek jest spełniony, wykonywany jest blok instrukcji 1, a jeŝeli nie, program przechodzi do kolejnych instrukcji programu). Przed słowem else nie moŝe być średnika!!! Jeszcze tylko takie małe przypomnienie co to jest blok instrukcji. W programach często zdarza się, Ŝe określoną grupę instrukcji trzeba wykonać jako całość. Do zaznaczenia ich odrębności słuŝą znane nam słowa kluczowe begin i end, oznaczające oczywiście początek i koniec.
begin instrukcja 1; instrukcja 2; instrukcja 3;. instrukcja n; end; ZauwaŜmy, Ŝe po słowie end na końcu bloku znajduje się średnik, a nie kropka, jak ma to miejsce na końcu programu. Spróbuje wyjaśnić to na przykładzie. ZałóŜmy, Ŝe chcemy stworzyć program, który będzie pytał uŝytkownika o jakąś liczbę. Program ma pokazywać, czy liczba, którą wprowadził uŝytkownik jest większa od stu, mniejsza lub równa. ZałóŜmy, Ŝe uŝytkownik wprowadza liczbę 230. Program ma napisać, Ŝe liczba jest większa od stu. Jak uŝytkownik wprowadzi np. liczbę 17, to program ma napisać, Ŝe liczba jest mniejsza od stu. No i wreszcie, jak uŝytkownik wprowadzi 100, program napisze, Ŝe liczba, którą wprowadził uŝytkownik jest równa 100. USES CRT; liczba:longint; writeln('wprowadź jakąś liczbę'); IF liczba=100 THEN writeln('podałeś liczbę równą 100'); Po słowie "IF" znajduje się zawsze warunek. W tym wypadku warunkiem jest przyrównanie liczby do stu. JeŜeli liczba jest równa 100, to program wykonuje to, co znajduje się po słowie "THEN". JeŜeli program stwierdzi, Ŝe nie jest to liczba 100, omija ten warunek całkowicie go ignorując. Teraz trzeba jeszcze przewidzieć dwa inne przypadki. Ktoś przecieŝ moŝe napisać liczbę mniejszą do sto albo większą. Cały program będzie więc wyglądał tak:
USES CRT; liczba:longint; writeln('wprowadź jakąś liczbę'); IF liczba=100 THEN writeln('podałeś liczbę równą 100'); IF liczba>100 THEN writeln('podałeś liczbę większą od 100'); IF liczba<100 THEN writeln('podałeś liczbę mniejszą od 100');> W ten prosty sposób rozwaŝyliśmy wszystkie moŝliwe przypadki. Logiczne jest Ŝe zawsze wystąpi jeden z tych trzech przypadków (bo kaŝda liczba jest albo równa 100 albo mniejsza albo większa - innej moŝliwości nie ma). Logiczne takŝe jest, Ŝe nie mogą się włączyć np. dwa warunki na raz. PrzecieŜ nie istnieje taka liczba, co by np. była jednocześnie większa od stu i mniejsza. Operatory uŝywane w instrukcjach warunkowych. Do uproszczenia sobie niektórych warunków będziemy uŝywać operatorów logicznych. Najczęściej spotykanymi są: OR - alternatywa - instrukcja się wykona, gdy co najmniej jeden z warunków jest spełniony ("lub"). AND - koniukcja - instrukcja się wykona, gdy wszystkie warunki są spełnione ("i"). NOT - negacja - zaprzeczenie warunku ("nie"). XOR - alternatywa wykluczająca - instrukcja się wykona tylko wtedy, gdy jeden z dwóch warunków jest spełniony ("albo").
Spotkamy się równieŝ z operatorami matematycznymi. Podstawowe zostały wymienione poniŝej: = równe > większe niŝ < mniejsze niŝ >= większe lub równe <= mniejsze lub równe <> róŝne Spróbujmy wytłumaczyć sobie teraz uŝywanie operatorów. ZałóŜmy, Ŝe uŝytkownik ma wprowadzić liczbę od 1 do 10. Program ma pokazać, czy liczba, którą wprowadził uŝytkownik jest parzysta czy nie. Parzyste liczby z tego przedziału to 2, 4, 6, 8 i 10. Nieparzyste to: 1, 3, 5, 7, 9. Gdybyśmy liczyli na piechotę, program wyglądałby tak: USES CRT; liczba:longint writeln('wprowadź jakąś liczbę od 1 do 10'); IF liczba=2 THEN writeln('wprowadziłeś liczbę parzystą'); IF liczba=4 THEN writeln('wprowadziłeś liczbę parzystą'); IF liczba=6 THEN writeln('wprowadziłeś liczbę parzystą'); IF liczba=8 THEN writeln('wprowadziłeś liczbę parzystą'); IF liczba=10 THEN writeln('wprowadziłeś liczbę parzystą'); IF liczba=1 THEN writeln('wprowadziłeś liczbę nieparzystą'); IF liczba=3 THEN writeln('wprowadziłeś liczbę nieparzystą'); IF liczba=5 THEN writeln('wprowadziłeś liczbę nieparzystą'); IF liczba=7 THEN writeln('wprowadziłeś liczbę nieparzystą'); IF liczba=9 THEN writeln('wprowadziłeś liczbę nieparzystą');
Trochę kosmicznie to wygląda, ale jest zrozumiałe. Program moŝna by skrócić za pomocą operatora "OR" (alternatywa). Odpowiada polskiemu wyrazowi "lub". Doskonale nadaje się do tego programu. Spójrz na poniŝszy kod: USES CRT; liczba:longint writeln('wprowadź jakąś liczbę od 1 do 10'); IF (liczba=2) OR (liczba=4) OR (liczba=6) OR (liczba=8) OR (liczba=10) THEN writeln('wprowadziłeś liczbę parzystą'); IF (liczba=1) OR (liczba=3) OR (liczba=5) OR (liczba=7) OR (liczba=9) THEN writeln('wprowadziłeś liczbę nieparzystą'); Program poprzedni miał taką formę:, "jeŝeli liczba=2 to..., jeŝeli liczba=4 to..., jeŝeli liczba=6 to..." i tak dalej. Takiej formy się nie stosuje (jest poprawna, ale niewygodna). Program z operatorem ma taką postać:, "jeŝeli liczba=2 lub liczba=4 lub liczb=6 lub liczba=8 lub liczba=10 to..." Chyba kaŝdy widzi, Ŝe stosowanie operatorów jest łatwe. Pamiętać trzeba jeszcze, Ŝe jeŝeli stosujemy jakikolwiek operator, to warunki muszą być w NAWIASACH. Doskonale to widać na powyŝszym programie. To był operator alternatywy ("OR"). Teraz czas poznać operator koniunkcji ("AND"). W powyŝszym programie napis się wyświetlał, gdy co najmniej jeden z warunków został spełniony. Gdybyśmy zastosowali tam "AND", kaŝdy warunek musiałby być spełniony. Odpowiada to polskiemu wyrazowi "i". Wszystko się zaraz wyjaśni na podstawie programu. ZałóŜmy, Ŝe chcemy zrobić program, który sprawdza, czy liczba, którą wprowadził uŝytkownik jest między 5 a 10. JeŜeli tak, to ukaŝe się napis. JeŜeli nie - program się wyłączy. Zatem:
USES CRT; liczba:longint writeln('wprowadź jakąś liczbę'); IF (liczba>5) AND (liczba<10) THEN writeln('liczba ta jest w przedziale od 5 do 10');> IF (liczba>=10) OR (liczba<=5) THEN halt; Program ten wyłączy się, gdy liczba będzie większa lub równa 10 lub mniejsza/równa 5. JeŜeli jest mniejsza od dziesięciu i jednocześnie większa od 5, napis się ukaŝe. Poznałeś, zatem juŝ 2 operatory (były one najwaŝniejsze). W pascalu pisanie warunków w nawiasach nie jest obowiązkowe (chyba, Ŝe między warunkami stosujemy operatory). JeŜeli napiszemy warunek w nawiasie nie będzie to błędem (nawiasy nie szkodzą), natomiast mogą poprawić czytelność programu. Na koniec moŝna wspomnieć, Ŝe w języku C ujęcie warunku w nawiasy jest obowiązkowe, tak więc przyzwyczajenie się do nich w Pascalu moŝe nam ułatwić Ŝycie w przyszłości. ZADANIA DO WYONANIA: Zadanie 1. Napisz program który sprawdza, która z podanych 2 liczb przez uŝytkownika jest najmniejsza. Zadanie 2. Napisz program który obliczy pole prostokąta. Zastosuj w programie warunek sprawdzający długość boku prostokąta. Zadanie 3. Napisz program znajdujący rozwiązanie równania Ax+b=c. Zrób w nim załoŝenie, Ŝe A nie moŝe być równe zero. Zadanie 4. Napisz program, który sprawdza czy podana liczba jest liczba parzystą.
Zadanie 5. Napisz program, który osobie znającej hasło poda tajną informację, a w przypadku wpisania błędnego hasła informację o odmowie dostępu.