datový typ
· množina hodnot (paměťové nároky + kódování)
· operace (a funkce)
· (další atributy (použití,...))
důvody rozlišení
· paměťová a časová efektivita
· jednodušší práce
identifikátor typu (pojmenovaný typ), popis typu
standardní datové typy, uživatelské datové typy
type
identifikátor=popis typu
· jednoduché: reálné, ordinální - celočíselné, char, boolean, výčtový typ, interval
· strukturované: pole (array, záznam (record), množina (set), soubor (file)
· řetězec (string)
· ukazatel (pointer)
· objekt (object)
2 číselné datové typy - celočíselný x reálný
důvod rozlišení - přesnost výpočtů (a další)
souvislá omezená podmnožina celých čísel
rozsah je dán implementací
standardní konstanta maxint (32 767 pro 2 bajty, 2 147 483 647 pro 4 bajty), integer je v rozsahu -maxint...maxint (přesněji -maxint+1...maxint)
dvojková soustava
převody binární x desítková soustava (váhy číslic na pozicích v D soustavě, v B soustavě, převod z B do D, převod z D do B dvěma způsoby, přímý převod B-H)
kladná čísla - dvojková soustava
záporná čísla - znaménkový bit + dvojkový zápis
přímý kód - dvojková hodnota (nejednoznačnost nuly)
nepřímé kódy (inverzní kód - opět nejednoznačná nula, doplňkový kód -přičtení 1 k inverznímu kódu)
Celočíselné typy
|
typ |
počet bajtů |
rozsah v Pascalu |
|
byte |
1 |
0-255 |
|
word |
2 |
0-65 535 |
|
shortint |
1 |
-128..127 |
|
integer |
2 |
-32 768..32767 |
|
longint |
4 |
-2 147 483 648..2 147 483 647 |
(v jiných prostředích mohou mít jiný rozsah a paměťové nároky)
Operace: +, -, *, div, mod
Funkce: abs, sqr, odd
nesouvislá omezená podmnožina reálných čísel
vždy čísla s ukončeným desetinným rozvojem (čili vlastně racionální)
zaokrouhlování - hodnota typu real jako reprezentant intervalu reálných čísel (nestejné délky)
zaokrouhlovací chyby (operace s čísly s výrazně odlišnými řády, pozor při testech na rovnost real hodnot,...)
plovoucí a pevná řádová čárka - výhody
kódování hodnot typu real, semilogaritmický tvar zápisu čísla, závislost počtu platných číslic a rozsahu na mantise a exponentu
reálné typy
|
typ |
počet bajtů |
platné číslice |
rozsah |
|
real |
6 |
11-12 |
2,9.10-39..1,7.1038 |
|
single |
4 |
7-8 |
1,5.10-45..3,4.1038 |
|
double |
8 |
15-16 |
5,0.10-324..1,7.10308 |
|
extended |
10 |
19-20 |
3,4.10-4932..1,1.104932 |
|
comp |
8 |
19-20 |
-263+1..263-1 |
real,..., extended - pohyblivá řádová čárka
comp - pevná řádová čárka, 64 bitů, přibližný rozsah -9,2.1018..9,2.1018
(opět může být v jiných prostředích jinak)
(vyžadují matematický koprocesor, lze emulovat - zpomaluje, pro běžné výpočty se vystačí s typem real)
operace: +,-,*,/
funkce: abs, sqr, a další probírané aritmetické
automatická
konverzní funkce: round, trunc
další konverze mezi datovými typy
překročení rozsahu datového typu při výpočtech
reakce na přetečení
celá čísla - syntaktická chyba při překladu - jednoznačné příkazy (např. přímé přiřazení velké hodnoty)
celá čísla - bez reakce - hodnoty se usekávají - je třeba ošetřit
reálná čísla - běhová chyba (run time error)
(podtečení)
množina hodnot - true, false; paměťové nároky - 1 bajt (stačil by 1 bit, ale nelze adresovat)
operace - relační, logické (booleovské)
|
not |
negace |
|
and |
konjunkce (logický součet) |
|
or |
dijunkce (logický součin) |
|
xor |
exkluzivní or |
|
X |
not X |
|
true |
false |
|
false |
true |
|
X |
Y |
X and Y |
X or Y |
X xor Y |
|
true |
true |
true |
true |
false |
|
true |
false |
false |
true |
true |
|
false |
true |
false |
true |
true |
|
false |
false |
false |
false |
false |
|
|
|
všechny |
aspoň 1 |
právě 1 |
|
komutativní |
P or Q=Q or P |
P and Q = Q and P |
|
asociativní |
(P or Q) or R = P or (Q or R) |
(P and Q) and R = P and (Q and R) |
|
distributivní |
(P and Q) or R = (P or R) and (Q or R) |
(P or Q) and R = (P and R) or (Q and R) |
|
neutrálnost |
P or false = P |
P and true = P |
|
agresivita |
P or true = true |
P and false = false |
|
idempotence |
P or P = P |
P and P = P |
|
zákon o vyloučeném třetím |
P or not P = true |
P and not P = false |
|
de Morganovy zákony |
not (P or Q) = not P and not Q |
not (P and Q) = not P or not Q |
|
negace negace |
not not P = P |
|
implikace PÞQ P<=Q
ekvivalence PÛQ P=Q
operace na hodnotách typu integer, výsledek typu integer
operace na úrovni bitů
shl posouvá bity vlevo, bity vpravo vyplňuje 0 (I shl J posune I o J bitů vlevo)
shr posouvá bity vpravo, bity vlevo vyplňuje 0 (podobně)
and logické and na příslušném páru bitů
or logické or na příslušném páru bitů
xor logické xor na příslušném páru bitů
not logický doplněk na každém bitu (inverze)
množina hodnot - znaky (dáno implementací)
množina znaků musí splňovat podmínky:
1. každému znaku je přiřazeno celé číslo (ordinální číslo - kód znaku)
2. podmnožina 0..9 - uspořádaná, souvislá
3. podmnožina A..Z - uspořádaná, nemusí být souvislá
4. podmnožina a..z - uspořádaná, nemusí být souvislá
0..127 základní, 0..255 rozšířená (čeština, speciální znaky)
abeceda je souvislá, mezi velkými a malými opísmeny jsou další znaky
0 - kód 48, A - kód 65, a - kód 97, mezera - 32
0-31 - řídící kódy (nelze zapsat literálem)
ISO (evropská verze ASCII)
EBCDIC (Extended Binary Coded Decimal Information Code)
kódování češtiny: Kameničtí, Latin II (znaková stránka 852),...
přechod na dvoubajtové kódování
relační
ord(ch) - i ordinální číslo (kód znaku)
chr(i) - ch znak s ordinálním číslem i (i musí být z daného rozsahu)
apostrofy (zápis apostrofu - ‘’’’)
zahrádka
chr
celočíselné, boolean, char, výčtový typ, interval
Každému prvku je přiřazeno ordinální číslo(celé číslo).
Ke každému prvku (kromě posledního) existuje následník (prvek s ordinálním číslem o 1 větší).
Ke každému prvku (kromě prvního) existuje předchůdce (prvek s ordinálním číslem o 1 menší).
ord - ordinální číslo
succ - následník
před - předchůdce
|
integer |
ord(i)=i |
|
boolean |
ord(true)=1, ord(false)=0 |
|
char |
ord(ch)=kód podle kódovací tabulky |
|
interval |
viz hostitelský typ |
|
výčtový typ |
pořadové číslo prvku ve výčtu počítáno od nuly |
neprázdná souvislá podmnožina hodnot nějakého ordinálního typu (hostitelský typ)
dolní mez .. horní mez
dolní mez, horní mez - konstanty téhož ordinálního typu
typ interval je kompatibilní s hostitelským typem (tytéž operace a vlastnosti)
var
Pocet:1..100;
Kladne:1..maxint;
Zaporne: -maxint..-1;
Cislice: ‘0’..’9’;
· jeho zavedení vede ke srozumitelnosti
· je to ordinální typ
· popis výčtového typu: (identifikátor0,identifikátor1,...,identifikátorn)
· paměťové nároky: 1 byte (uloženo je ordinální číslo, ordinální čísla jsou dána pořadím ve výčtu počítáno od nuly)
· pouze relační operace (uspořádání je dáno pořadím v deklaraci)
· nelze číst (read) ani tisknout (write)
· speciální výčtový typ je boolean
Příklad:
type DenVTydnu=(pondeli, utery, streda, ctvrtek, patek, sobota, nedele)