Wstęp do programowania
wykład 2
Agata Półrola
Wydział Matematyki i Informatyki UŁ
sem. zimowy 2012/2013
Agata Półrola Wydział Matematyki i Informatyki UŁ
Liczby
Korzystanie z liczb
Ada “zna” różne rodzaje liczb (różne
typy
liczbowe) i potrafi
wykonywać na nich podstawowe operacje arytmetyczne.
Nie jest
do tego potrzebne dołączanie żadnego pakietu
Jeśli w programie chcemy dodatkowo takie liczby wprowadzać (np.
z klawiatury) lub wyprowadzać (np. na ekran), to musimy dołączyć
pakiet odpowiedni dla danego typu liczbowego.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Liczby
Korzystanie z liczb
Ada “zna” różne rodzaje liczb (różne
typy
liczbowe) i potrafi
wykonywać na nich podstawowe operacje arytmetyczne.
Nie jest
do tego potrzebne dołączanie żadnego pakietu
Jeśli w programie chcemy dodatkowo takie liczby wprowadzać (np.
z klawiatury) lub wyprowadzać (np. na ekran), to musimy dołączyć
pakiet odpowiedni dla danego typu liczbowego.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Przykład (Liczby (całkowite) - bez wypisywania)
p r o c e d u r e w02 p1 i s
a , b :
i n t e g e r ;
b e g i n
a : = 1 2 ;
b:=10+a ;
end w02 p1 ;
Agata Półrola Wydział Matematyki i Informatyki UŁ
Przykład (Liczby (całkowite) - z wypisywaniem)
with ada . i n t e g e r t e x t i o ;
p r o c e d u r e w02 p2 i s
a , b :
i n t e g e r ;
b e g i n
a : = 1 2 ;
b:=10+a ;
ada . i n t e g e r t e x t i o . p u t ( b ) ;
end w02 p2 ;
Agata Półrola Wydział Matematyki i Informatyki UŁ
Literały numeryczne
Literały
reprezentują wartości (liczbowe, znakowe, napisy) za
pomocą odpowiedniej notacji.
Literały numeryczne
reprezentują
wartości liczbowe.
Literały numeryczne to
literały całkowite
i
literały rzeczywiste
Agata Półrola Wydział Matematyki i Informatyki UŁ
Literały numeryczne
Literały
reprezentują wartości (liczbowe, znakowe, napisy) za
pomocą odpowiedniej notacji.
Literały numeryczne
reprezentują
wartości liczbowe.
Literały numeryczne to
literały całkowite
i
literały rzeczywiste
Agata Półrola Wydział Matematyki i Informatyki UŁ
Literały całkowite
przykłady
literałów całkowitych
:
13, 0, -2, +4,
1 234, 23 45, 15E5, 1e8,
2#100 111#, 16#1a#, 2#11 001#e2.
Znaczenie:
podkreślenie zastępuje spację (1 234 567 zapiszemy jako
1 234 567)
literały postaci 15e5 (z małą lub wielką literą E) przedstawiają
liczby
w postaci wykładniczej
. Interpretacja liczby postaci aEb
to a · 10
b
(czyli 15e5 to 15 · 10
5
)
literały 2#100 111#, 16#1a#, 2#11001#e2 to
literały z
podstawą
, umożliwiające zapisywanie liczb w różnych
systemach pozycyjnych. Ostatni z literałów ma dodatkowo
postać wykładniczą.
Ogólna postać takiego literału to
podstawa#liczba#[wykładnik]
(nawiasy kwadratowe oznaczają że wykładnik jest opcjonalny)
Agata Półrola Wydział Matematyki i Informatyki UŁ
Literały całkowite
przykłady
literałów całkowitych
:
13, 0, -2, +4, 1 234, 23 45,
15E5, 1e8,
2#100 111#, 16#1a#, 2#11 001#e2.
Znaczenie:
podkreślenie zastępuje spację (1 234 567 zapiszemy jako
1 234 567)
literały postaci 15e5 (z małą lub wielką literą E) przedstawiają
liczby
w postaci wykładniczej
. Interpretacja liczby postaci aEb
to a · 10
b
(czyli 15e5 to 15 · 10
5
)
literały 2#100 111#, 16#1a#, 2#11001#e2 to
literały z
podstawą
, umożliwiające zapisywanie liczb w różnych
systemach pozycyjnych. Ostatni z literałów ma dodatkowo
postać wykładniczą.
Ogólna postać takiego literału to
podstawa#liczba#[wykładnik]
(nawiasy kwadratowe oznaczają że wykładnik jest opcjonalny)
Agata Półrola Wydział Matematyki i Informatyki UŁ
Literały całkowite
przykłady
literałów całkowitych
:
13, 0, -2, +4, 1 234, 23 45, 15E5, 1e8,
2#100 111#, 16#1a#, 2#11 001#e2.
Znaczenie:
podkreślenie zastępuje spację (1 234 567 zapiszemy jako
1 234 567)
literały postaci 15e5 (z małą lub wielką literą E) przedstawiają
liczby
w postaci wykładniczej
. Interpretacja liczby postaci aEb
to a · 10
b
(czyli 15e5 to 15 · 10
5
)
literały 2#100 111#, 16#1a#, 2#11001#e2 to
literały z
podstawą
, umożliwiające zapisywanie liczb w różnych
systemach pozycyjnych. Ostatni z literałów ma dodatkowo
postać wykładniczą.
Ogólna postać takiego literału to
podstawa#liczba#[wykładnik]
(nawiasy kwadratowe oznaczają że wykładnik jest opcjonalny)
Agata Półrola Wydział Matematyki i Informatyki UŁ
Literały całkowite
przykłady
literałów całkowitych
:
13, 0, -2, +4, 1 234, 23 45, 15E5, 1e8,
2#100 111#, 16#1a#,
2#11 001#e2.
Znaczenie:
podkreślenie zastępuje spację (1 234 567 zapiszemy jako
1 234 567)
literały postaci 15e5 (z małą lub wielką literą E) przedstawiają
liczby
w postaci wykładniczej
. Interpretacja liczby postaci aEb
to a · 10
b
(czyli 15e5 to 15 · 10
5
)
literały 2#100 111#, 16#1a#, 2#11001#e2 to
literały z
podstawą
, umożliwiające zapisywanie liczb w różnych
systemach pozycyjnych. Ostatni z literałów ma dodatkowo
postać wykładniczą.
Ogólna postać takiego literału to
podstawa#liczba#[wykładnik]
(nawiasy kwadratowe oznaczają że wykładnik jest opcjonalny)
Agata Półrola Wydział Matematyki i Informatyki UŁ
Literały całkowite
przykłady
literałów całkowitych
:
13, 0, -2, +4, 1 234, 23 45, 15E5, 1e8,
2#100 111#, 16#1a#, 2#11 001#e2.
Znaczenie:
podkreślenie zastępuje spację (1 234 567 zapiszemy jako
1 234 567)
literały postaci 15e5 (z małą lub wielką literą E) przedstawiają
liczby
w postaci wykładniczej
. Interpretacja liczby postaci aEb
to a · 10
b
(czyli 15e5 to 15 · 10
5
)
literały 2#100 111#, 16#1a#, 2#11001#e2 to
literały z
podstawą
, umożliwiające zapisywanie liczb w różnych
systemach pozycyjnych. Ostatni z literałów ma dodatkowo
postać wykładniczą.
Ogólna postać takiego literału to
podstawa#liczba#[wykładnik]
(nawiasy kwadratowe oznaczają że wykładnik jest opcjonalny)
Agata Półrola Wydział Matematyki i Informatyki UŁ
Literały całkowite
przykłady
literałów całkowitych
:
13, 0, -2, +4, 1 234, 23 45, 15E5, 1e8,
2#100 111#, 16#1a#, 2#11 001#e2.
Znaczenie:
podkreślenie zastępuje spację (1 234 567 zapiszemy jako
1 234 567)
literały postaci 15e5 (z małą lub wielką literą E) przedstawiają
liczby
w postaci wykładniczej
. Interpretacja liczby postaci aEb
to a · 10
b
(czyli 15e5 to 15 · 10
5
)
literały 2#100 111#, 16#1a#, 2#11001#e2 to
literały z
podstawą
, umożliwiające zapisywanie liczb w różnych
systemach pozycyjnych. Ostatni z literałów ma dodatkowo
postać wykładniczą.
Ogólna postać takiego literału to
podstawa#liczba#[wykładnik]
(nawiasy kwadratowe oznaczają że wykładnik jest opcjonalny)
Agata Półrola Wydział Matematyki i Informatyki UŁ
Literały całkowite
przykłady
literałów całkowitych
:
13, 0, -2, +4, 1 234, 23 45, 15E5, 1e8,
2#100 111#, 16#1a#, 2#11 001#e2.
Znaczenie:
podkreślenie zastępuje spację (1 234 567 zapiszemy jako
1 234 567)
literały postaci 15e5 (z małą lub wielką literą E) przedstawiają
liczby
w postaci wykładniczej
. Interpretacja liczby postaci aEb
to a · 10
b
(czyli 15e5 to 15 · 10
5
)
literały 2#100 111#, 16#1a#, 2#11001#e2 to
literały z
podstawą
, umożliwiające zapisywanie liczb w różnych
systemach pozycyjnych. Ostatni z literałów ma dodatkowo
postać wykładniczą.
Ogólna postać takiego literału to
podstawa#liczba#[wykładnik]
(nawiasy kwadratowe oznaczają że wykładnik jest opcjonalny)
Agata Półrola Wydział Matematyki i Informatyki UŁ
Literały całkowite
przykłady
literałów całkowitych
:
13, 0, -2, +4, 1 234, 23 45, 15E5, 1e8,
2#100 111#, 16#1a#, 2#11 001#e2.
Znaczenie:
podkreślenie zastępuje spację (1 234 567 zapiszemy jako
1 234 567)
literały postaci 15e5 (z małą lub wielką literą E) przedstawiają
liczby
w postaci wykładniczej
. Interpretacja liczby postaci aEb
to a · 10
b
(czyli 15e5 to 15 · 10
5
)
literały 2#100 111#, 16#1a#, 2#11001#e2 to
literały z
podstawą
, umożliwiające zapisywanie liczb w różnych
systemach pozycyjnych. Ostatni z literałów ma dodatkowo
postać wykładniczą.
Ogólna postać takiego literału to
podstawa#liczba#[wykładnik]
(nawiasy kwadratowe oznaczają że wykładnik jest opcjonalny)
Agata Półrola Wydział Matematyki i Informatyki UŁ
Literały całkowite
przykłady
literałów całkowitych
:
13, 0, -2, +4, 1 234, 23 45, 15E5, 1e8,
2#100 111#, 16#1a#, 2#11 001#e2.
Znaczenie:
podkreślenie zastępuje spację (1 234 567 zapiszemy jako
1 234 567)
literały postaci 15e5 (z małą lub wielką literą E) przedstawiają
liczby
w postaci wykładniczej
. Interpretacja liczby postaci aEb
to a · 10
b
(czyli 15e5 to 15 · 10
5
)
literały 2#100 111#, 16#1a#, 2#11001#e2 to
literały z
podstawą
, umożliwiające zapisywanie liczb w różnych
systemach pozycyjnych. Ostatni z literałów ma dodatkowo
postać wykładniczą.
Ogólna postać takiego literału to
podstawa#liczba#[wykładnik]
(nawiasy kwadratowe oznaczają że wykładnik jest opcjonalny)
Agata Półrola Wydział Matematyki i Informatyki UŁ
Jeszcze o literałach z podstawą:
Dopuszczalne (w języku Ada) podstawy to liczby całkowite od 2 do 16. Cyfry używane
do zapisu liczb to 0..9, A, B, ..., F, gdzie litery A..F reprezentują cyfry 10..16. W
zapisie liczby o podstawie X używamy cyfr 0..X-1.
Interpretacja liczby zapisanej w dowolnym systemie pozycyjnym o
podstawie p:
liczba c
i
c
i −1
...c
1
c
0
(gdzie c
i −1
, ..., c
0
to cyfry) jest interpretowana
jako c
i
· p
i
+ c
i −1
· p
i −1
+ . . . + c
1
· p
1
+ c
0
· p
0
Przykład
2#111011#, czyli liczba 111011
2
to
1 · 2
5
+ 1 · 2
4
+ 1 · 2
3
+ 0 · 2
2
+ 1 · 2
1
+ 1 · 2
0
, czyli 59
16#AE#, czyli liczba AE
16
, to 10 · 16
1
+ 15 · 16
0
, czyli 174.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Jeszcze o literałach z podstawą:
Dopuszczalne (w języku Ada) podstawy to liczby całkowite od 2 do 16. Cyfry używane
do zapisu liczb to 0..9, A, B, ..., F, gdzie litery A..F reprezentują cyfry 10..16. W
zapisie liczby o podstawie X używamy cyfr 0..X-1.
Interpretacja liczby zapisanej w dowolnym systemie pozycyjnym o
podstawie p:
liczba c
i
c
i −1
...c
1
c
0
(gdzie c
i −1
, ..., c
0
to cyfry) jest interpretowana
jako c
i
· p
i
+ c
i −1
· p
i −1
+ . . . + c
1
· p
1
+ c
0
· p
0
Przykład
2#111011#, czyli liczba 111011
2
to
1 · 2
5
+ 1 · 2
4
+ 1 · 2
3
+ 0 · 2
2
+ 1 · 2
1
+ 1 · 2
0
, czyli 59
16#AE#, czyli liczba AE
16
, to 10 · 16
1
+ 15 · 16
0
, czyli 174.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Jeszcze o literałach z podstawą:
Dopuszczalne (w języku Ada) podstawy to liczby całkowite od 2 do 16. Cyfry używane
do zapisu liczb to 0..9, A, B, ..., F, gdzie litery A..F reprezentują cyfry 10..16. W
zapisie liczby o podstawie X używamy cyfr 0..X-1.
Interpretacja liczby zapisanej w dowolnym systemie pozycyjnym o
podstawie p:
liczba c
i
c
i −1
...c
1
c
0
(gdzie c
i −1
, ..., c
0
to cyfry) jest interpretowana
jako c
i
· p
i
+ c
i −1
· p
i −1
+ . . . + c
1
· p
1
+ c
0
· p
0
Przykład
2#111011#, czyli liczba 111011
2
to
1 · 2
5
+ 1 · 2
4
+ 1 · 2
3
+ 0 · 2
2
+ 1 · 2
1
+ 1 · 2
0
, czyli 59
16#AE#, czyli liczba AE
16
, to 10 · 16
1
+ 15 · 16
0
, czyli 174.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Jeszcze o literałach z podstawą:
Dopuszczalne (w języku Ada) podstawy to liczby całkowite od 2 do 16. Cyfry używane
do zapisu liczb to 0..9, A, B, ..., F, gdzie litery A..F reprezentują cyfry 10..16. W
zapisie liczby o podstawie X używamy cyfr 0..X-1.
Interpretacja liczby zapisanej w dowolnym systemie pozycyjnym o
podstawie p:
liczba c
i
c
i −1
...c
1
c
0
(gdzie c
i −1
, ..., c
0
to cyfry) jest interpretowana
jako c
i
· p
i
+ c
i −1
· p
i −1
+ . . . + c
1
· p
1
+ c
0
· p
0
Przykład
2#111011#, czyli liczba 111011
2
to
1 · 2
5
+ 1 · 2
4
+ 1 · 2
3
+ 0 · 2
2
+ 1 · 2
1
+ 1 · 2
0
, czyli 59
16#AE#, czyli liczba AE
16
, to 10 · 16
1
+ 15 · 16
0
, czyli 174.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Przykład (Literały całkowite - przykłady)
p r o c e d u r e w 0 2 p 3 1 i s
a , b :
i n t e g e r ;
b e g i n
a : = 1 2 ;
b :=+4;
a :=1 1 2 3 4 ;
b :=12 e0 2 ;
a :=12 3 4 ;
b :=1 e8 ;
a :=15 e5 ;
b:=16#1 a #;
a :=2#100 1 1 1 #;
b:=2#11001# e2 ;
a :=7#206#;
b :=2#111011#;
a:=16# a e #;
end w 0 2 p 3 1 ;
Agata Półrola Wydział Matematyki i Informatyki UŁ
Literały rzeczywiste
Literał rzeczywisty
to literał numeryczny zawierający kropkę
dziesiętną (literały całkowite nie zawierają kropek).
Przykłady literałów rzeczywistych:
13.3, 0.0, -2.1, +4.2, 1 234.2, 23 45.3, 15.4E5,
1.2e8, 2#100 111.11#, 16#1a.b#, 2#11 001.1#e2.
Interpretacja powyższych zapisów jest analogiczna jak dla literałów
całkowitych.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Literały rzeczywiste
Literał rzeczywisty
to literał numeryczny zawierający kropkę
dziesiętną (literały całkowite nie zawierają kropek).
Przykłady literałów rzeczywistych:
13.3, 0.0, -2.1, +4.2,
1 234.2, 23 45.3, 15.4E5,
1.2e8, 2#100 111.11#, 16#1a.b#, 2#11 001.1#e2.
Interpretacja powyższych zapisów jest analogiczna jak dla literałów
całkowitych.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Literały rzeczywiste
Literał rzeczywisty
to literał numeryczny zawierający kropkę
dziesiętną (literały całkowite nie zawierają kropek).
Przykłady literałów rzeczywistych:
13.3, 0.0, -2.1, +4.2, 1 234.2, 23 45.3,
15.4E5,
1.2e8, 2#100 111.11#, 16#1a.b#, 2#11 001.1#e2.
Interpretacja powyższych zapisów jest analogiczna jak dla literałów
całkowitych.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Literały rzeczywiste
Literał rzeczywisty
to literał numeryczny zawierający kropkę
dziesiętną (literały całkowite nie zawierają kropek).
Przykłady literałów rzeczywistych:
13.3, 0.0, -2.1, +4.2, 1 234.2, 23 45.3, 15.4E5,
1.2e8,
2#100 111.11#, 16#1a.b#, 2#11 001.1#e2.
Interpretacja powyższych zapisów jest analogiczna jak dla literałów
całkowitych.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Literały rzeczywiste
Literał rzeczywisty
to literał numeryczny zawierający kropkę
dziesiętną (literały całkowite nie zawierają kropek).
Przykłady literałów rzeczywistych:
13.3, 0.0, -2.1, +4.2, 1 234.2, 23 45.3, 15.4E5,
1.2e8, 2#100 111.11#, 16#1a.b#,
2#11 001.1#e2.
Interpretacja powyższych zapisów jest analogiczna jak dla literałów
całkowitych.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Literały rzeczywiste
Literał rzeczywisty
to literał numeryczny zawierający kropkę
dziesiętną (literały całkowite nie zawierają kropek).
Przykłady literałów rzeczywistych:
13.3, 0.0, -2.1, +4.2, 1 234.2, 23 45.3, 15.4E5,
1.2e8, 2#100 111.11#, 16#1a.b#, 2#11 001.1#e2.
Interpretacja powyższych zapisów jest analogiczna jak dla literałów
całkowitych.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Literały rzeczywiste
Literał rzeczywisty
to literał numeryczny zawierający kropkę
dziesiętną (literały całkowite nie zawierają kropek).
Przykłady literałów rzeczywistych:
13.3, 0.0, -2.1, +4.2, 1 234.2, 23 45.3, 15.4E5,
1.2e8, 2#100 111.11#, 16#1a.b#, 2#11 001.1#e2.
Interpretacja powyższych zapisów jest analogiczna jak dla literałów
całkowitych.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Przykład (Literały rzeczywiste - przykłady)
p r o c e d u r e w 0 2 p 3 2 i s
c : f l o a t ;
b e g i n
c : = 1 2 . 1 2 ;
c :=−12 1 2 2 . 0 ;
c :=16#12.EA#;
c :=16#1 a . b#;
c :=2#11001.1# e2 ;
c :=3#122.0# e5 ;
end w 0 2 p 3 2 ;
Agata Półrola Wydział Matematyki i Informatyki UŁ
Wypisywanie literałów
W celu wypisania literałów numerycznych musimy użyć zasobów
odpowiedniego pakietu.
Literały całkowite są typu
universal integer
. Do ich
wypisywania używamy procedury
put
z pakietu
ada.integer text io
Literały rzeczywiste są typu
universal real
. Do ich wypisywania
używamy procedury
put
z pakietu
ada.float text io
.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Wypisywanie literałów
W celu wypisania literałów numerycznych musimy użyć zasobów
odpowiedniego pakietu.
Literały całkowite są typu
universal integer
. Do ich
wypisywania używamy procedury
put
z pakietu
ada.integer text io
Literały rzeczywiste są typu
universal real
. Do ich wypisywania
używamy procedury
put
z pakietu
ada.float text io
.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Wypisywanie literałów
W celu wypisania literałów numerycznych musimy użyć zasobów
odpowiedniego pakietu.
Literały całkowite są typu
universal integer
. Do ich
wypisywania używamy procedury
put
z pakietu
ada.integer text io
Literały rzeczywiste są typu
universal real
. Do ich wypisywania
używamy procedury
put
z pakietu
ada.float text io
.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Przykład (Literały całkowite)
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 ;
p r o c e d u r e w02 p4
i s
b e g i n
ada . t e x t i o . p u t ( ” −−−− p r o g r a m w y p i s u j a c y
l i c z b e
22 ” ) ;
ada . i n t e g e r t e x t i o . p u t ( i t e m = >22);
ada . t e x t i o . p u t ( ” −−−−” ) ;
ada . t e x t i o . n e w l i n e ( 2 ) ;
ada . t e x t i o . p u t ( ” l i c z b a ” ) ;
ada . i n t e g e r t e x t i o . p u t ( 2 2 ,
w i d t h =>0);
ada . t e x t i o . p u t ( ” z a p i s a n a w s y s t e m i e dwojkowym t o ” ) ;
ada . i n t e g e r t e x t i o . p u t ( i t e m => 2 2 , w i d t h =>0, b a s e =>2);
ada . t e x t i o . p u t ( ” z a p i s a n a w s y s t e m i e
s z e s n a s t k o w y m t o ” ) ;
ada . i n t e g e r t e x t i o . p u t ( 2 2 , 0 , 1 6 ) ;
ada . T e x t I O . n e w l i n e ;
ada . i n t e g e r t e x t i o . p u t ( 2 2 ,
b a s e =>6);
end w02 p4 ;
Agata Półrola Wydział Matematyki i Informatyki UŁ
Uwagi do przykładu
we wszystkich trzech przypadkach została użyta ta sama
procedura
procedura ada.integer text io.put ma trzy
parametry
o
nazwach item, width i base. Item to wypisywana wartość,
width to szerokość obszaru wypisywania, base to podstawa
wypisywanej liczby.
dwa ostatnie parametry procedury mają wartości domyślne,
więc można ich nie podawać
Agata Półrola Wydział Matematyki i Informatyki UŁ
Podawanie wartości parametrów procedur
Procedury mają często kilka parametrów. Każdy parametr ma swoją
nazwę. Niektóre parametry mają ponadto wartości domyślne.
put(item, width, base), gdzie width i base mają wartości domyślne
Używając procedury (
wywołując
ją), musimy podać wartości dla
parametrów nie mających wartości domyślnych, i możemy podać
wartości dla pozostałych
jeśli przy podawaniu wartości nie użyjemy nazw parametrów -
istotna jest kolejność (
notacja pozycyjna
)
put(14, 4, 2) oznacza, że item ma wartość 14, width wartość 4, a
base wartość 2
jeśli użyjemy nazw wszystkich parametrów - kolejność
podawania wartości nie ma znaczenia (
notacja nazywana
)
put(base=>2, item=>14, width=>4), put(width=>2, item=>12)
można użyć notacji mieszanej - dla początkowych parametrów
pozycyjnej, dla dalszych nazywanej (
put(12, base=>2)
)
Agata Półrola Wydział Matematyki i Informatyki UŁ
Podawanie wartości parametrów procedur
Procedury mają często kilka parametrów. Każdy parametr ma swoją
nazwę. Niektóre parametry mają ponadto wartości domyślne.
put(item, width, base), gdzie width i base mają wartości domyślne
Używając procedury (
wywołując
ją), musimy podać wartości dla
parametrów nie mających wartości domyślnych, i możemy podać
wartości dla pozostałych
jeśli przy podawaniu wartości nie użyjemy nazw parametrów -
istotna jest kolejność (
notacja pozycyjna
)
put(14, 4, 2) oznacza, że item ma wartość 14, width wartość 4, a
base wartość 2
jeśli użyjemy nazw wszystkich parametrów - kolejność
podawania wartości nie ma znaczenia (
notacja nazywana
)
put(base=>2, item=>14, width=>4), put(width=>2, item=>12)
można użyć notacji mieszanej - dla początkowych parametrów
pozycyjnej, dla dalszych nazywanej (
Agata Półrola Wydział Matematyki i Informatyki UŁ
Rozróżnianie procedur
W przykładzie dołączaliśmy pakiety ada.text io i
ada.integer text io; oba zawierają procedury put
Jeśli użyjemy klauzuli use i pominiemy przy wywołaniach
nazwy pakietów z których pochodzą procedury, program nadal
będzie poprawny.
Kompilator “domyśla się” którą procedurę mieliśmy na myśli w
danym wywołaniu na podstawie typów wartości przypisanych
parametrom, lub na podstawie liczby parametrów.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Rozróżnianie procedur
W przykładzie dołączaliśmy pakiety ada.text io i
ada.integer text io; oba zawierają procedury put
Jeśli użyjemy klauzuli use i pominiemy przy wywołaniach
nazwy pakietów z których pochodzą procedury, program nadal
będzie poprawny.
Kompilator “domyśla się” którą procedurę mieliśmy na myśli w
danym wywołaniu na podstawie typów wartości przypisanych
parametrom, lub na podstawie liczby parametrów.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Rozróżnianie procedur
W przykładzie dołączaliśmy pakiety ada.text io i
ada.integer text io; oba zawierają procedury put
Jeśli użyjemy klauzuli use i pominiemy przy wywołaniach
nazwy pakietów z których pochodzą procedury, program nadal
będzie poprawny.
Kompilator “domyśla się” którą procedurę mieliśmy na myśli w
danym wywołaniu na podstawie typów wartości przypisanych
parametrom, lub na podstawie liczby parametrów.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Przykład
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 2 p 4 1
i s
b e g i n
p u t ( ” −−−− p r o g r a m w y p i s u j a c y
l i c z b e ” ) ;
p u t ( 2 2 , 8 ) ;
p u t ( ” −−−−” ) ;
n e w l i n e ( 2 ) ;
p u t ( ” l i c z b a ” ) ;
p u t ( 2 2 ,
w i d t h =>0);
p u t ( ” z a p i s a n a w s y s t e m i e dwojkowym t o ” ) ;
p u t ( 2 2 , 0 , 2 ) ;
end w 0 2 p 4 1 ;
Agata Półrola Wydział Matematyki i Informatyki UŁ
Przykład (Literały rzeczywiste)
w i t h ada . t e x t i o ,
ada . f l o a t t e x t i o ;
p r o c e d u r e w02 p5
i s
b e g i n
ada . t e x t i o . p u t ( ” −−−− p r o g r a m w y p i s u j a c y
l i c z b e ” ) ;
ada . f l o a t t e x t i o . p u t ( 2 2 . 2 ) ;
ada . t e x t i o . p u t ( ” −−−−” ) ;
ada . t e x t i o . n e w l i n e ( 2 ) ;
ada . t e x t i o . p u t ( ” l i c z b a ” ) ;
ada . f l o a t t e x t i o . p u t ( 2 2 . 2 ,
e x p =>0);
ada . t e x t i o . p u t ( ” moze b y c w y p i s a n a t a k : ” ) ;
ada . f l o a t t e x t i o . p u t ( 2 2 . 2 ) ;
ada . t e x t i o . p u t ( ” a l b o np .
t a k : ” ) ;
ada . f l o a t t e x t i o . p u t ( i t e m = >22.2 , f o r e =>4, a f t =>2, e x p =>0);
ada . t e x t i o . p u t ( ” a l e
n i e moze b y c np .
w y p i s a n a ” &
”w s y s t e m i e dwojkowym : ” ) ;
end w02 p5 ;
Agata Półrola Wydział Matematyki i Informatyki UŁ
Uwagi do przykładu
Procedura ada.float text io.put ma cztery parametry, o
nazwach item, fore, aft i exp. Tylko pierwszy nie ma wartości
domyślnej.
Item to wypisywana wartość,
fore to liczba miejsc przed kropką dziesiętną w wypisywanej
liczbie,
aft to liczba miejsc po kropce,
exp to liczba miejsc w wykładniku
nadanie parametrowi exp wartości zero powoduje że liczba nie
zostanie wypisana w postaci wykładniczej
Agata Półrola Wydział Matematyki i Informatyki UŁ
Uwagi do przykładu
Procedura ada.float text io.put ma cztery parametry, o
nazwach item, fore, aft i exp. Tylko pierwszy nie ma wartości
domyślnej.
Item to wypisywana wartość,
fore to liczba miejsc przed kropką dziesiętną w wypisywanej
liczbie,
aft to liczba miejsc po kropce,
exp to liczba miejsc w wykładniku
nadanie parametrowi exp wartości zero powoduje że liczba nie
zostanie wypisana w postaci wykładniczej
Agata Półrola Wydział Matematyki i Informatyki UŁ
Typy liczbowe
W języku zdefiniowane są pewne (tzw.
predfiniowane
typy
liczbowe. Podstawowe to:
typ całkowity -
integer
(służący do reprezentowania liczb
całkowitych)
typ zmiennoprzecinkowy -
float
(służący do reprezentowania
liczb rzeczywistych)
Agata Półrola Wydział Matematyki i Informatyki UŁ
Zakresy typów
Wartości danego typu T są zapamiętywane przy użyciu pewnej
określonej dla danego typu liczby bitów
Z tego powodu każdy typ ma swój
zakres
- istnieje w nim wartość
największa i najmniejsza
Najmniejsza liczba w typie T to T’first, największa to T’last
Agata Półrola Wydział Matematyki i Informatyki UŁ
Zakresy typów
Wartości danego typu T są zapamiętywane przy użyciu pewnej
określonej dla danego typu liczby bitów
Z tego powodu każdy typ ma swój
zakres
- istnieje w nim wartość
największa i najmniejsza
Najmniejsza liczba w typie T to T’first, największa to T’last
Agata Półrola Wydział Matematyki i Informatyki UŁ
Zakresy typów
Wartości danego typu T są zapamiętywane przy użyciu pewnej
określonej dla danego typu liczby bitów
Z tego powodu każdy typ ma swój
zakres
- istnieje w nim wartość
największa i najmniejsza
Najmniejsza liczba w typie T to T’first, największa to T’last
Agata Półrola Wydział Matematyki i Informatyki UŁ
Przykład (Jak poznać zakres typu integer?)
w i t h ada . i n t e g e r t e x t i o ,
ada . t e x t i o ;
u s e
ada . i n t e g e r t e x t i o ,
ada . t e x t i o ;
p r o c e d u r e w02 p6
i s
b e g i n
p u t ( ” n a j m n i e j s z a
l i c z b a w t y p i e
i n t e g e r
t o ” ) ;
p u t ( i n t e g e r ’ f i r s t , w i d t h =>0);
p u t ( ” a n a j w i e k s z a
t o ” ) ;
p u t ( i n t e g e r ’ l a s t ) ;
end w02 p6 ;
Agata Półrola Wydział Matematyki i Informatyki UŁ
Inne predefiniowane typy liczowe
typy całkowite (zależnie od implementacji):
long integer
long long integer
short integer
short short integer
typy rzeczywiste (zależnie od implementacji):
long float
long long float
short float
short short float
(tego w naszym przypadku nie ma)
Agata Półrola Wydział Matematyki i Informatyki UŁ
Zmienne
Aby móc zapamiętać (przechować) wprowadzoną z klawiatury lub
wyliczoną w programie wartość pewnego typu, musimy
zadeklarować
zmienną
tego typu
w tym celu w części deklaracyjnej programu piszemy
nazwa zmiennej:
typ;
(np. i:
integer; )
wynik: w odpowienim momencie uruchamiania programu w
pamięci zostaje zarezerwowany pewien obszar o rozmiarze
odpowiednim dla przechowania wartości danego typu.
Odwołujemy się do niego przez nazwę zmiennej.
można zadeklarować na raz kilka zmiennych tego samego
typu:
j, f, ile :
integer;
Agata Półrola Wydział Matematyki i Informatyki UŁ
Zmienne
Aby móc zapamiętać (przechować) wprowadzoną z klawiatury lub
wyliczoną w programie wartość pewnego typu, musimy
zadeklarować
zmienną
tego typu
w tym celu w części deklaracyjnej programu piszemy
nazwa zmiennej:
typ;
(np. i:
integer; )
wynik: w odpowienim momencie uruchamiania programu w
pamięci zostaje zarezerwowany pewien obszar o rozmiarze
odpowiednim dla przechowania wartości danego typu.
Odwołujemy się do niego przez nazwę zmiennej.
można zadeklarować na raz kilka zmiennych tego samego
typu:
j, f, ile :
integer;
Agata Półrola Wydział Matematyki i Informatyki UŁ
Wartość zmiennej może ulegać zmianie podczas działania
programu
Instrukcja przypisania
(
:=
) pozwala nadać zmiennej pewną
wartość
Przypisywana wartość musi mieścić się w zakresie typu,
inaczej dostaniemy błąd
zmienna, której nie przypisano w programie żadnej wartości,
ma wartość przypadkową
Agata Półrola Wydział Matematyki i Informatyki UŁ
Wartość zmiennej może ulegać zmianie podczas działania
programu
Instrukcja przypisania
(
:=
) pozwala nadać zmiennej pewną
wartość
Przypisywana wartość musi mieścić się w zakresie typu,
inaczej dostaniemy błąd
zmienna, której nie przypisano w programie żadnej wartości,
ma wartość przypadkową
Agata Półrola Wydział Matematyki i Informatyki UŁ
Przykład (Użycie instrukcji przypisania)
deklaracje zmiennych: a,b,i:
integer;
i := 2;
a := 2+2;
b := a+i;
weź wartość zmiennej a, dodaj do niej wartość zmiennej i, otrzymany wynik
przypisz zmiennej b
a := a + 5;
weż wartość zmiennej a, dodaj do niej 5, otrzymany wynik przypisz z powrotem
zmiennej a
Agata Półrola Wydział Matematyki i Informatyki UŁ
Przykład (Użycie zmiennych)
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 2 p 7 1
i s
a , b , c :
i n t e g e r ;
b e g i n
a : = 1 0 ;
b : = 2 ;
ada . t e x t i o . p u t ( ”Mamy l i c z b y A = ” ) ;
ada . i n t e g e r t e x t i O . p u t ( a , w i d t h =>0);
ada . t e x t i o . p u t ( ” i B = ” ) ;
ada . i n t e g e r t e x t i O . p u t ( b , w i d t h =>0);
ada . t e x t i o . n e w l i n e ;
c := a+b ;
ada . t e x t i o . p u t ( ”Suma A i B w y n o s i ” ) ;
p u t ( c , w i d t h =>0);
end w 0 2 p 7 1 ;
Agata Półrola Wydział Matematyki i Informatyki UŁ
Wartość początkowa zmiennej
Zmiennej możemy przypisać wartość już w momencie jej
deklarowania (
inicjalizacja zmiennej
). Przypisywana wartość musi
mieścić się w zakresie typu, inaczej dostaniemy błąd.
Postać:
nazwa zmiennej :
typ := wyrażenie;
Przykład
i:
integer := 0;
s:
float := 2.5234 + 3.234;
k,l,m :
integer := 100;
wszystkie trzy zmienne zostaną zainicjowane wartością 100
zmienna oczywiście nadal pozostaje zmienną, czyli jej wartość może ulegać zmianie
podczas działania programu
Agata Półrola Wydział Matematyki i Informatyki UŁ
Wartość początkowa zmiennej
Zmiennej możemy przypisać wartość już w momencie jej
deklarowania (
inicjalizacja zmiennej
). Przypisywana wartość musi
mieścić się w zakresie typu, inaczej dostaniemy błąd.
Postać:
nazwa zmiennej :
typ := wyrażenie;
Przykład
i:
integer := 0;
s:
float := 2.5234 + 3.234;
k,l,m :
integer := 100;
wszystkie trzy zmienne zostaną zainicjowane wartością 100
zmienna oczywiście nadal pozostaje zmienną, czyli jej wartość może ulegać zmianie
podczas działania programu
Agata Półrola Wydział Matematyki i Informatyki UŁ
Przykład (Wartości początkowe zmiennych)
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 w02 p8
i s
a , B : i n t e g e r : = 3 ;
c : i n t e g e r := a ∗ b ;
−− i n i c j a l i z a c j a
w a r t o s c i a 9
b e g i n
a : = 1 2 ;
p u t ( a ) ;
−− w y p i s z e 12
p u t ( b ) ;
−− w y p i s z e 3
p u t ( c ) ;
−− w y p i s z e
9 − mimo z m i a n y
w a r t o s c i A
−−
w a r t o s c C s i e
n i e
z m i e n i l a
end w02 p8 ;
Agata Półrola Wydział Matematyki i Informatyki UŁ
Stałe
Oprócz zmiennych możemy w programie używać także
stałych
.
Stałe nie mogą zmieniać swojej wartości. Wartość nadajmy im w
momencie deklaracji.
w części deklaracyjnej programu piszemy
nazwa stałej : constant typ := wyrażenie;
lub
nazwa stałej : constant := wyrażenie;
w drugim przypadku stała przyjmuje typ universal integer lub
universal real, zależnie od rodzaju wyrażenia
Przykład
Deklaracje stałych
procent podatku :
constant integer := 18;
przyspieszenie ziemskie :
constant := 9.80665;
Agata Półrola Wydział Matematyki i Informatyki UŁ
Stałe
Oprócz zmiennych możemy w programie używać także
stałych
.
Stałe nie mogą zmieniać swojej wartości. Wartość nadajmy im w
momencie deklaracji.
w części deklaracyjnej programu piszemy
nazwa stałej : constant typ := wyrażenie;
lub
nazwa stałej : constant := wyrażenie;
w drugim przypadku stała przyjmuje typ universal integer lub
universal real, zależnie od rodzaju wyrażenia
Przykład
Deklaracje stałych
procent podatku :
constant integer := 18;
przyspieszenie ziemskie :
constant := 9.80665;
Agata Półrola Wydział Matematyki i Informatyki UŁ
Przykład (Użycie stałej)
w i t h ada . t e x t i o ,
ada . f l o a t t e x t i o ;
u s e ada . t e x t i o ,
ada . f l o a t t e x t i o ;
p r o c e d u r e w02 p9
i s
c e n a n e t t o ,
c e n a b r u t t o :
f l o a t ;
VAT :
c o n s t a n t
f l o a t : = 0 . 2 3 ;
b e g i n
p u t ( ” p o d a j c e n e
n e t t o : ” ) ;
g e t ( c e n a n e t t o ) ;
c e n a b r u t t o := c e n a n e t t o + c e n a n e t t o ∗VAT ;
p u t ( ” c e n a
b r u t t o
w y n o s i
: ” ) ;
p u t ( c e n a b r u t t o ,
e x p =>0, a f t =>2);
end w02 p9 ;
Agata Półrola Wydział Matematyki i Informatyki UŁ
Operacje wejścia/wyjścia dla zmiennych i stałych
Pobieranie i wypisywanie wartości zmiennych
Aby pobrać wartość zmiennej (np. z klawiatury) lub wypisać
wartość zmiennej albo stałej (np. na ekran) musimy użyć zasobów
odpowiedniego pakietu
dla typu integer - pakietu ada.integer text io
dla typu float - pakietu ada.float text io
dla typu long integer - pakietu
ada.long integer text io
dla typu long float - pakietu ada.long float text io itd.
Niektóre implementacje Ady mogą nie udostępniać gotowych pakietów dla wszystkich
w/w typów. Musimy wtedy dokonać odpowiedniej
konkretyzacji
pakietu
ada.text io.integer io lub ada.text io.float io.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Operacje wejścia/wyjścia dla zmiennych i stałych
Pobieranie i wypisywanie wartości zmiennych
Aby pobrać wartość zmiennej (np. z klawiatury) lub wypisać
wartość zmiennej albo stałej (np. na ekran) musimy użyć zasobów
odpowiedniego pakietu
dla typu integer - pakietu ada.integer text io
dla typu float - pakietu ada.float text io
dla typu long integer - pakietu
ada.long integer text io
dla typu long float - pakietu ada.long float text io itd.
Niektóre implementacje Ady mogą nie udostępniać gotowych pakietów dla wszystkich
w/w typów. Musimy wtedy dokonać odpowiedniej
konkretyzacji
pakietu
ada.text io.integer io lub ada.text io.float io.
Agata Półrola Wydział Matematyki i Informatyki UŁ
Przykład (Konkretyzacja)
w i t h ada . t e x t i o ;
u s e
ada . t e x t i o ;
p r o c e d u r e w02 p10
i s
p a c k a g e
i i
i s new ada . t e x t i o . f l o a t i o ( s h o r t f l o a t ) ;
u s e
i i ;
b e g i n
p u t ( ” n a j m n i e j s z a
l i c z b a w t y p i e
s h o r t f l o a t
t o ” ) ;
i i . p u t ( s h o r t f l o a t ’ f i r s t ) ;
p u t ( ” a n a j w i e k s z a
t o ” ) ;
p u t ( s h o r t f l o a t ’ l a s t ) ;
end w02 p10 ;
Agata Półrola Wydział Matematyki i Informatyki UŁ
Każdy z w/w pakietów zawiera:
procedurę
put
dla odpowiedniego typu, umożliwiającą
wypisanie na ekran wartości zmiennej lub stałej tego typu
procedurę
get
dla odpowiedniego typu, umożliwiającą
pobranie z klawiatury wartości zmiennej tego typu
działanie procedury get: jeśli bufor klawiatury jest pusty, procedura
zatrzymuje program do momentu wprowadzenia do bufora danych
(zakończonych znakiem końca linii, czyli klawiszem Enter); jeśli bufor nie
jest pusty - czyta wartość z bufora bez oczekiwania na podanie danych
przez użytkownika. Czytanie przebiega następująco: początkowe białe
znaki (spacje, znaki końca linii, znak tabulatora) są pomijane, czytana
zmienna przyjmuje wartość odpowiadającą literałowi złożonemu ze
znaków przeczytanych do napotkania pierwszego “nieodpowiedniego”
znaku. Wprowadzone z klawiatury “nieodpowiednie” znaki (np. końcowy
znak końca linii wprowadzony przy wciskaniu Enter) zostają w buforze
Agata Półrola Wydział Matematyki i Informatyki UŁ
Wyrażenia arytmetyczne
Wyrażenia
konstruuje się z literałów, nazw obiektów (tj. nazw
stałych i zmiennych) oraz operatorów arytmetycznych.
Wyrażenia służą do obliczania wartości, które przypisujemy stałym
lub zmiennym, lub wyprowadzamy np. na ekran.
pojedyncza zmienna lub literał to także wyrażenie
Agata Półrola Wydział Matematyki i Informatyki UŁ
Operatory używane w wyrażeniach
Podstawowe operatory używane w wyrażeniach
arytmetycznych to
+ - * /
Kolejność działań jest standardowa (standardowy priorytet
operatorów), można używać także nawiasów grupujących
Ada nie pozwala na “mieszanie” w jednym wyrażeniu
elementów różnych typów
np. wyrażenie 2.3*2 jst niepoprawne, poprawna wersja to
2.3*2.0
Typ wyniku jest taki sam jak typ argumentów użytych w
wyrażeniu
uwaga -
dzielenie dwóch liczb całkowitych jest w takim
razie dzieleniem całkowitym
Agata Półrola Wydział Matematyki i Informatyki UŁ
Operatory używane w wyrażeniach
Podstawowe operatory używane w wyrażeniach
arytmetycznych to
+ - * /
Kolejność działań jest standardowa (standardowy priorytet
operatorów), można używać także nawiasów grupujących
Ada nie pozwala na “mieszanie” w jednym wyrażeniu
elementów różnych typów
np. wyrażenie 2.3*2 jst niepoprawne, poprawna wersja to
2.3*2.0
Typ wyniku jest taki sam jak typ argumentów użytych w
wyrażeniu
uwaga -
dzielenie dwóch liczb całkowitych jest w takim
razie dzieleniem całkowitym
Agata Półrola Wydział Matematyki i Informatyki UŁ
Inne operatory arytmetyczne
operator
rem
(remainder) pozwala na znalezienie reszty z
dzielenia całkowitego
definicja operatora: A = (A/B) · B + (A rem B)
przy czym | A rem B |<| B | i A rem B ma ten sam znak co A
operator
mod
działa w podobny sposób
definicja operatora: A = B · N + (A mod B) dla pewnego
całkowitego N
przy czym | A mod B |<| B | i A mod B ma ten sam znak co B
Powyższe operatory zdefiniowane są tylko dla typów całkowitych
Agata Półrola Wydział Matematyki i Informatyki UŁ
Inne operatory arytmetyczne
operator
rem
(remainder) pozwala na znalezienie reszty z
dzielenia całkowitego
definicja operatora: A = (A/B) · B + (A rem B)
przy czym | A rem B |<| B | i A rem B ma ten sam znak co A
operator
mod
działa w podobny sposób
definicja operatora: A = B · N + (A mod B) dla pewnego
całkowitego N
przy czym | A mod B |<| B | i A mod B ma ten sam znak co B
Powyższe operatory zdefiniowane są tylko dla typów całkowitych
Agata Półrola Wydział Matematyki i Informatyki UŁ
Inne operatory arytmetyczne
operator
rem
(remainder) pozwala na znalezienie reszty z
dzielenia całkowitego
definicja operatora: A = (A/B) · B + (A rem B)
przy czym | A rem B |<| B | i A rem B ma ten sam znak co A
operator
mod
działa w podobny sposób
definicja operatora: A = B · N + (A mod B) dla pewnego
całkowitego N
przy czym | A mod B |<| B | i A mod B ma ten sam znak co B
Powyższe operatory zdefiniowane są tylko dla typów całkowitych
Agata Półrola Wydział Matematyki i Informatyki UŁ
Inne operatory arytmetyczne - cd
Ada umożliwia również potęgowanie (operator **)
podstawa potęgi może być typu całkowitego lub
zmiennoprzecinkowego
wykladnik potęgi musi być liczbą całkowitą (dla
podstawy całkowitej - dodatkowo nieujemną)
Agata Półrola Wydział Matematyki i Informatyki UŁ
Przykład (Operacje arytmetyczne)
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 w02 p11
i s
L1 , L2 :
i n t e g e r ;
b e g i n
p u t ( ” p o d a j d w i e
l i c z b y :
” ) ;
g e t ( L1 ) ;
g e t ( L2 ) ;
p u t ( ” d r u g a
l i c z b a
m i e s c i
s i e w p i e r w s z e j . . .
” ) ;
p u t ( L1 / L2 ) ; p u t l i n e ( ” r a z y ” ) ;
p u t ( ” r e s z t a
z
d z i e l e n i a
w y n o s i . . .
” ) ;
p u t ( L1 rem L2 ) ;
n e w l i n e ;
p u t ( ” k w a d r a t
p i e r w s z e j
l i c z b y
t o . . .
” ) ;
p u t ( L1 ∗ ∗ 2 ) ;
e x c e p t i o n
when o t h e r s => p u t ( ”
! ! ! !
z l e
d a n e
! ! ! ! ” ) ;
end w02 p11 ;
Agata Półrola Wydział Matematyki i Informatyki UŁ
Konwersja typów
Zastosowanie w jednym wyrażeniu zmiennych różnych typów
wymaga
konwersji typów
.
Konwersja do typu T:
T(wyrażenie innego typu)
oczywiście nie każda konwersja jest możliwa i nie każda jest
sensowna
Agata Półrola Wydział Matematyki i Informatyki UŁ
Przykład (Operacje arytmetyczne, konwersja)
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 ,
ada . f l o a t 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 ,
ada . f l o a t t e x t i o ;
p r o c e d u r e w02 p12
i s
bok1 , bok2 ,
p o l e , obw ,
p o l e 2 :
f l o a t ;
i l e :
i n t e g e r ;
b e g i n
p u t ( ” p o d a j bok p r o s t o k a t a : ” ) ;
g e t ( bok1 ) ;
p u t ( ” p o d a j
d r u g i bok : ” ) ;
g e t ( bok2 ) ;
n e w l i n e ;
p o l e := bok1 ∗ bok2 ;
p u t ( ” p o l e
p r o s t o k a t a
w y n o s i ” ) ;
p u t ( p o l e , e x p =>0); n e w l i n e ;
obw : = 2 . 0 ∗ bok1 + 2 . 0 ∗ bok2 ;
p u t ( ” obwod p r o s t o k a t a
w y n o s i : ” ) ;
p u t ( obw , e x p =>0); n e w l i n e ;
p u t ( ” na
i l e
r o w n y c h
c z e s c i
c h c e s z
p o d z i e l i c
p r o s t o k a t ? ” ) ;
g e t ( i l e ) ;
p o l e 2 := p o l e / f l o a t ( i l e ) ;
p u t ( ” p o l e
k a z d e j
c z e s c i
w y n i e s i e ” ) ;
p u t ( p o l e 2 , e x p =>0);
end w02 p12 ;
Agata Półrola Wydział Matematyki i Informatyki UŁ
Podtypy
Jeśli chcemy ograniczyć zakres zmiennej, możemy zdefiniować
podtyp pewnego typu. Operacje wejścia/wyjścia dla podtypu
obsługiwane są przez pakiet dla typu bazowego
Agata Półrola Wydział Matematyki i Informatyki UŁ
Przykład (Podtypy)
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 w02 p13
i s
s u b t y p e D o d a t n i e D o 1 0
i s
i n t e g e r
r a n g e
1 . . 1 0 ;
L1 , L2 :
D o d a t n i e D o 1 0 ;
b e g i n
p u t ( ” p o d a j d w i e
l i c z b y :
” ) ;
g e t ( L1 ) ;
g e t ( L2 ) ;
p u t ( ” d r u g a
l i c z b a
m i e s c i
s i e w p i e r w s z e j . . .
” ) ;
p u t ( L1 / L2 ) ; p u t l i n e ( ” r a z y ” ) ;
p u t ( ” r e s z t a
z
d z i e l e n i a
w y n o s i . . .
” ) ;
p u t ( L1 rem L2 ) ;
n e w l i n e ;
p u t ( ” k w a d r a t
p i e r w s z e j
l i c z b y
t o . . .
” ) ;
p u t ( L1 ∗ ∗ 2 ) ;
e x c e p t i o n
when o t h e r s => p u t ( ”
! ! ! !
z l e
d a n e
! ! ! ! ” ) ;
end w02 p13 ;
Agata Półrola Wydział Matematyki i Informatyki UŁ