Wykład XI
Object Pascal - Instrukcje
sterujące
Podstawy informatyki
Semestr II Transport
Semestr II Elektrotechnika
2
O czym będzie?
Jak
korzystać
z
obiektów
Instrukcje proste
– Instrukcja
przypisania
– Instrukcja skoku
– Instrukcja pusta
Instrukcje
strukturalne
– Instrukcja złożona
– Instrukcje warunkowe
– Instrukcja wyboru
– Instrukcje iteracyjne
(pętle)
– Instrukcja wiążąca
– Instrukcje do obsługi
sytuacji wyjątkowych
3
Obiekty
Dla
Object
Pascala
obiekty
(opowiemy o nich dużo bardziej
szczegółowo na dalszych wykładach)
są elementami aplikacji np. okna,
formularze, przyciski, pola wyboru, ...
UWAGA!!! Obiekty mogą się składać
z innych obiektów
4
Cechy obiektów
Mają unikalne nazwy lub ewentualnie
numery np. formularz, form1, Edit;
Właściwości – opisują stan obiektu np.
Name;
Metody – wykonują operacje np. wypisz(),
kliknij();
Zdarzenia – czynności podejmowane w
reakcji na zachowanie użytkownika np.
OnMouseOver(), OnClick().
5
Nazwa
podobiek
tu
Nazwa
właściwoś
ci
Nazwa
obiektu
Odwoływanie do
właściwości obiektów
Stosuje się notację kropkową.
formularz.obrazek.nazwa
kot.łapy.przednie.lewa
komputer.napęd.stacjadysków
Form1.Caption
6
jeśli metoda ma
parametry – lista
wartości parametrów
Odwoływanie do metod
obiektów
kot.mrucz
dokument.wypisz(‘Tekst do wypisania)
formularz.elementy.przyciskopcji.kliknij
Form1.Show;
Edit1.Create(Form1);
Nazwa
obiektu
Nazwa
metod
y
7
Instrukcja przypisania do
zmiennej
Powoduje obliczenie wyrażenia prawostronnego i
umieszczenie wartości w zmiennej z lewej strony
Ogólna postać instrukcji przypisania
zmienna:=wyrażenie;
Przykłady
a:=1;
war_log:=TRUE;
Tekst:=’Object’+’Pascal’;
x:=x+1;
warunek:=a=b;
b:=2*c-d/(e+f);
8
Instrukcja przypisania wartości
funkcji
Występuje w części operacyjnej funkcji
(patrz temat funkcje i procedury)
Powoduje
obliczenie
wyrażenia
prawostronnego
i zwrócenie obliczonej wartości jako
wyniku działania funkcji
Składnia
nazwa_funkcji:=wyrażenie
9
Instrukcja skoku
Powoduje
natychmiastowe
przekazanie sterowania do instrukcji
programu
poprzedzonej
daną
etykietą
Składnia
goto Etykieta;
10
Schemat użycia instrukcji
skoku
program Skoki;
label et;
...
begin
...
goto et;
...
et: x:=a+b;
...
end.
11
Instrukcja pusta
Instrukcja pusta nie wymaga użycia
żadnego symbolu języka i nie powoduje
wykonania żadnych czynności.
Stosuje się ją tam gdzie wymagane jest
użycie instrukcji, ale chce się uniknąć
wykonania jakichkolwiek czynności
12
Instrukcja złożona
Ciąg
instrukcji
poprzedzony
słowem
kluczowym begin i zakończonych słowem
kluczowym end.
Instrukcja tworzy z ciągu instrukcji jedną
instrukcję.
Jest używana w przypadkach, gdy składnia
języka wymaga użycia tylko jednej instrukcji,
a wymagane jest wykonanie wielu instrukcji.
Instrukcje wchodzące w skład instrukcji
złożonej wykonywane są sekwencyjnie.
13
Instrukcji złożona cd.
Składnia
begin
instrukcja-1;
instrukcja-2;
...
instrukcja-n;
end
Przykład
begin
a:-=1;
b:=2;
c:=sin(a+b)*2;
end
14
Postać ogólna instrukcji if
(Jeśli)
if wyrażenie then instrukcja1
else instrukcja2;
warunek
instrukcja1
instrukcja2
tak
nie
15
Postać ogólna instrukcji if
(Jeśli) 2
if wyrażenie then instrukcja;
warunek
instrukcja
tak
nie
16
Stosowanie instrukcji
warunkowej
wartością wyrażenia powinna być wartość
logiczna TRUE lub FALSE
Instrukcja występująca po słowach then i else
może być dowolną instrukcją prostą lub
strukturalną
Jeśli wartością wyrażenia jest TRUE wykonywana
jest instrukcja po słowie then
W przeciwnym przypadku wykonana będzie
następna instrukcja po instrukcji warunkowej (w
wersji gdy brak części else) lub instrukcja
podana po słowie else
17
Wyrażenia logiczne
Dowolne wyrażenie, które w rezultacie
zwraca PRAWDĘ lub FAŁSZ
Można używać operatorów logicznych (or,
and,
not,
xor)
w
celu
łączenia
podwarunków
Przykłady
Delta>0
(Imie='Jan') and (Nazwisko='Kowalski')
(Key=’T’) or (Key)=’N’)
18
Przykład użycia instrukcji
warunkowej 1
if x<y then a:=0
else a:=1;
if x>=y then a:=1
else a:=0;
x<y
a:=1
a:=0
Następna instrukcja
w programie
Nie
Tak
19
Przykład użycia instrukcji
warunkowej 2
if a<0 then
if b<>0 then
x:=a/b;
if
(a<0)
and
(b<>0) then
x:=a/b;
a<0
x:=a/b
Nie
Tak
b<>0
Tak
Nie
20
Przykład użycia instrukcji
warunkowej 3
if a<0 then
if b<0 then x:=-a-b
else x:=-a+b-2
else
if b<>0 then x:=a/b-5
else x:=0;
21
Przykład użycia instrukcji
warunkowej 4
program IfDemo4;
{$APPTYPE CONSOLE}
var Wiek: Integer; S: String;
begin
InputQuery(‘Pytanie’,‘Ile masz lat ? ‘,S);
Wiek :=StrToInt(S);
if (Wiek < 1) or (Wiek > 130) then
ShowMessage('Chyba nie mówisz prawdy')
else
ShowMessage('Gdy się ma ‘+IntToStr(Wiek)+' lat,
życie jest piękne');
end.
22
Przykład użycia instrukcji
warunkowej 5 (tekstowa
aplikacja konsolowa)
program IfDemo4;
uses Dialogs;
var Wiek: Integer;
begin
Write(‘Pytanie’,‘Ile masz lat ? ‘,Wiek);
if (Wiek < 1) or (Wiek > 130) then
Write('Chyba nie mówisz prawdy')
else Write('Gdy się ma ‘+IntToStr(Wiek)+' lat,
życie jest piękne');
end.
23
Ogólna postać instrukcji
wyboru
Służy do wyboru między wieloma wariantami
case wyrażenie of
sekwencja-instrukcji wyboru
end
case wyrażenie of
sekwencja-instrukcji wyboru
else instrukcja
end
24
Składnia instrukcji wyboru
case Wyrażenie of
lista-stałych-1:
instrukcja1;
lista-stałych-2:
instrukcja2;
...
lista-stałych-n:
instrukcja-n;
else instrukcja;
end
case Wyrażenie of
lista-stałych-1:
instrukcja1;
lista-stałych-2:
instrukcja2;
...
lista-stałych-n:
instrukcja-n;
end
25
Stałe wyboru
pojedyncza wartość
stała
zakres wartości
stała1..stała2
Listy stałych wyboru
stała,
stała1..stała2
1
’a’
’A’..’Z’
1..12
1,3,5,6..13,24,26..30
’A’..’Z’,’0’..’9’,’c’
‘a’
1,3,5
26
Stosowanie instrukcji
wyboru
Sterowanie odbywa się przy pomocy wyrażenia zwanego
selektorem
Sekwencja instrukcji składa się z listy wartości (stałe
wyboru) i instrukcji oddzielonych znakiem dwukropka
Działanie instrukcji jest następujące
– obliczana jest wartość selektora
– wyszukiwana jest w sekwencji instrukcji taka, w której stała
poprzedzająca jest równa wartości selektora (jeśli instrukcja
zostanie odnaleziona to zostaje wykonana)
– jeśli żadna ze stałych nie jest równa wartości selektora to zostanie
wykonana instrukcja po słowie else (jeśli użyto klauzury else)
– sterowanie zostanie przekazane do następnej instrukcji w
programie
27
Przykład użycia instrukcji
wyboru 1
...
case WynikTestu of
100,99:ShowMessage('Ocena 5');
91..98: ShowMessage('Ocena 5-’);
85..90: ShowMessage(‘Ocena 4+');
71..84: ShowMessage(‘Ocena 4');
61..70: ShowMessage(‘Ocena 4-');
51..60: ShowMessage(‘Ocena 3');
45..50: ShowMessage(‘Ocena 3-');
else ShowMessage(‘Ocena 2');
end;
...
...
case DzienWTygodniu of
0: Label.Caption:= 'niedziela';
1:
Label.Caption:=
'poniedziałek';
2: Label.Caption:= 'wtorek';
3: Label.Caption:= ‘środa';
4: Label.Caption:= 'czwartek';
5: Label.Caption:= 'piątek';
6: Label.Caption:= 'sobota';
end;
...
28
Przykład użycia instrukcji
wyboru 2
...
var Znak: Char;
begin
Znak:=Edit1.Text[1];
Case Znak of
'a‘ : ShowMessage('Nacisnąłeś małe a');
’z’,’Z’
: ShowMessage('Małe z albo duże Z')
else ShowMessage('To nie jest a, z ani Z');
end;
end;
...
29
Przykład użycia instrukcji
wyboru 3
var rok: Integer; miesiac: Byte;
begin
rok:=StrToInt(edRok.Text);
miesiac:=StrToInt(edMiesiac.Text);
case miesiac of
1,3,5,7,8,10,12: ShowMessage('miesiac ma 31 dni');
4,6,9,11: ShowMessage('miesiac ma 30 dni');
2: if ((rok mod 4=0) and (rok mod 1000<>0)) or (rok
mod
400=0)
then
ShowMessage('miesiac ma 29 dni')
else ShowMessage('miesiac ma 28 dni');
else ShowMessage('niepoprawne dane');
end;
end;
30
Przykład użycia instrukcji
wyboru 4
...
case Key of
'A': PlaySound(PChar(‘Wave1.Wav’),0, SND_FILENAME+SND_ASYNC);
‘B':
PlaySound(PChar(‘Wave2.Wav’),0,
SND_FILENAME+SND_ASYNC);
‘C':
PlaySound(PChar(‘Wave3.Wav’),0,
SND_FILENAME+SND_ASYNC);
‘D':
PlaySound(PChar(‘Wave4.Wav’),0,
SND_FILENAME+SND_ASYNC);
‘E': PlaySound(PChar(‘Wave5.Wav’),0, SND_FILENAME+SND_ASYNC);
end;
...
31
Instrukcje iteracyjne
(pętle)
Służą
do
organizowania
cykli
programowych,
tj.
wielokrotnego
wykonywania sekwencji instrukcji.
instrukcja for (dla)
instrukcja while (dopóki)
instrukcja repeat until (powtarzaj)
32
Instrukcja for (dla)
Stosuje się zwykle w celu powtózenia grupy
instrukcji w przypadku gdy liczba powtórzeń jest
znana w danym miejscu programu
Składnia
for zmienna:=wyrażenie1 to wyrażenie2 do
instrukcja
lub
for zmienna:=wyrażenie1 downto wyrażenie2 do
instrukcja
33
Warunki poprawnego stosowania
instrukcji for
Zmienna sterująca musi być typu
porządkowego
Wartość wyrażenia1 i wyrażenia2 musi
być zgodna ze zmienną sterującą w
sensie przuypisania
Instrukcja występująca po słowie do
może być dowolną instrukcją prostą
lub strukturalną
34
Sposób wykonywania
instrukcji for
1. Obliczanie wartości wyrażenia1 i wyrażenia2
2. Wartość wyrażenia1 jest podstawiana pod instrukcję
sterującą
3. Porównanie (w sensie uporządkowania) zmiennej
sterującej z wartością wyrażenia2
4. Jeśli nie spełniono warunku zakończenia odliczania
- wykonanie instrukcji po słowie kluczowym do
- przypisanie zmiennej sterującej następnej (lub
porzedniej) w danym typie wartości
- powrót do punktu 3
5. Jeśli spełniono warunek zakończenia odliczania
- przekazanie sterowania do następnej instrukcji w
programie
35
Schemat działania pętli
for
instrukcja
z:=Succ(z) (to)
z:=Pred(z) (downto)
Z<=W2(to)
Z>=W2(downto)
Obliczenie
W1 i W2
Z:=W1
Zakończenie
instrukcji „for”
nie
ta
k
36
Przykład użycia pętli for 1
for i:=1 to 10 do
ShowMessage(’Instrukcje sterujące są pożyteczne’);
for i:=10 downto 1 do
ShowMessage(’Instrukcje sterujące są pożyteczne’);
for i:=3 to 12 do
ShowMessage(’Instrukcje sterujące są pożyteczne’);
37
Przykład użycia pętli for 2
...
suma:=0;
for i:=1 to 124 do suma :=suma+i;
...
...
suma:=0;
for i:=124 downto 1 do suma :=suma+i;
...
38
Przykład użycia pętli for 3
program PetlaFor;
uses Dialogs;
var i: char;
S:string;
begin
S:=‘’;
for i:='z' downto 'a' do
s:=s+i;
ShowMessage(S)
end.
program PetlaFor;
uses Dialogs;
var i: char; s: String;
begin
s:=‘’;
for i:='A' to 'Z' do
begin
S:=S+i;
MessageBeep($FFFF);
end;
end.
39
Przykład użycia pętli for 4
...
var i,j,k: Byte;
begin
j:=SpinEdit1.Value;
k:=SpinEdit2,Value;
if k<j then
begin i:=k; k:=j; j:=i; end;
for i:=j to k do ShowMessage('Instrukcje sterujące
można polubić');
end;
...
40
Przykład użycia pętli for 5
program silnia;
uses Dialogs;
var n, i:
Byte; Silnia: Longint; S;String;
begin
InputQuery(‘Pytanie’,‘Podaj
liczbę:
‘,S);
N:=StrToInt(S);
Silnia :=1;
for i :=1 to N do Silnia := Silnia * I;
ShowMessage(IntToStr(N)+‘! = ‘+IntToStr(Silnia));
end.
41
Instrukcja while (dopóki)
Służy do opisywania
iteracji
ze
sprawdzeniem
warunku na początku
Składnia
while wyrażenie do
Instrukcja
Czy
wyrażenie
prawdziwe
?
Zakończenie
instrukcji
Nie
Instrukcja
Tak
42
Uwagi dotyczące korzystania
instrukcji while
wyrażenie powinno zwracać wartość logiczną
instrukcja jest wykonywana dla wartości
wyrażenia TRUE i a pętla oddaje sterowanie
do następnej instrukcji dla wartości FALSE
wartość wyrażenie powinna się zmieniać w
trakcie wykonywania instrukcji w przeciwnym
bowiem razie instrukcja nie jest wykonywana
ani razu (FALSE) lub powtarzana jest
nieskończoną ilość razy (TRUE)
Powtarzana instrukcja może być dowolną
instrukcją prostą lub strukturalną
43
Przykład użycia instrukcji
while 1
k:=1;
x:=0;
while k<10 do
begin
x:=(x+k)/k;
k:=k+1;
end;
44
Przykład użycia instrukcji
while 2
while k>0 do
begin
k:=k div 2;
n:=k*k;
end;
45
Instrukcja repeat
(powtarzaj)
Służy do opisywania iteracji
ze sprawdzaniem warunku
na końcu
Składnia
repeat
instrukcja-1;
instrukcja-2;
...
instrukcja-n;
until wyrażenie
instrukcja
Czy wyrażenie
prawdziwe
Zakończenie
instrukcji
nie
tak
46
Uwagi o stosowaniu
instrukcji repeat
wyrażenie powinno dawać w wyniku wartość
logiczną
każda z instrukcji może być dowolną instrukcją
prostą bądź strukturalną
nie jest konieczne stosowanie instrukcji złożonej
(repeat
i
until
stanowią
odpowiednie
ograniczenie)
instrukcje wewnętrzne wykonywane są co
najmniej jeden raz
instrukcje wykonywane są do momentu aż
wyrażenie osiągnie wartość TRUE
47
Przykład stosowania repeat
until 1
program Wartosc;
uses Dialogs; var n: Byte; S: String;
begin
repeat
InputQuery(‘Pytanie’,‘Podaj
liczbę
(1..12):‘,S);
n:=StrToInt(S);
until (n>=1) and (n<=12);
end.
48
Przykład stosowania repeat
until 2
repeat
K := I mod J;
I := J;
J := K;
until J = 0;
49
Przykład stosowania repeat
until 3
(niekończąca się pętla)
program Petla;
var i: integer;
begin
i:=0;
repeat
i:=i+3;
until I=20;
end.
50
Instrukcja wiążąca (with)
Służy do ułatwienia odwoływania się do
pól rekordu lub obiektu
Składnia
with lista zmiennych do instrukcja
Szczegóły i przykłady przy omawianiu
tematów dotyczących złożonych struktur
danych (tablice, rekordy, obiekty...) i
zapisu danych na dysk
51
Instrukcja try..except
try
{Instrukcje,
które
mają
być
wykonane}
except
{Kod uruchamiany w przypadku
wystąpiena błędu
end;
52
Przykład użycia try..except
...
try
x:=100 div Y;
except
ShowMessage(‘Nie dziel przez zero !’);
end;
...
53
Rozróżnianie typów
wyjątków
on TypWyjatku do instrukcja
Przykład
...
try
x:=100 div Y;
except
on EDivisionByZero do ShowMessage(‘Nie dziel przez
zero !’);
on EInOutError do ShowMessage(‘Nie poprawna wartość
Y!’);
end;
...
54
Instrukcja try..finally
Wykorzystywana w celu bezpiecznego zwalniania
wykorzystywanych zasobów (zwalnianie pamięci,
zamykanie plików, itp..)
try
{Instrukcje wykonywa w programie podlegające
ochronie}
finally
{Kod wykonywany zawsze (w wypadku pomyślnego
zakończenia operacji i w wypadku wystąpienia
błędu}
end;
55
Przykład użycia try..finally
...
New(X) {rezerwacja pamięci na dynamiczną
zmienną X}
try
X^:=Random(100);
X^:=100 div X^;
finally
Dispose(X); {Zwolnienie zajętej pamięci}
end;
...