background image

Wykład XII

Object Pascal - Instrukcje 

sterujące

Podstawy informatyki
Semestr II Elektrotechnika

background image

2

O czym będzie?

Jak 

korzystać 

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

background image

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

background image

4

Cechy obiektów

Mają  unikalne  nazwy  lub  ewentualnie 
numery np. formularzform1Edit;

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

background image

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

background image

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

background image

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

background image

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

background image

9

Instrukcja skoku

Powoduje 

natychmiastowe 

przekazanie  sterowania  do  instrukcji 
programu 

poprzedzonej 

daną 

etykietą

Składnia

goto Etykieta;

background image

10

Schemat użycia instrukcji 

skoku

program Skoki;
label et;
...
begin
...
goto et;
...
et:  x:=a+b;
...
end.

background image

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

background image

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.

background image

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

background image

14

Postać ogólna instrukcji if 

(Jeśli)

if wyrażenie then instrukcja1
else instrukcja2;

warunek

instrukcja1

instrukcja2

tak

nie

background image

15

Postać ogólna instrukcji if 

(Jeśli) 2

if wyrażenie then instrukcja;

warunek

instrukcja

tak

nie

background image

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

background image

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

celu 

łączenia 

podwarunków
Przykłady
Delta>0
(Imie='Jan') and (Nazwisko='Kowalski') 
(
Key=’T’) or (Key)=’N’)

background image

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

background image

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

background image

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;

background image

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. 

background image

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. 

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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;

background image

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

background image

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)

background image

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

background image

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ą

background image

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

background image

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

background image

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’);

background image

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

background image

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.

background image

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

background image

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.

background image

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

background image

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ą

background image

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;

background image

44

Przykład użycia instrukcji 

while 2

while k>0 do

begin

k:=k div 2;
n:=k*k;

end;

background image

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

background image

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 

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

background image

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.

background image

48

Przykład stosowania repeat 

until 2

repeat
  K := I mod J;
  I := J;
  J := K;
until J = 0;

background image

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.

background image

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

background image

51

Instrukcja try..except

try
 

{Instrukcje, 

które 

mają 

być 

wykonane}

except
  {Kod  uruchamiany  w  przypadku 

wystąpiena błędu

end;

background image

52

Przykład użycia try..except

...
try
 x:=100 div Y;
except

ShowMessage(‘Nie dziel przez zero !’);

end;
...

background image

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

background image

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;

background image

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


Document Outline