Jednoduché datové typy a typ string

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

Definice datového typu

type

 identifikátor=popis typu

Přehled datových typů

·       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)

Číselné datové typy

2 číselné datové typy - celočíselný x reálný

důvod rozlišení - přesnost výpočtů (a další)

Typ integer, celočíselné typy

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)

Kódování celých čísel

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

Typ real, reálné datové typy

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é

Konverze

automatická

konverzní funkce: round, trunc

další konverze mezi datovými typy

Přetečení

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í)

 

Datový typ boolean

množina hodnot - true, false; paměťové nároky - 1 bajt (stačil by 1 bit, ale nelze adresovat)

operace - relační, logické (booleovské)

Booleovské (logické) operace

not

negace

and

konjunkce (logický součet)

or

dijunkce (logický součin)

xor

exkluzivní or

Pravdivostní tabulky

Unární operace

X

not X

true

false

false

true

Binární operace

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

Zákony Booleovy algebry

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

 

Zápis dalších logických operací

implikace               PÞQ      P<=Q

ekvivalence          PÛQ      P=Q

Bitově orientované operátory

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)

Datový typ char

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á

Kódové tabulky

ASCII (American Standard Code for Information Interchange)

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)

další kódy

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í

operace

relační

funkce

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)

zápis hodnot

apostrofy (zápis apostrofu - ‘’’’)

zahrádka

chr

 

Ordinální datové typy

celočíselné, boolean, char, výčtový typ, interval

Vlastnosti

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ší).

Funkce

ord - ordinální číslo

succ - následník

před - předchůdce

Definice ordinálních čísel:

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

 

Typ interval

neprázdná souvislá podmnožina hodnot nějakého ordinálního typu (hostitelský typ)

Popis

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)

Příklad

var

 Pocet:1..100;

 Kladne:1..maxint;

 Zaporne: -maxint..-1;

 Cislice: ‘0’..’9’;

 

Výčtový typ

·       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)