1213z wdprog ww07

background image

Wyjątki i ich obsługa

Tablice

Wstęp do programowania

wykład 7

Agata Półrola

Wydział Matematyki i Informatyki UŁ

sem. zimowy 2012/2013

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Wyjątki i ich obsługa

Wyjątki

W sytuacjach “awaryjnych” (wczytanie litery zamiast liczby,
dzielenie przez zero, przekroczenie zakresu i itp) zgłaszany jest
tzw.

wyjątek

nazwy wyjątków określone są w odpowiednich pakietach;
można również deklarować własne wyjątki.

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Wyjątki predefiniowane

Wyjątki predefiniowane (tzn. zdefiniowane w pakiecie Standard)
to:

Constraint Error

Program Error

Storage Error

Tasking Error

Inne popularne wyjątki

Data Error zdefiniowany w pakiecie ada.text io

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Kiedy pojawiają się powyższe wyjątki

Constraint Error - przekroczenie jakiegoś zakresu.

(niektóre przypadki)

:

przekroczenie zakresu typu
przekroczenie zakresu indeksu tablicy lub zakresu wyróżnika
rekordu
próba użycia pól rekordu nie istniejących dla danej wartości
wyrożnika
próba odwołania do zawartości obiektu który miałby być
pokazywany przez wskaźnik, gdy wartość tego wskaźnika jest
null

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Przykład

with ada . t e x t i o , ada . i n t e g e r T e x t I O ;
use ada . T e x t I O , ada . i n t e g e r T e x t I O ;

p r o c e d u r e w 0 6 w y j a t k i C E

i s

a , b , c :

i n t e g e r ;

b e g i n

a := i n t e g e r ’ l a s t ;
b := i n t e g e r ’ l a s t / 2 ;
c := a+2∗b ;

−− s p o w o d u j e c o n s t r a i n t e r r o r

p u t ( c ) ;

end w 0 6 w y j a t k i C E ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Kiedy pojawiają się powyższe wyjątki - cd.

Storage Error - przekroczenie rozmiaru stosu (tzw.
przepełnienie stosu)

stos - obszar pamięci wydzielony dla danego programu i służący do

przechowywania jego zmiennych lokalnych. Wielkość stosu jest stała w czasie

wykonania programu.

Główne przypadki:

deklarowanie zmiennych (np. tablicowych) zbyt dużego
rozmiaru
“nieodpowiednie” wywoływanie niektórych funkcji
rekurencyjnych (np. dla zbyt dużych parametrów)

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Przykład

p r o c e d u r e w 0 6 w y j a t k i S E

i s

a :

i n t e g e r ;

b e g i n

a := i n t e g e r ’ l a s t / 2 ;

d e c l a r e

t : a r r a y ( i n t e g e r range 1 . . a ) o f i n t e g e r ;

−− prawdop . s p o w o d u j e S t o r a g e E r r o r

b e g i n

t ( 1 ) : = 1 0 ;

end ;

end w 0 6 w y j a t k i S E ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Kiedy pojawiają się powyższe wyjątki - cd.

Program Error - próby jakiegoś “naruszenia” struktury
programu (np. dla pewnych danych wykonanie funkcji nie
natrafi na return

Tasking Error - błąd związany z wielozadaniowością

Data Error - błąd danych (np. podanie litery zamiast liczby)

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Przykład

with ada . f l o a t T e x t I O ,

ada . n u m e r i c s . E l e m e n t a r y F u n c t i o n s ;

use ada . f l o a t T e x t I O ,

ada . n u m e r i c s . E l e m e n t a r y F u n c t i o n s ;

p r o c e d u r e w 0 6 w y j a t k i P E

i s

f u n c t i o n p i e r w i a s t e k ( a :

f l o a t ) r e t u r n

f l o a t

i s

b e g i n

i f a >=0.0 then r e t u r n s q r t ( a ) ; end i f ;

end p i e r w i a s t e k ;
a :

f l o a t ;

b e g i n

g e t ( a ) ;

−− p r z y z l y c h d an y c h D a t a E r r o r

p u t ( p i e r w i a s t e k ( a ) ) ;

−− d l a ujemnego A P r o g r a m E r r o r

end w 0 6 w y j a t k i P E ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Wyjątki zdefiniowane w pakietach

Każdy dostępny pakiet może (ale nie musi) zawierać definicje
wyjątków. Możemy się do nich odwoływać pisząc

nazwa pakietu.nazwa wyjątku

lub po prostu

nazwa wyjątku

jeśli zawartość pakietu jest dostępna bezpośrednio, a nazwa
wyjątku jest jednoznaczna.

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Definiowanie własnych wyjątków

W programie (w jego części deklaracyjnej) można definiować
własne wyjątki pisząc

nazwa wyjątku:

exception;

Instrukcja powodująca zgłoszenie wyjątku ma postać

raise nazwa wyjątku;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Przykład (Wyjątek zdefiniowany w programie)

w i t h ada . t e x t i o , ada . i n t e g e r t e x t i o ;
u s e ada . t e x t i o , ada . i n t e g e r t e x t i o ;

p r o c e d u r e

w 0 7 w y j a t k i u d e f

i s

j e s t 1 3 :

e x c e p t i o n ;

a :

i n t e g e r ;

b e g i n

g e t ( a ) ;

i f

a=13 t h e n

r a i s e

j e s t 1 3 ; end

i f ;

p u t ( ” p o d a l e s

l i c z b e ” ) ;

p u t ( a , 0 ) ;

−− l i c z b a

n i e

w y p i s z e

s i e

po p o d a n i u 13

end w 0 7 w y j a t k i u d e f ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Propagacja wyjątków

Jeśli brak jest obsługi danego (zgłoszonego) wyjątku:

wyjątek jest

propagowany dynamicznie

, tzn. jednostka

programu (procedura, funkcja, blok) w której wystąpił wyjątek
jest zakańczana i wyjątek jest zgłaszany w miejscu które tę
jednostkę wywołało

powyższa propagacja jest powtarzana albo “do samej góry”
(do momentu zakończenia programu głównego), albo do
miejsca, w którym dany wyjątek zostanie obsłużony.

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Propagacja wyjątków

Jeśli brak jest obsługi danego (zgłoszonego) wyjątku:

wyjątek jest

propagowany dynamicznie

, tzn. jednostka

programu (procedura, funkcja, blok) w której wystąpił wyjątek
jest zakańczana i wyjątek jest zgłaszany w miejscu które tę
jednostkę wywołało

powyższa propagacja jest powtarzana albo “do samej góry”
(do momentu zakończenia programu głównego), albo do
miejsca, w którym dany wyjątek zostanie obsłużony.

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Propagacja wyjątków

Jeśli brak jest obsługi danego (zgłoszonego) wyjątku:

wyjątek jest

propagowany dynamicznie

, tzn. jednostka

programu (procedura, funkcja, blok) w której wystąpił wyjątek
jest zakańczana i wyjątek jest zgłaszany w miejscu które tę
jednostkę wywołało

powyższa propagacja jest powtarzana albo “do samej góry”
(do momentu zakończenia programu głównego), albo do
miejsca, w którym dany wyjątek zostanie obsłużony.

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Obsługa wyjątków

Kod obsługujący wyjatki umieszczamy na końcu bloku.
Ma on postać podobną do instrukcji case:

begin

-- początek bloku

...

-- część wykonywalna bloku

exception

when wyjątek_1 | wyjątek_2 | ... | wyjątek_n => instrukcje
when wyjątek_(n+1) | ... | wyjątek_k => instrukcje
...
when others => instrukcje

end;

-- koniec bloku

przy czym when others (obsługujące wszystkie wyjątki nie wymienione
we wcześniejszych “when”) jest opcjonalne - nie musi wystąpić nawet
jeśli wcześniejsze listy wyjątków nie zawierają wszystkich wyjątków jakie
mogą wystąpić w danym bloku

(inaczej niż w instrukcji case, wymagającej określenia działania dla każdej wartości

selektora)

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Obsługa wyjątków

Kod obsługujący wyjatki umieszczamy na końcu bloku.
Ma on postać podobną do instrukcji case:

begin

-- początek bloku

...

-- część wykonywalna bloku

exception

when wyjątek_1 | wyjątek_2 | ... | wyjątek_n => instrukcje
when wyjątek_(n+1) | ... | wyjątek_k => instrukcje
...
when others => instrukcje

end;

-- koniec bloku

przy czym when others (obsługujące wszystkie wyjątki nie wymienione
we wcześniejszych “when”) jest opcjonalne - nie musi wystąpić nawet
jeśli wcześniejsze listy wyjątków nie zawierają wszystkich wyjątków jakie
mogą wystąpić w danym bloku

(inaczej niż w instrukcji case, wymagającej określenia działania dla każdej wartości

selektora)

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Działanie obsługi wyjątku

Jeśli w jakimś miejscu danego bloku został zgłoszony wyjątek, a
blok zawiera jego obsługę, to:

instrukcje występujące w bloku po instrukcji która
spowodowała wyjątek nie są wykonywane

zamiast nich wykonywane są instrukcje przypisane do “=>”
odpowiadającego danemu wyjątkowi

po wykonaniu tych instrukcji program przechodzi do
wykonywania kodu za blokiem w którym został obsłużony
wyjątek

(może to być również kod znajdujący się za wywołaniem

podprogramu w którym został zgłoszony wyjątek, jeśli podprogram (tj.

procedura albo funkcja) sam ten wyjątek obsłużył)

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Działanie obsługi wyjątku

Jeśli w jakimś miejscu danego bloku został zgłoszony wyjątek, a
blok zawiera jego obsługę, to:

instrukcje występujące w bloku po instrukcji która
spowodowała wyjątek nie są wykonywane

zamiast nich wykonywane są instrukcje przypisane do “=>”
odpowiadającego danemu wyjątkowi

po wykonaniu tych instrukcji program przechodzi do
wykonywania kodu za blokiem w którym został obsłużony
wyjątek

(może to być również kod znajdujący się za wywołaniem

podprogramu w którym został zgłoszony wyjątek, jeśli podprogram (tj.

procedura albo funkcja) sam ten wyjątek obsłużył)

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Działanie obsługi wyjątku

Jeśli w jakimś miejscu danego bloku został zgłoszony wyjątek, a
blok zawiera jego obsługę, to:

instrukcje występujące w bloku po instrukcji która
spowodowała wyjątek nie są wykonywane

zamiast nich wykonywane są instrukcje przypisane do “=>”
odpowiadającego danemu wyjątkowi

po wykonaniu tych instrukcji program przechodzi do
wykonywania kodu za blokiem w którym został obsłużony
wyjątek

(może to być również kod znajdujący się za wywołaniem

podprogramu w którym został zgłoszony wyjątek, jeśli podprogram (tj.

procedura albo funkcja) sam ten wyjątek obsłużył)

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Działanie obsługi wyjątku

Jeśli w jakimś miejscu danego bloku został zgłoszony wyjątek, a
blok zawiera jego obsługę, to:

instrukcje występujące w bloku po instrukcji która
spowodowała wyjątek nie są wykonywane

zamiast nich wykonywane są instrukcje przypisane do “=>”
odpowiadającego danemu wyjątkowi

po wykonaniu tych instrukcji program przechodzi do
wykonywania kodu za blokiem w którym został obsłużony
wyjątek

(może to być również kod znajdujący się za wywołaniem

podprogramu w którym został zgłoszony wyjątek, jeśli podprogram (tj.

procedura albo funkcja) sam ten wyjątek obsłużył)

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Przykład (Działanie obsługi wyjątku)

w i t h ada . t e x t i o , ada . i n t e g e r t e x t i o ;
u s e ada . t e x t i o , ada . i n t e g e r t e x t i o ;

p r o c e d u r e

w 0 7 w y j a t k i p r o p

i s

j e s t 1 3 :

e x c e p t i o n ;

a :

i n t e g e r ;

b e g i n

b e g i n

b e g i n

p u t ( ” p o d a j

l i c z b e : ” ) ;

g e t ( a ) ;

i f

a=13 t h e n

r a i s e

j e s t 1 3 ; end

i f ;

p u t ( ” p o d a l e s

l i c z b e ” ) ;

p u t ( a , 0 ) ;

n e w l i n e ;

e x c e p t i o n

when j e s t 1 3 => p u t l i n e ( ” f e r a l n e

d a n e ” ) ;

end ;

p u t l i n e ( ” w y s z e d l e m z b l o k u ” ) ;

e x c e p t i o n

when j e s t 1 3 => p u t ( ” z l a

l i c z b a ” ) ; −− n i g d y

s i ę

n i e

w y p i s z e

when d a t a e r r o r => p u t ( ” n i e

l i c z b a ” ) ;

end ;

end w 0 7 w y j a t k i p r o p ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Przykład (Działanie obsługi wyjątku - program z funkcją)

w i t h ada . t e x t i o , ada . f l o a t T e x t I O ,

ada . n u m e r i c s . E l e m e n t a r y F u n c t i o n s ;

u s e ada . t e x t i o , ada . f l o a t T e x t I O ,

ada . n u m e r i c s . E l e m e n t a r y F u n c t i o n s ;

p r o c e d u r e

w 0 7 w y j a t k i p r o p o b s

i s

f u n c t i o n

p i e r w i a s t e k ( a :

f l o a t )

r e t u r n

f l o a t

i s

z a m a l e ,

u jem na :

e x c e p t i o n ;

b e g i n

i f

a >=0.0 and a <=2.0

t h e n

r a i s e

z a m a l e ; end

i f ;

i f

a >=0.0 t h e n

r e t u r n

s q r t ( a ) ;

end

i f ;

i f

a <0.0 t h e n

r a i s e

uj emn a ; end

i f ;

e x c e p t i o n

when uj emn a => p u t l i n e ( ” l i c z b a

uj emn a ! ” ) ;

when z a m a l e => p u t ( ” . . . z a mala

l i c z b a

z e b y

l i c z y c . . . ” ) ;

r e t u r n

0 . 0 ;

end p i e r w i a s t e k ;

a :

f l o a t ;

b e g i n

p u t ( ” p o d a j

l i c z b e ” ) ;

g e t ( a ) ;

b e g i n

p u t ( ” p i e r w i a s t e k

w y n o s i : ” ) ;

p u t ( p i e r w i a s t e k ( a ) , e x p =>0); n e w l i n e ;

e x c e p t i o n

when p r o g r a m e r r o r => p u t l i n e ( ” b l a d ” ) ;
when d a t a e r r o r

|

c o n s t r a i n t e r r o r => p u t l i n e ( ” z l e

d a n e ” ) ;

end ;
p u t ( ” k o n i e c p r o g r a m u ” ) ;

end w 0 7 w y j a t k i p r o p o b s ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Jedno z zastosowań obsługi wyjątku

Obsługa wyjątku może wymusić podanie poprawnych danych

Przydaje się do tego instrukcja skip line z pakietu ada.text io,
powodująca wyczyszczenie bufora klawiatury

czyszczenie bufora oznacza tutaj usunięcie z niego wszystkich znaków do
najbliższego znaku końca linii (entera), łącznie z tym enterem

można również używać skip line(n), gdzie n jest liczbą - odpowiada to użyciu
n kolejnych skip line

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Jedno z zastosowań obsługi wyjątku

Obsługa wyjątku może wymusić podanie poprawnych danych
Przydaje się do tego instrukcja skip line z pakietu ada.text io,
powodująca wyczyszczenie bufora klawiatury

czyszczenie bufora oznacza tutaj usunięcie z niego wszystkich znaków do
najbliższego znaku końca linii (entera), łącznie z tym enterem

można również używać skip line(n), gdzie n jest liczbą - odpowiada to użyciu
n kolejnych skip line

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Przykład (Wymuszenie podania poprawnych danych)

w i t h ada . t e x t i o ,

ada . i n t e g e r t e x t i o ;

u s e

ada . t e x t i o ,

ada . i n t e g e r t e x t i o ;

p r o c e d u r e

w 0 7 w y j a t k i m u s

i s

a :

i n t e g e r ;

b e g i n

l o o p

b e g i n

p u t ( ” P o d a j

l i c z b e > ” ) ;

g e t ( a ) ;

e x i t ; −− z a k o n c z e n i e

p o b i e r a n i a

l i c z b y

e x c e p t i o n

when d a t a e r r o r => p u t l i n e ( ” b l e d n e d a n e ” ) ;

s k i p l i n e ; −− u s u n i e c i e

d a n y c h z b u f o r a

end ;

end l o o p ;

p u t ( ” p o d a l e s ” ) ;

p u t ( a , 0 ) ;

n e w l i n e ;

p u t ( ” k o n i e c p r o g r a m u ” ) ;

end w 0 7 w y j a t k i m u s ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Tablice

Co to jest tablica

Tablica

jest zlożonym obiektem składającym się z

wielu elementów

(tzw.

składowych

) należących do

tego samego typu

tablica może być jedno-, dwu- lub więcejwymiarowa

do całej struktury odwołujemy się za pomocą pojedynczego
identyfikatora

możemy również odwoływać się do poszczególnych
(pojedynczych) elementów tablicy, a także do podtablic

do elementów tablicy i podtablic odwołujemy się używając
tzw.

indeksów

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Tablice

Co to jest tablica

Tablica

jest zlożonym obiektem składającym się z

wielu elementów

(tzw.

składowych

) należących do

tego samego typu

tablica może być jedno-, dwu- lub więcejwymiarowa

do całej struktury odwołujemy się za pomocą pojedynczego
identyfikatora

możemy również odwoływać się do poszczególnych
(pojedynczych) elementów tablicy, a także do podtablic

do elementów tablicy i podtablic odwołujemy się używając
tzw.

indeksów

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Tablice

Co to jest tablica

Tablica

jest zlożonym obiektem składającym się z

wielu elementów

(tzw.

składowych

) należących do

tego samego typu

tablica może być jedno-, dwu- lub więcejwymiarowa

do całej struktury odwołujemy się za pomocą pojedynczego
identyfikatora

możemy również odwoływać się do poszczególnych
(pojedynczych) elementów tablicy, a także do podtablic

do elementów tablicy i podtablic odwołujemy się używając
tzw.

indeksów

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Przykłady tablic jednowymiarowych

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Deklaracja tablic jednowymiarowych

zmienne tablicowe możemy deklarować jako będące tzw.

anonimowego typu tablicowego

:

zmienna :

array (określenie indeksu) of

typ składowych;

Przykłady

a : array (integer range 1..10) of integer;

type dni is (pon, wt, sr, czw, pt, so, nie);
b: array (dni) of float;

c: array(1..10) of dni;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Deklaracja tablic jednowymiarowych - cd

kolejna możliwość to zdefiniowanie

typu tablicowego

posiadającego własną nazwę, a potem zadeklarowanie
zmiennej tego typu
type nazwa typu is array (określenie indeksu) of
typ składowych ;

Przykłady

type ciag10liczb is array (integer range 1..10)

of integer;

a: ciag10liczb;

---------
type dni is (pon, wt, sr, czw, pt, so, nie);
type tabTemp is array (dni) of float;
b: tabTemp;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Indeks - uwagi

określenie indeksu może być postaci:

początek zakresu ..

koniec zakresu

typ indeksu
typ indeksu range początek zakresu ..
koniec zakresu

indeks

musi być typu dyskretnego

jeśli typ indeksu nie jest podany jawnie, to przyjmuje się, że
jest on odpowiedniego typu uniwersalnego (np.
universal integer)

krańce zakresu nie muszą być stałymi - mogą być zadane
dowolnym wyrażeniem

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Indeks - uwagi

określenie indeksu może być postaci:

początek zakresu ..

koniec zakresu

typ indeksu
typ indeksu range początek zakresu ..
koniec zakresu

indeks

musi być typu dyskretnego

jeśli typ indeksu nie jest podany jawnie, to przyjmuje się, że
jest on odpowiedniego typu uniwersalnego (np.
universal integer)

krańce zakresu nie muszą być stałymi - mogą być zadane
dowolnym wyrażeniem

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Indeks - uwagi

określenie indeksu może być postaci:

początek zakresu ..

koniec zakresu

typ indeksu
typ indeksu range początek zakresu ..
koniec zakresu

indeks

musi być typu dyskretnego

jeśli typ indeksu nie jest podany jawnie, to przyjmuje się, że
jest on odpowiedniego typu uniwersalnego (np.
universal integer)

krańce zakresu nie muszą być stałymi - mogą być zadane
dowolnym wyrażeniem

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Odwołania do elementów tablic

Do elementów tablic odwołujemy się przez nazwę zmiennej
tablicowej i wartość indeksu umieszczoną w okrągłych nawiasach
(przy czym wartość indeksu może być dana dowolnym wyrażeniem)

Przykłady

a(1):=12;
put(a(1));

b(pon):=12.5;

i:integer;
...
i:=2*2;
put(a(i));

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Wypełnianie tablic wartościami

nie wypełniona “jawnie” danymi zmienna tablicowa jest
wypełniona przypadkowymi wartościami

tablica może zostać wypełniona danymi przez kolejne
przypisywanie wartości wszystkim jej składowym...

często wykorzystuje się wówczas pętle

... albo przez przypisanie wartości wszystkim składowym
równocześnie, jedną instrukcją - co wymaga użycia tzw.

agregatu tablicy

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Wypełnianie tablic wartościami

nie wypełniona “jawnie” danymi zmienna tablicowa jest
wypełniona przypadkowymi wartościami

tablica może zostać wypełniona danymi przez kolejne
przypisywanie wartości wszystkim jej składowym...

często wykorzystuje się wówczas pętle

... albo przez przypisanie wartości wszystkim składowym
równocześnie, jedną instrukcją - co wymaga użycia tzw.

agregatu tablicy

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Wypełnianie tablic wartościami

nie wypełniona “jawnie” danymi zmienna tablicowa jest
wypełniona przypadkowymi wartościami

tablica może zostać wypełniona danymi przez kolejne
przypisywanie wartości wszystkim jej składowym...

często wykorzystuje się wówczas pętle

... albo przez przypisanie wartości wszystkim składowym
równocześnie, jedną instrukcją - co wymaga użycia tzw.

agregatu tablicy

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Agregaty tablic (jednowymiarowych)

Mamy tablicę:
temperatury:

array (miesiace range sty..mar) of

float;

notacja pozyzyjna:
temperatury := (-10.0, -15.5, 4.2);

notacja nazywana:

temperatury := (lut=>-15.5, sty=>-10.0, mar=>4.2);
temperatury := (lut => -12.0, others => -2.1);
temperatury := (others => -3.0);

notacja mieszana:
temperatury := (-10.0, others=>-3.2);

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Przykład (Pobranie i wypisanie tablicy, agregaty)

w i t h ada . t e x t i o ,

ada . I n t e g e r T e x t I O ;

u s e ada . t e x t i o ,

ada . I n t e g e r T e x t I O ;

p r o c e d u r e w 0 7 t a b

i s

t y p e t a b

i s

a r r a y

( i n t e g e r

r a n g e

0 . . 5 )

o f

i n t e g e r ;

t :

t a b ;

b e g i n

−− p r z y k l a d y

w y p e l n i e n i a

t a b l i c y

z a pomoca a g r e g a t o w :

−−t : =( o t h e r s =>0);

−−T : = ( 3 , 2 , 1 , 3 , 4 , 7 ) ;

t :=(2=>4, o t h e r s =>0);

p u t l i n e ( ” w y p i s a n i e

t a b l i c y : ” ) ;

f o r

i

i n

0 . . 5

l o o p

p u t ( t ( i ) ) ;

end l o o p ;

p u t l i n e ( ” T e r a z p o b i e r z e m y d a n e do

t a b l i c y ” ) ;

f o r

i

i n

0 . . 5

l o o p

p u t ( ” p o d a j

e l e m e n t na m i e j s u ” ) ;

p u t ( i , 0 ) ;

p u t ( ”> ” ) ;

g e t ( t ( i ) ) ;

end l o o p ;

p u t l i n e ( ” w y p i s a n i e

p o b r a n e j

t a b l i c y : ” ) ;

f o r

i

i n

0 . . 5

l o o p

p u t ( t ( i ) ) ;

end l o o p ;

end w 0 7 t a b ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Atrybuty tablic

zmienna tablicowa’first

pierwszy (najmniejszy) indeks danej tablicy

zmienna tablicowa’last

ostatni (największy) indeks danej tablicy

zmienna tablicowa’range

zakres indeksu danej tablicy (odpowiednik

zmienna tablicowa’first..zmienna tablicowa’last)

zmienna tablicowa’length

długość danej tablicy

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Przykład (Poprzedni przykład - z użyciem atrybutów)

w i t h ada . t e x t i o ,

ada . I n t e g e r T e x t I O ;

u s e ada . t e x t i o ,

ada . I n t e g e r T e x t I O ;

p r o c e d u r e w 0 7 t a b

i s

t y p e t a b

i s

a r r a y

( i n t e g e r

r a n g e

0 . . 5 )

o f

i n t e g e r ;

t :

t a b ;

b e g i n

t :=(2=>4, o t h e r s =>0);

p u t l i n e ( ” w y p i s a n i e

t a b l i c y : ” ) ;

f o r

i

i n t ’ f i r s t . . t ’ l a s t

l o o p

p u t ( t ( i ) ) ;

end l o o p ;

p u t l i n e ( ” T e r a z p o b i e r z e m y d a n e do

t a b l i c y ” ) ;

f o r

i

i n t ’ r a n g e l o o p

p u t ( ” p o d a j

e l e m e n t na m i e j s u ” ) ;

p u t ( i , 0 ) ;

p u t ( ”> ” ) ;

g e t ( t ( i ) ) ;

end l o o p ;

p u t l i n e ( ” w y p i s a n i e

p o b r a n e j

t a b l i c y : ” ) ;

f o r

i

i n t ’ r a n g e l o o p

p u t ( t ( i ) ) ;

end l o o p ;

end w 0 7 t a b ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Podtablice

Można odwoływać się do fragmentów tablic (tzw.

podtablic

)

Podtablicę wyznaczamy pisząc
nazwa zmiennej tablicowej(zakres indeksu podtablicy)

Przykłady

temperatury(sty..lut):=(1.0,2.0);
a(2..4):=(others=>0);

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Operacje na tablicach

Jeśli tablice (podtablice) należą do tego samego typu, to można na
nich wykonywać następujące operacje:

podstawianie

(jeśli są równej długości)

porównywanie

za pomocą operatorów

=

i

/=

łączenie

za pomocą operatora

&

jeśli składowe tablic są typu dyskretnego, to można
wykonywać również

porównywanie

tablic za pomocą

operatorów

<, <=, >=, >

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Przykład (Operacje na podtablicach)

w i t h ada . t e x t i o ,

ada . i n t e g e r t e x t i o ;

u s e ada . t e x t i o ,

ada . i n t e g e r t e x t i o ;

p r o c e d u r e

w 0 8 p o d t a b l i c e

i s

t y p e t a b

i s

a r r a y

( i n t e g e r

r a n g e

1 . . 1 0 )

o f

i n t e g e r ;

a , b :

t a b ;

b e g i n

a : = ( o t h e r s => 1 ) ;

f o r

i

i n b ’ r a n g e l o o p

b ( i ):=2∗ i ; end l o o p ;

−− p o d s t a w i a n i e

p o d t a b l i c

a ( 1 . . 3 ) : = b ( 4 . . 6 ) ;

f o r

i

i n a ’ r a n g e l o o p

p u t ( a ( i ) , 3 ) ; end l o o p ;

n e w l i n e ;

−− p o r o w n y w a n i e p o d t a b l i c

i f

a ( 1 . . 3 ) = a ( 8 . . 1 0 )

t h e n

p u t l i n e ( ” r o w n e f r a g m e n t y p o c z

i

kon ” ) ;

e l s e

p u t l i n e ( ” p o c z a t e k

r o z n y od k o n c a ” ) ;

end

i f ;

i f

a ( 1 . . 3 ) > a ( 8 . . 1 0 )

t h e n

p u t l i n e ( ” p o c z a t e k

w i e k s z y ” ) ;

e l s e

p u t l i n e ( ” k o n i e c

w i e k s z y

l u b row ny ” ) ;

end

i f ;

−− k o n k a t e n a c j a

p o d t a b l i c

a := b ( 1 . . 5 ) & a ( 6 . . 1 0 ) ;

f o r

i

i n a ’ r a n g e l o o p

p u t ( a ( i ) , 3 ) ; end l o o p ;

n e w l i n e ;

end w 0 8 p o d t a b l i c e ;

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

background image

Wyjątki i ich obsługa

Tablice

Tablice anonimowe

Tablice anonimowe (anonimowy typ tablicowy) mają pewne
ograniczenia:

każda zmienna będąca tablicą anonimową jest traktowana
jako będąca innego typu (nawet jeśli zadeklarujemy je naraz,
np. A,B: array (1..5) of float;) - takich tablic nie
można sobie nawzajem przypisywać ani porównywać

istnieją deklaracje w których może wystąpić tablica, ale nie
może wystąpić tablica anonimowa

(omówimy poźniej)

Agata Półrola Wydział Matematyki i Informatyki UŁ

Wstęp do programowania


Document Outline


Wyszukiwarka

Podobne podstrony:
1213z wdprog ww07
1011z wdprog ww07
1213z wdprog ww04
1213z wdprog ww02
1213z wdprog ww11
1213z wdprog ww09
1213z wdprog ww08
1213z wdprog ww12
1213z wdprog ww10
1213z wdprog ww13
1213z wdprog ww06
1213z wdprog ww14
1213z wdprog ww05
1213z wdprog ww03
1213z wdprog ww01
1011z wdprog ww07
1011z wdprog ww07

więcej podobnych podstron