
- •3.1. Jednoduché datové typy
- •3.1.1. Datový typ integer
- •3.1.2. Datový typ boolean
- •3.1.3. Datový typ char
- •3.1.4. Datový typ výčet
- •3.1.5. Datový typ interval
- •3.1.6. Datový typ real
- •3.2. Strukturované datové typy
- •3.2.1. Datový typ pole
- •3.2.2. Datový typ string - řetězec
- •3.2.3. Datový typ záznam
- •3.2.4. Datový typ množina
- •3.2.5. Datový typ soubor
3.1.4. Datový typ výčet
Výčet je jednoduchý datový typ, který si uživatel může definovat podle svých požadavků. jednotlivé hodnoty mají svá ordinální čísla podle pořadí v zápisu a jejich počítání začíná nulou. Myslím, že příklad bude jasnější:
type |
tyden = (pondeli, utery, streda, ctvrtek, patek, sobota, nedele); |
obdobi = (jaro, leto, podzim, zima); |
var |
den: tyden; |
doba: obdobi; |
Potom platí následující vztahy:
succ(podneli) = utery
pred(podzim) = leto
ord(patek) = 4
3.1.5. Datový typ interval
Tento datový typ specifikuje souvislou neprázdnou podmnožinu hodnot nějakého ordinálního typu. Dolní a horní mez této podmnožiny udávají dvě konstanty daného ordinálního typu. Např.: zápis 1 .. 100 definuje interval, specifikující množinu celočíselných hodnot. Typ interval však nemusí být definován pouze nad číselnými typy, může být definován i nad typy výčet či char, jak ukazuje následující příklad:
type |
pracovni_dny = pondeli .. patek; |
velke_pismeno = 'A' .. 'Z'; |
Potom opět platí následující vztahy:
ord(patek) = 4
ord('A') = 65
'A' < 'B' < 'C' < ... < 'Z'
3.1.6. Datový typ real
Tento datový typ specifikuje konečnou podmnožinu reálných čísel. Používá se pro vyjádření hodnot s pohyblivou desetinnou čárkou. V paměti počítače se hodnoty vyjadřují jako dvojice (M,N), kde M je mantisa a N je exponent. Rozsahy hodnot jsou uvedeny v následující tabulce:
Typ |
Rozsah |
byte/bitů |
real |
2.9*10-39 .. 1.7*10+38 |
6/48 |
single |
1.5*10-45 .. 3.4*10+38 |
4/28 |
double |
5.0*10-324 .. 1.7*10+308 |
8/64 |
extended |
3.4*10-4932 .. 1.1*10+4932 |
10/80 |
Tento typ, i když má největší rozsah, co se týče numerických hodnot, má také jedno omezení, a tím je tzv. strojová nula. Tato hodnota je určena intervalem (0, minreal), kde minreal je v absolutní hodnotě minimální zobrazitelná hodnota na daném počítači. Protože reálné číslo není možné zobrazit v počítači s libovolnou přesností, s konečnou přesností se vykonávají i operace a funkce, definované nad tímto typem. Toto je nutno brát v úvahu při tvorbě i ověřování správnosti programu.
Pro hodnoty typu real jsou definovány operace s výsledky rovněž typu real:
+ |
sčítání |
- |
odčítání nebo unární operace změny znaménka |
= |
násobení |
/ |
dělení |
Dále jsou zde definovány relační operace stejně jako u typu integer a tyto standardní funkce:
abs(x) |
absolutní hodnota |
sqr(x) |
druhá mocnina |
sqrt(x) |
druhá odmocnina |
sin(x) |
vypočte sin(x) - argument x je v radiánech |
cos(x) |
vypočte cos(x) - argument x je v radiánech |
arctan(x) |
vypočte arctan(x) - výsledek je v radiánech |
ln(x) |
přirozený logaritmus |
exp(x) |
funkce ex |
Konverze mezi datovými typy integer a real:
integer --> real:
tato konverze je implicitní: pokud proměnná X typu integer má hodnotu 2 a Y je typu real, po přiřazovacím příkazu Y := X bude mít proměnná Y hodnotu 2.0
real --> integer:
tato konverze implicitní není a proto jsou pro ni zavedeny dvě funkce:
trunc(x) . . . vrací celou část reálného čísla x tím, že desetinnou část odstraní
round(x) . . . vrací zaokrouhlenou hodnotu reálného čísla x, definovanou takto: round(x) = trunc(x + 0.5) pro x >= 0) round(x) = trunc(x - 0.5) pro x <= 0)
Následující tabulky uvádějí povolené kombinace argumentů a odpovídající typy výsledků relačních operátorů, aritmetických a standardních funkcí:
a |
b |
a +, -, * b |
a /b |
a div, mod b |
a =, <>, <, >, <=, >= b |
integer |
integer |
integer |
real |
integer |
boolean |
integer |
real |
real |
real |
-- |
boolean |
real |
integer |
real |
real |
-- |
boolean |
real |
real |
real |
real |
-- |
boolean |
a |
abs(a), sqr(a) |
sin(a), cos(a), arctan(a), ln(a), exp(a), sqrt(a) |
odd(a) |
integer |
integer |
real |
boolean |
real |
real |
real |
-- |
Reálná čísla v Pascalu se zapisují ne s desetinnou čárkou, ale s desetinnou tečkou. Také pro exponent se používá neobvyklý zápis: místo 10-13 se používá e-13 nebo E-13. Pak tedy číslo 3,5478*10-14 se zapíše 3.5478E-14.
Běžně se používá k programování typ real. Rozšířené reálné typy single, double a extended se mohou používat pouze se zabudovaným matematickým koprocesorem, nebo musíme jeho činnost emulovat. To se provádí pomocí direktiv. {$N+} je direktiva oznamující využití matematického koprocesoru, direktiva {$E+} zajistí emulaci matematického koprocesoru 80x86.