8266


PEŁNY KURS TURBO PASCALA - część V
instrukcja warunkowa IF..THEN..ELSE oraz operatory

Mam nadzieję, że ukończyłeś już lekturę wszystkich poprzednich części kursu zanim zabrałeś się za bieżący. Wkraczamy, bowiem w coraz to bardziej trudne progi i niestety twoja koncentracja będzie musiała się bardziej wysilić. Ale dosyć już tego klepania, czas zaczynać. Załóżmy, że chcemy stworzyć program, który będzie pytał użytkownika o jakąś liczbę. Jest to oczywiście dla ciebie bułka z masłem, ale spróbujmy ten program rozbudować. 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. Do tych zadań użyjemy jeszcze ci nieznanej instrukcji warunkowej. Zanim jednak się nią zajmiemy, napiszmy część programu, który może wyglądać tak:

0x01 graphic

USES CRT;

VAR
liczba:longint;

BEGIN
clrscr;
writeln('Wprowadź jakąś liczbę');
read(liczba);
END.

0x01 graphic

Powyższy program nie powinien was dziwić - powinniście już go rozumieć. Teraz trzeba coś zrobić, aby program wykonał jedną z trzech opcji. Ma napisać, że liczba jest większa od stu albo mniejsza od stu albo równa. No to zaczynajmy. Zajmijmy się najpierw przypadkiem, gdzie liczba jest równa 100. Program będzie więc wyglądał tak:

0x01 graphic

USES CRT;

VAR
liczba:longint;

BEGIN
clrscr;
writeln('Wprowadź jakąś liczbę');
read(liczba);
IF liczba=100 THEN writeln('Podałeś liczbę równą 100');
readln;
END.

0x01 graphic

A teraz wyjaśnienie. 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. Rozumiecie? 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:

0x01 graphic

USES CRT;

VAR
liczba:longint;

BEGIN
clrscr;
writeln('Wprowadź jakąś liczbę');
read(liczba);
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');
readln;
END.

0x01 graphic

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. Mam nadzieję, że to rozumiecie. Jak dotąd poznaliście trzy podstawowe operatory (równe, większe i mniejsze). Wszystkie podstawowe zebrane są poniżej:

= równe
> większe niż
< mniejsze niż
>= większe lub równe
<= mniejsze lub równe
<> różne

I wszystko jasne. A teraz kolej na następny „kwiatek” w TURBO PASCALU. Załóżmy, że chcemy zrobić instrukcję warunkową, co by sprawdzała, czy liczba, którą podał użytkownik równa jest 1000. Inne przypadki nas nie interesują, i gdy liczba nie jest równa tysiąc, następuje koniec programu. Można to zrobić metodą znaną, czyli tak:

0x01 graphic

USES CRT;

VAR
liczba:longint;

BEGIN
clrscr;
writeln('Wprowadź jakąś liczbę');
read(liczba);
IF liczba=1000 THEN writeln('Brawo!
Podałeś liczbę tysiąc!');
IF liczba>1000 THEN halt;
IF
liczba<1000 THEN halt;
readln;
END.

0x01 graphic

Widzimy bardzo prosty program, który zaraz się kończy, gdy liczba, którą wprowadził użytkownik nie jest równa 1000. Są tam zastosowane dwie dodatkowe instrukcje,(gdy jest większa od 1000 lub mniejsza). Można to zrobić jeszcze inaczej:

0x01 graphic

USES CRT;

VAR
liczba:longint;

BEGIN
clrscr;
writeln('Wprowadź jakąś liczbę');
read(liczba);
IF liczba=1000 THEN writeln('Brawo!
Podałeś liczbę tysiąc!');
IF liczba<>1000 THEN halt;
readln;
END.

0x01 graphic

Teraz program sprawdza, czy liczba jest różna od tysiąc a nie czy jest większa czy mniejsza. W sumie na jedno wychodzi, ale kod programu mniej zajmuje. Teraz poznasz trzeci sposób na wykonanie takiego programu. Służy do tego polecenie, „ELSE”, który patrzy, czy użytkownik wprowadził inną liczbą niż przewidzianą. Spójrzcie na poniższy program:

0x01 graphic

USES CRT;

VAR
liczba:longint;

BEGIN
clrscr;
writeln('Wprowadź jakąś liczbę');
read(liczba);
IF liczba=1000 THEN writeln('Brawo! Podałeś liczbę tysiąc!')
ELSE halt;
readln;
END.

0x01 graphic

Polecenie ELSE zadziała, jeżeli użytkownik wprowadził liczbę, która nie była przewidziana przez wcześniejsze polecenie lub polecenia „IF”. Zwróćcie uwagę na bardzo ważny szczegół. PRZED POLECENIEM ELSE NIE MA ŚREDNIKA. Jest to bardzo ważne i nawet dobrzy programiści o tym czasami zapominają. Zastosowanie „ELSE” lepiej ukazuje ten program:

0x01 graphic

USES CRT;

VAR
liczba:longint;

BEGIN
clrscr;
writeln('Wprowadź jakąś liczbę od 1 do 5');
read(liczba);
IF liczba=1 THEN writeln('Brawo! Podałeś liczbę 1');
IF liczba=2 THEN writeln('Brawo! Podałeś liczbę 2');
IF liczba=3 THEN writeln('Brawo! Podałeś liczbę 3')
ELSE writeln('Na pewno nie podałeś liczby 1, 2 lub 3');
readln;
END.

0x01 graphic

Przypominam jeszcze raz na brak średnika przed „ELSE” co doskonale ukazuje powyższy program. Teraz, gdy już znasz instrukcję warunkową, można przejść do bardziej skomplikowanych poleceń. Załóżmy, że program ma pytać użytkownika o dwie liczby. Najpierw program każe podać pierwszą liczbę. Potem program każe podać liczbę, która podzielona przez dwa daje liczbę pierwszą (czyli pierwsza liczba pomnożona przez dwa daje liczbę drugą). Będzie to takie zadanie dla użytkownika. Do tego musimy zastosować trochę bardziej skomplikowane obliczenia. Może tym razem od razu pokaże wam jak będzie wyglądał cały program (wierze w waszą inteligencję).

0x01 graphic

USES CRT;

VAR
liczba1,liczba2:longint;

BEGIN
clrscr;
writeln('Wprowadź jakąś liczbę');
read(liczba1);
writeln('A teraz podaj ile to jest: pierwsza liczba pomnożona przez dwa?');
read(liczba2);
IF liczba1*2=liczba2 THEN writeln('Brawo! Umiesz mnożyć!!!');
IF liczba1*2<>liczba2 THEN writeln('Co ty? Mnożyć nie umiesz?');
readln;
END.

0x01 graphic

W programie tym zastosowaliśmy trochę matematyki. Program sprawdza, czy pierwsza liczba pomnożona przez dwa równa się liczbie drugiej. Jeżeli tak to program wypisuje odpowiedni tekst. Jeżeli nie to ochrzania użytkownika o nieumiejętność mnożenia. Niezłe co nie?

Przyszła kolej na następną ważną rzecz. Jak pewnie zauważyłeś, wszystkie poprzednie programy z instrukcją warunkową wykorzystywały tylko jedno polecenie po słówku „THEN”. A co jeśli trzeba wykonać kilka rzeczy, jeżeli dany warunek zostanie spełniony. Niech na przykład użytkownik wprowadzi jakąś liczbę. Program ma się wyłączyć, jeżeli ta liczba jest większa od 50. Jeżeli liczba jest mniejsza, to program ma napisać coś i zagrać melodię. Widzimy, że program wykonać ma dwa polecenie. Nie można tego zrobić tak:

0x01 graphic

USES CRT;

VAR
liczba:longint;

BEGIN
clrscr;
writeln('Wprowadź jakąś liczbę');
read(liczba);
IF liczba>50 THEN halt;
IF liczba<=50 THEN writeln
('Brawo! Liczba jest mniejsza lub równa 50');
sound(2200);
delay(3000);
readln;
END.

0x01 graphic

Jeżeli program ma grać, gdy liczba jest mniejsza lub równa 50, to powyższy program jest BŁĘDNY. Program nie wie, czy polecenie „SOUND” i następne należą do instrukcji warunkowej, czy są po prostu dalej. Prawidłowy program wyglądać będzie tak:

0x01 graphic

USES CRT;

VAR
liczba:longint;

BEGIN
clrscr;
writeln('Wprowadź jakąś liczbę');
read(liczba);
IF liczba>50 THEN halt;
IF liczba<=50 THEN
BEGIN
writeln('Brawo!
Liczba jest mniejsza lub równa 50');
sound(2200);
delay(3000);
END;
readln;
END.

0x01 graphic

W w/w programie, polecenia, które mają być wykonane gdy warunek zostanie spełniony są objęte w dodatkowe bloki, czyli między słówka „BEGIN” i „END;” (koniecznie END ze średnikiem). Przy bardziej skomplikowanych poleceniach trzeba uważać by się nie pogubić w tych wszystkich słówkach. Trzeba pamiętać, że każde „BEGIN” trzeba zamknąć „END”. Zatem ilość słówek „BEGIN” jest równa ilości słówek „END”. Widzicie, jakie to proste. Żeby jeszcze wam ułatwić sprawę, pokaże wam coś takiego jak wcięcia. Nie są to żadne polecenia, a sposób pisania programu, aby się w nim nie pogubić. Porównajcie powyższy program z poniższym.

0x01 graphic

USES CRT;

VAR
  liczba:longint;

BEGIN
  clrscr;
  writeln('Wprowadź jakąś liczbę');
  read(liczba);
  IF liczba>50 THEN halt;
  IF liczba<=50 THEN
    BEGIN
    writeln('Brawo!
Liczba jest mniejsza lub równa 50');
    sound(2200);
    delay(3000);
    END;
  readln;
END.

0x01 graphic

Osobiście radzę stosować wcięcia, gdyż nie macie nawet pojęcia jak może to ułatwić tworzenie programu.

Kiedy już przebrnęliśmy przez podstawowe wieści, czas wreszcie zająć się „prawdziwymi” operatorami. Służą one do grupowania warunkó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:

0x01 graphic

USES CRT;

VAR
liczba:longint

BEGIN
clrscr;
writeln('Wprowadź jakąś liczbę od 1 do 10');
read(liczba);
IF liczba=2 THEN writeln('Wprowdziłeś liczbę pażystą');
IF liczba=4 THEN writeln('Wprowdziłeś liczbę pażystą');
IF liczba=6 THEN writeln('Wprowdziłeś liczbę pażystą');
IF liczba=8 THEN writeln('Wprowdziłeś liczbę pażystą');
IF liczba=10 THEN writeln('Wprowdziłeś liczbę pażystą');
IF liczba=1 THEN writeln('Wprowdziłeś liczbę niepażystą');
IF liczba=3 THEN writeln('Wprowdziłeś liczbę niepażystą');
IF liczba=5 THEN writeln('Wprowdziłeś liczbę niepażystą');
IF liczba=7 THEN writeln('Wprowdziłeś liczbę niepażystą');
IF liczba=9 THEN writeln('Wprowdziłeś liczbę niepażystą');
readln;
END.

0x01 graphic

Trochę kosmicznie to wygląda, ale jest zrozumiałe. Program można by skrócić za pomocą operatorów. Pierwszym, jaki poznasz jest operator „OR” (alternatywa). Odpowiada polskiemu wyrazowi „lub”. Doskonale nadaje się do tego programu. Spójrz na poniższy kod:

0x01 graphic

USES CRT;

VAR
liczba:longint

BEGIN
clrscr;
writeln('Wprowadź jakąś liczbę od 1 do 10');
read(liczba);
IF (liczba=2) OR (liczba=4) OR (liczba=6) OR (liczba=8) OR (liczba=10) THEN writeln('Wprowdziłeś liczbę pażystą');
IF (liczba=1) OR (liczba=3) OR (liczba=5) OR (liczba=7) OR (liczba=9) THEN writeln('Wprowdziłeś liczbę niepażystą');
readln;
END.

0x01 graphic

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:

0x01 graphic

USES CRT;

VAR
liczba:longint

BEGIN
clrscr;
writeln('Wprowadź jakąś liczbę');
read(liczba);
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;
readln;
END.

0x01 graphic

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).

Zajmijmy się teraz operatorem „NOT”. Jest to logiczne zaprzeczenie, czyli negacja. Nie jest on zbyt szeroko stosowany w programach, mimo to warto zwrócić na niego uwagę. Operator „NOT” po prostu neguje warunek. Pokaże wam to na przykładzie.

0x01 graphic

IF liczba<>10 THEN writeln('Liczba ta na pewno nie jest równa 10');

0x01 graphic

Powyższy program bada, czy liczba jest różna od 10. Jeżeli tak, to napis się ukaże. To samo można zrobic za pomocą operatora "NOT" w następujący sposób:

0x01 graphic

IF NOT liczba=10 THEN writeln('Liczba ta na pewno nie jest równa 10');

0x01 graphic

Czyli jeżeli liczba NIE równa się 10, to… itd. Mam nadzieję, że jest to zrozumiałe. Do opisania został jeszcze jeden operator, tzw. XOR, czyli alternatywa wykluczająca. Nie musicie się go uczyć, gdyż bardzo rzadko się go stosuje, ale jeśli ktoś czuje się na siłach, zaczynajmy. Operator XOR odpowiada wyrazowi „albo” (nie mylić z „lub”). Cała instrukcja zostaje spełniona, gdy jedno z dwóch warunków jest spełnione. Natomiast, gdy oba warunki są spełnione lub niespełnione - instrukcja się nie wykonuje (albo to albo to). To był właśnie operator XOR. Omówimy go jeszcze za moment. Teraz pokaże wam, jak można „sortować” operatory, tzn. nadawać im priorytety. Wystarczy użyć zwykłych nawiasów. Jeżeli chcemy wszystko objąć w jeszcze jeden nawias, śmiało go dajemy (zwykły, a nie żaden kwadratowy - taki, w jaki objęty jest ten tekst). Przykład zastosowania nawiasów znajduje się poniżej:

0x01 graphic

IF ((liczba1=10) AND (liczba2=20)) OR ((liczba1=5) AND (liczba2=15)) THEN "coś tam"...

0x01 graphic

W powyższym fragmencie instrukcja po słowie “THEN” zostanie spełnione w dwóch przypadkach.

  1. Gdy liczba1=10 i liczba2=20

  2. Gdy liczba1=5 i liczba2=15

Rozumiecie? Jak tak to dobrze.

To teraz jeszcze pokaże wam, jak działa XOR. Oba poniższe warunki znaczą to samo (tego rozumieć nie musicie, ale dobrze by było gdybyście chociaż zerknęli).

0x01 graphic

IF liczba1=10 XOR liczba2=20 THEN "coś tam"...



IF ((liczba1=10) AND (liczba2<>20)) OR ((liczba1<>10) AND (liczba2=20)) THEN "coś tam"...

0x01 graphic

To był właśnie przykład na “XOR” (wcale nie musieliście tego zrozumieć).

Dla podsumowania, przypomnijmy sobie wszystkie operatory.

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").

W ten prosty sposób skończyliśmy piątą lekcję. Zapraszam do części szóstej.

9



Wyszukiwarka

Podobne podstrony:
8266
8266
8266
8266
8266
8266
8266
8266

więcej podobnych podstron