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