Wykłady 3 - 5 Typy danych w Pascalu Skalarne typy danych

Transkrypt

Wykłady 3 - 5 Typy danych w Pascalu Skalarne typy danych
Wykłady 3 - 5
Typy danych w Pascalu
• Typy danych w Pascalu
• Typy skalarne
• Typy strukturalne
• Skalarne
• Strukturalne
• Wskaźnikowe
Typy skalarne - uporządkowane i skończone zbiory wartości.
Typ skalarny w Pascalu to typ prosty albo typ real
Typy proste:
1. Typy elementarne - integer, char, Boolean, wyliczeniowy
2. Typy okrojone - ograniczenie zakresu typu elementarnego
Skalarne typy danych
Działania na typach skalarnych
• typy numeryczne
całkowite (integer, word, longint, short, byte)
rzeczywiste (real, single, double, extended)
• typ znakowy (char)
• typ logiczny (boolean)
• typ całkowity (integer, word, longint, short, byte)
12 -21
+ – * div mod
= <> < <= > >=
• typ rzeczywisty (real, single, double, extended)
12.3 2e-23
+ – * /
= <> < <= > >=
• typ znakowy (char)
’a’ ’b’ #123
= <> < <= > >=
• typ logiczny (boolean)
true false
not or and
Funkcje standardowe
abs(x)
sqr(x)
integer
real
Funkcje standardowe
integer
real
odd(i)
trunc(x)
round(x)
sin(x)
cos(x)
arctan(x)
exp(x)
ln(x)
sqrt(x)
real
= <>
real
ord(z)
chr(i)
true dla nieparzystych
trunc(2.7)=2
trunc(-2.7)=-2
trunc(x+0.5)
trunc(x-0.5)
char
integer
dla x>=0
dla x<0
integer
char
succ(i)
pred(i)
1
Liczby rzeczywiste
Liczby całkowite
Turbo Pascal
Turbo Pascal
typ
zakres
rozmiar
shortint
integer
longint
byte
word
-128..127
-32768..32767
-2147483648..214748647
0..255
0..65535
1
2
4
1
2
typ
zakres
dokładność
rozmiar
real
single
double
extended
comp
2.9E-39 .. 1.7E38
1.5E-45 .. 3.4E38
5.0E-324 .. 1.7E308
3.4E-4932 .. 1.1E4932
-9.2E18 .. 9.2E18
11-12
7-8
15-16
19-20
19-20
6
4
8
10
8
Java
Java
typ
zakres
rozmiar
typ
zakres
dokładność
rozm iar
byte
short
int
long
-128..127
-32768..32767
-2147483648..214748647
-2^63..2^63-1
1
2
4
8
float
double
1.5E-45 .. 3.4E38
5.0E-324 .. 1.7E308
7-8
15-16
4
8
Kod ASCII
Kod
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Znak
Null
Start Of Heading
Start of T ext
End of T ext
End Of Transmission
Enquiry
Acknowledge
Bell
Backspace
Horizontal Tab
Line Feed
Vertica l Tab
Form Feed
Carriage Return
Shift Out
Shift In
Data Link Escape
Device C ontrol 1 (XON)
Device C ontrol 2
Device C ontrol 3 (XOFF)
Device C ontrol 4
Negative Acknowledge
Synchronous Idle
End of T ransmission Block
Cancel
End of M edium
Substitute
Escape
File Separator
Group Separator
Record S eparator
Unit Separator
Kod
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Znak
(spacja)
!
”
#
$
%
&
‘
(
)
*
+
,
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
Kod
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
Standard ISO-8859
Znak
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
Kod
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
Znak
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
(delete)
Unicode
Jak wyświetlić tekst wielojęzyczny?
Jak wyświetlić różne alfabety?
(cyrylica, alfabety: hebrajski, chiński, japoński,
koreański czy tajlandzki)
Unicode - wspólny dla całego świata zestaw
znaków.
Strona
kodowa
iso-8859-1
J zyki
afrykanerski, alba ski, angielski, baskijski, du ski, fareski, fi ski, francuski, galicyjski,
hiszpa ski, irlandzki, islandzki, katalo ski, niderlandzki, niemiecki, norweski,
portugalski, szkocki, szwedzki, włoski
chorwacki, czeski, polski, rumu ski, serbski, słowacki, słowe ski, w gierski
esperanto, malta ski
esto ski, grenlandzki, lapo ski, litewski, łotewski
białoruski, bułgarski, macedo ski, rosyjski, serbski, ukrai ski
arabski
grecki
hebrajski
turecki
eskimoski, lapo ski
tajski
litewski, łotewski
breto ski, gaelicki, szkocki, walijski
iso-8859-2
iso-8859-3
iso-8859-4
iso-8859-5
iso-8859-6
iso-8859-7
iso-8859-8
iso-8859-9
iso-8859-10
iso-8859-11
iso-8859-13
iso-8859-14
Unicode
UTF-8
128 znaków (ASCII) kodowanych jest za pomocą 1 bajta.
1920 znaków (alfabety łaciński, grecki, armeński, hebrajski, arabski,
koptyjski i cyrylica) kodowanych jest za pomocą 2 bajtów.
63488 znaków (m.in. alfabety chiński i japoński) kodowanych jest za
pomocą 3 bajtów.
Pozostałe 2147418112 znaki (jeszcze nie przypisane) można
zakodować za pomocą 4, 5 lub 6 bajtów.
UCS-2
Wszystkie znaki zapisywane są za pomocą 2 bajtów. Kodowanie to
pozwala na zapisanie tylko 65536 początkowych znaków Unikodu.
UCS-4
Wszystkie znaki zapisywane są za pomocą 4 bajtów.
2
Unicode (UTF-8)
Kodowanie „polskich” znaków
Znak
00000000 – 0000007F:
0xxxxxxx
00000080 – 000007FF:
110xxxxx 10xxxxxx
ł
ó
00000800 – 0000FFFF:
1110xxxx 10xxxxxx 10xxxxxx
00010000 – 001FFFFF:
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
00200000 – 03FFFFFF:
111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
04000000 – 7FFFFFFF:
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
Ł
Ó
Typy strukturalne w Pascalu
ISO 8859-2
161
198
202
163
209
211
166
172
175
177
230
234
179
241
243
182
188
191
CP-1250
165
198
202
163
209
211
140
143
175
185
230
234
179
241
243
156
159
191
Unicode
261
263
281
322
324
211
347
378
380
260
262
280
321
323
243
346
377
379
UTF-8
196 133
196 135
196 153
197 130
197 132
195 179
197 155
197 186
197 188
196 132
196 134
196 152
197 129
197 131
195 147
197 154
197 185
197 187
Typ tablicowy w Pascalu
Definiowanie typów:
type
tab1=array[min..max] of T;
tab2=array[1..max1] of array[1..max2] of T;
tab3=array[1..max1] of tab1;
tab4=array[1..max1,1..max2] of T;
• tablice (array)
• łańcuchy znaków (string)
• rekordy (record)
• pliki (file)
• zbiory (set)
Deklarowanie zmiennych:
var
t1,t2 : tab1;
Odwołanie do elementów:
t1[a+3]:=t1[a+4];
Cechy:
• statyczny rozmiar
• możliwość podstawiania zmiennych tablicowych
Łańcuch znaków
write(’to jest tekst’);
printf(”to jest tekst”);
Pascal
Język C
Operacje na łańcuchach
Deklarowanie:
var
a,b : string[10];
Składanie:
string;
string[80];
string[255];
a:=’jeden’;
b:=’dwa’;
a:=b+b;
Wczytywanie i wypisywanie:
Przykład:
write(a);
write(b[2]);
read(a);
string[10];
dwadwa
w
Porównywanie:
if a<>b then write(’różne’);
1
2
3
4
5
6
7
8
9 10
długość
3
Operacje na łańcuchach c.d.
Rekordy
Przykładowe funkcje:
Deklarowanie:
type zespolona=record
re:real;
im:real;
end;
var z1,z2:zespolona;
length(s:string):integer
pos(sub:string; s:string):byte
concat(s1, [s2..sn]:string):string
copy(s:string; ind:integer; count:integer):string
Przykładowe procedury:
Nadawanie wartości:
z1.re:=5;
z1.im:=6;
insert(s1:string; var s:string; ind:integer)
delete(var s:string; ind:integer; count:integer)
Podstawianie rekordów:
z2:=z1;
Rekordy - przykład
Rekordy - przykład
Przypisania:
Definicje i deklaracje:
rob.imie := ‘Jola’;
rob.urodziny.dzien := 7;
rob.urodziny.miesiac := 6;
rob.kobieta := true;
type data = record
dzien : 1..31;
miesiac : 1..12;
rok : 0..3000;
end;
Podstawienie rekordów:
type osoba = record
imie : string[20];
nazwisko : string[20];
urodziny : data;
kobieta : boolean;
end;
tab[1] := rob;
Dostęp:
if tab[1].kobieta then write(tab[1].imie);
var rob : osoba;
tab : array[1..100] of osoba;
2/2
1/2
Pliki
Operacje wykonywane na plikach
Deklarowanie
Dostęp do pliku:
• sekwencyjny (taśmy)
• swobodny (dyski)
Deklarowanie:
var
file
file
file
file
of
of
of
of
var
f : file of T;
Procedury i funkcje:
T;
integer;
osoba;
char;
(text)
Struktura o elementach tego samego typu
assign(f, nazwa);
reset(f);
rewrite(f);
read(f, zm);
write(f, zm);
close(f);
eof(f);
seek(f, pos);
(open, fopen)
eof
4
Pliki tekstowe
Kopiowanie pliku tekstowego
Deklarownie:
var
f : text;
assign(f1,’plik1.txt’);
assign(f2,’plik2.txt’);
reset(f1);
rewrite(f2);
while not eof(f1) do
begin
while not eoln(f1) do
begin
read(f1,ch);
write(f2,ch)
end;
readln(f1);
writeln(f2)
end;
close(f1);
close(f2);
{file of char}
Procedury i funkcje:
readln( )
writeln( )
eoln( )
Znak końca linii:
• DOS
CR LF
• UNIX
LF
• MacOS CR
Zbiory
Zastosowanie zbiorów
Deklarowanie:
var
f : set of T;
T - typ prosty
if a in [0..3, 10..12] then ...
set of char;
set of integer;
var
Operacje na zbiorach:
+ - *
in
= <>
<= >=
:=
if (a<=3)and(a>=0)or(a>=10)and(a<=12) then ...
suma, różnica, iloczyn
przynależność elementu do zbioru
równość, różność
zawieranie się zbiorów
podstawianie
Przykład wykorzystania zbiorów:
Eratostenes
(ur. 276 p.n.e. w Cyrenie, zm. 194 p.n.e.)
Sito Eratostenesa
2 3 4 5 6 7 8 9 10 11 12 13 14
2 3
5
7
2 3
5
7
9
11
13
11
13
sam : set of char;
sam := [’a’, ’e’, ’i’, ’o’, ’u’, ’y’];
if not (zn in sam) then write(’spółgłoska’);
Sito Eratostenesa
const
n = 1000;
var
sito,pierwsze : set of 2..n;
next,j : integer;
begin
sito:=[2..n]; pierwsze:=[ ]; next:=2;
repeat
while not (next in sito) do next:=succ(next);
pierwsze:=pierwsze+[next];
j:=next;
while j<=n do begin
sito:=sito-[j];
j:=j+next;
end;
until sito=[ ];
end.
5