Wstęp do programowania
wykład 8
Agata Półrola
Wydział Matematyki i Informatyki UŁ
sem. zimowy 2010/2011
Agata Półrola Wydział Matematyki i Informatyki UŁ
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Ł
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Ł
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Ł
Wektory boolowskie
Szczególnym przypadkiem tablic są
wektory boolowskie
(jednowymiarowe tablice złożone z elementów typu logicznego)
Poza standardowymi operacjami na tablicach jednowymiarowych
można na nich wykonywać
operacje logiczne
, używając operatorów
not, and, or i xor
w przypadku operatorów dwuargumentowych
wektory-argumenty muszą być tej samej długości
wynikiem jest agregat tablicy powstały poprzez wykonanie
danej operacji logicznej na poszczególnych elementach
wektora/wektorów
Agata Półrola Wydział Matematyki i Informatyki UŁ
Przykład (Wektory boolowskie)
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 w e k t o r l o g
i s
p a c k a g e
b i o
i s new ada . t e x t i o . e n u m e r a t i o n i o ( b o o l e a n ) ;
u s e
b i o ;
t y p e
w e k t o r l o g i c z n y
i s
a r r a y ( 1 . . 4 )
o f
b o o l e a n ;
p , q , w and , w o r , w x o r , w n o t : w e k t o r l o g i c z n y ;
k : p o s i t i v e c o u n t ;
b e g i n
p : = ( o t h e r s=>t r u e ) ;
p u t l i n e ( ” P o d a j w e k t o r q − m o z l i w e
w a r t o s c i
j e g o
s k l a d o w y c h t o TRUE i FALSE” ) ;
f o r
i
i n q ’ r a n g e l o o p
p u t ( ” q ( ” ) ; p u t ( i , 0 ) ; p u t ( ”)= ” ) ;
g e t ( q ( i ) ) ;
end l o o p ;
w and := p and q ;
w o r := p o r q ;
w x o r := p x o r q ;
w n o t := n o t q ;
p u t l i n e ( ”A o t o
w y n i k i
d z i a l a n na w e k t o r a c h : ” ) ;
p u t ( ” w e k t o r ” ” p ” ” : ” ) ;
k : = 1 3 ;
f o r
i
i n p ’ r a n g e l o o p k := k +7;
s e t c o l ( k ) ;
p u t ( p ( i ) ) ;
end l o o p ;
n e w l i n e ;
p u t ( ” w e k t o r ” ” q ” ” : ” ) ; k : = 1 3 ;
f o r
i
i n q ’ r a n g e l o o p k := k +7;
s e t c o l ( k ) ;
p u t ( q ( i ) ) ; end l o o p ;
n e w l i n e ;
p u t ( ” w e k t o r ” ” n o t q ” ” : ” ) ; k : = 1 3 ;
f o r
i
i n q ’ r a n g e l o o p k := k +7;
s e t c o l ( k ) ;
p u t ( w n o t ( i ) ) ; end l o o p ;
n e w l i n e ;
p u t ( ” w e k t o r ” ” p and q ” ” : ” ) ; k : = 1 3 ;
f o r
i
i n w and ’ r a n g e l o o p k := k +7;
s e t c o l ( k ) ;
p u t ( w and ( i ) ) ; end l o o p ;
n e w l i n e ;
p u t ( ” w e k t o r ” ” p o r q ” ” : ” ) ; k : = 1 3 ;
f o r
i
i n w o r ’ r a n g e l o o p k := k +7;
s e t c o l ( k ) ;
p u t ( w o r ( i ) ) ; end l o o p ;
n e w l i n e ;
p u t ( ” w e k t o r ” ” p x o r q ” ” : ” ) ; k : = 1 3 ;
f o r
i
i n
w x o r ’ r a n g e l o o p k := k +7;
s e t c o l ( k ) ;
p u t ( w x o r ( i ) ) ; end l o o p ;
end w 0 8 w e k t o r l o g ;
Agata Półrola Wydział Matematyki i Informatyki UŁ
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Ł
Jednowymiarowe tablice dynamiczne
Rozmiar standardowo zadeklarowanej tablicy określamy w czasie
pisania programu - czyli jest on znany w momencie kompilacji
Tablice dynamiczne
to takie tablice, których rozmiar jest znany
dopiero w czasie uruchomienia programu (i przy każdym
uruchomieniu ten rozmiar może być inny)
Agata Półrola Wydział Matematyki i Informatyki UŁ
Jednowymiarowe tablice dynamiczne
Rozmiar standardowo zadeklarowanej tablicy określamy w czasie
pisania programu - czyli jest on znany w momencie kompilacji
Tablice dynamiczne
to takie tablice, których rozmiar jest znany
dopiero w czasie uruchomienia programu (i przy każdym
uruchomieniu ten rozmiar może być inny)
Agata Półrola Wydział Matematyki i Informatyki UŁ
Tworzenie tablic dynamicznych
Można zdefiniować zarówno anonimową tablicę dynamiczną,
jak i odpowiedni nowy typ tablicowy
W obu przypadkach używamy do tego celu bloku z częścią
declare
uwagi:
zadeklarowana tablica i ew. zdefiniowany typ są widoczne
tylko wewnątrz danego bloku
rozmiar tablicy musi być podany przed jej zadeklarowaniem
Agata Półrola Wydział Matematyki i Informatyki UŁ
Tworzenie tablic dynamicznych
Można zdefiniować zarówno anonimową tablicę dynamiczną,
jak i odpowiedni nowy typ tablicowy
W obu przypadkach używamy do tego celu bloku z częścią
declare
uwagi:
zadeklarowana tablica i ew. zdefiniowany typ są widoczne
tylko wewnątrz danego bloku
rozmiar tablicy musi być podany przed jej zadeklarowaniem
Agata Półrola Wydział Matematyki i Informatyki UŁ
Przykład (Tworzenie tablicy dynamicznej)
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 t a b d y n
i s
i l o s c :
p o s i t i v e ;
b e g i n
p u t ( ” i l e
l i c z b
b e d z i e s z
c h c i a l
z a p a m i e t a c ? ” ) ;
g e t ( i l o s c ) ;
d e c l a r e
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 . . i l o s c ) o f
i n t e g e r ;
t :
t a b ;
b e g i n
p u t l i n e ( ” p o d a j
t e r a z
t e
l i c z b y : ” ) ;
f o r
i
i n t ’ r a n g e l o o p
p u t ( ” l i c z b a ” ) ;
p u t ( i , 0 ) ;
p u t ( ” : ” ) ;
g e t ( t ( i ) ) ;
end l o o p ;
n e w l i n e ( 2 ) ;
p u t l i n e ( ” Twoje
l i c z b 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 ;
end w 0 8 t a b d y n ;
Agata Półrola Wydział Matematyki i Informatyki UŁ
Zadania
Zadanie 1
Napisać program pobierający od użytkownika tablicę liczb
całkowitych o podanej przez niego długości, a następnie wypisujący
informację czy tablica zawiera dwa sąsiadujące z sobą elementy
dodatnie.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Zadanie 2
Napisać program pobierający od użytkownika tablicę liczb
całkowitych o podanej przez niego długości, a następnie wypisujący
wszystkie pary uporządkowane jakie można utworzyć z elementów
tej tablicy
Agata Półrola Wydział Matematyki i Informatyki UŁ
Zadanie 3
Napisać program pobierający od użytkownika tablicę liczb
całkowitych o podanej przez niego długości, a następnie wypisujący
wszystkie dwójki (pary nieuporządkowane) różnych elementów tej
tablicy
Agata Półrola Wydział Matematyki i Informatyki UŁ
Zadanie 4
Napisać program pobierający od użytkownika tablicę liczb
całkowitych o podanym przez niego zakresie indeksu, a następnie
wypisujący wszystkie liczby występujące w tablicy
Agata Półrola Wydział Matematyki i Informatyki UŁ