INSTRUKCJA WARUNKOWA
Niestety, nie zawsze da się skonstruować programu w prosty sposób - instrukcja po instrukcji, jak w dotychczasowych programach. Mogą one być bardziej złożone. Na przykład: Jeśli współrzędna X będzie większa niż 100 to zmień kolor rysowania na niebieski albo jeśli współrzędna X jest mniejsza od 100 dodaj do zmiennej X 1(jeden) w przeciwnym wypadku wyzeruj zmienną X. Polecenia te mają swoje odpowiedniki w Pascalu.
IF warunek
THEN instrukcja
IF
x
< 640 THEN x:=x+1;
Jeśli warunek jest prawdziwy, to wykonaj instrukcję
IF
warunek THEN instrukcja1 ELSE
instrukcja2
IF x <
640 THEN x:=x+1 ELSE
x:=0;
Jeśli warunek jest prawdziwy, to wykonaj instrukcję pierwszą, w przeciwnym wypadku - wykonaj instrukcję drugą (gdy warunek jest fałszywy). W pierwszym przypadku ignorowana jest instrukcja druga (warunek prawdziwy), w drugim - ignorowana instrukcja pierwsza (warunek fałszywy).
Instrukcja wyboru
Jeśli
chcemy sprawdzić po kolei kilka warunków i wybrać z nich jeden właściwy można
posługiwać się kilkoma instrukcjami warunkowymi w prostym lub złożonym układzie,
wygodniej jest jednak użyć instrukcji złożonej
CASE
zmienna OF
wartość1: instrukcja;
wartość2: instrukcja;
...
ELSE instrukcja
END;
Porównujemy zmienną z kolejnymi wartościami. Jeśli jest taka sama, to wykonywana jest instrukcja przy tej wartości. Można w instrukcji CASE dołożyć część z ELSE - gdyby żadna z wartości nie była równa zmiennej, wykonana zostałaby instrukcja po słowie ELSE.
CASE rodzaj OF 1:line(100,100,300,100); 2:line(100,100,100,300); 3:line(100,100,300,300); 4:line(100,300,300,100); 5:line(100,100,100,100); else line(100,200,300,400); END;
Operatory relacji i logiczne
Podczas operacji logicznych porównujemy ze sobą dwie wartości (tego samego typu). Mogą to być np. liczby albo też informacje zawarte w zmiennych. Warunki logiczne przyjmują zawsze jedną z dwóch wartości PRAWDA lub FAŁSZ. Podczas operacji arytmetycznych posługujemy się operatorami dodawania, odejmowania itd., tak i podczas operacji logicznych mamy operatory relacji.
2=2 prawda 2<3 prawda 2<=3 prawda
2<>2 fałsz 2>3 fałsz 2>=2 prawda
Pojedyncze wyrażenia logiczne można łączyć za pomocą operatorów logicznych:
NOT
- negacja (jeśli a=b jest prawdziwe to NOT(a=b) jest fałszywe)
IF NOT(x<0) THEN
x:=x-1;
OR
- suma logiczna (wyrażenie (a=b) OR (c=d) będzie prawdziwe, jeśli
przynajmniej jedno z wyrażeń składowych będzie prawdziwe)
IF (x>0) OR (x<640) THEN
x:=x+1;
AND
- iloczyn logiczny (wyrażenie (a=b) OR (c=d) będzie prawdziwe, jeśli będą
prawdziwe oba wyrażenia składowe).
IF (y=0) AND (x<640) THEN y:=480;
Typy stałych i zmiennych (proste)
Typy
liczbowe całkowite
BYTE - liczby całkowite 0..255 (1 bajt)
INTEGER - liczby całkowite -32768..32767 (2 bajty)
LONGINT- liczby całkowite +- ~2 mld (4 bajty)
Typ
liczbowy rzeczywisty (6 bajtów)
REAL - dowolne liczby rzeczywiste przedstawione jako ułamek dziesiętny (5.347) lub w postaci wykładniczej (1.2E+3 czyli 1.2*103 czyli 1200)
Typ napisowy (tyle bajtów ile znaków w tekście)
STRING - teksty do 255 znaków w apostrofach, np. ‘Ala ma kota’, ‘a’, ‘’ - pusty
Typ znakowy (1 bajt)
CHAR - pojedyncze znaki ujęte w apostrofy, np.: ‘a’, ‘A’, ‘1’ (to nie to samo co 1)
Typ logiczny (1 bajt)
BOOLEAN - zmienne przyjmują wartość prawdy TRUE (1) lub fałszu FALSE (0)
GRAF13.PAS - kwadrat odbija się od ścian pionowych
program grafika13;
uses crt,graph;
var
d,m:integer;
dx,x,y,b,k:integer;
procedure Kwadrat(x,y,bok,kolor:integer);
begin
SetColor(kolor);
MoveTo(x,y);
LineRel(0,bok);
LineRel(bok,0);
LineRel(0,-bok);
LineRel(-bok,0);
end;
begin
d:=detect;
initgraph(d,m,'');
readln;
x:=1;
y:=100;
b:=60;
k:=12;
dx:=1; {o ile zmienia się współrzędna X}
repeat
Kwadrat(x,y,b,k);
delay(5);
Kwadrat(x,y,b,0);
{nowe położenie kwadratu zależy od zmiennej DX}
x:=x+dx;
{jeśli kwadrat dotrze do prawego brzegu zmieniamy kierunek ruchu}
if x > (640-b) then dx:=-dx;
{jeśli kwadrat dotrze do lewego brzegu zmieniamy kierunek ruchu}
if x < 0 then dx:=-dx;
until keypressed;
readln;
repeat
Kwadrat(x,y,b,k);
delay(5);
Kwadrat(x,y,b,0);
x:=x+dx;
{jednocześnie sprawdzamy warunek dotarcia do prawego i lewego brzegu}
if (x > (640-b)) or (x < 0) then dx:=-dx;
until keypressed;
closegraph;
end.
To samo zadanie można zrealizować stosując operatory logiczne. Jednocześnie sprawdzamy odbicia od prawego i lewego brzegu, od dolnego i górnego brzegu
repeat
Kwadrat(x,y,bok,kolor);
delay(5);
Kwadrat(x,y,bok,0);
x:=x+dx;
y:=y+dy;
if (x > (640-bok)) or (x < 0) then dx:=-dx;
if (y > (480-bok)) or (y < 0) then dy:=-dy;
until keypressed;
Ćwiczenia
Zmień program grafika14 w ten sposób, aby kwadrat poruszał się nie po całym ekranie, ale w prostokącie, którego lewy górny róg znajduje się w punkcie 100,100 a prawy dolny w punkcie 500,400.
Zmień program grafika14 tak, aby po każdym odbiciu od ściany kwadrat zmieniał kolor na inny, może być losowo wybrany.
Zmień program tak, aby po ekranie poruszał się prostokąt, trójkąt, twoje inicjały.