Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

DATOVÉ TYPY určuje druh hodnoty (číslo, text, logická hodnota) a množinu operací (aritmetické, logické, ...) skalární datový typ - hodnoty jsou uspořádané.

Podobné prezentace


Prezentace na téma: "DATOVÉ TYPY určuje druh hodnoty (číslo, text, logická hodnota) a množinu operací (aritmetické, logické, ...) skalární datový typ - hodnoty jsou uspořádané."— Transkript prezentace:

1 DATOVÉ TYPY určuje druh hodnoty (číslo, text, logická hodnota) a množinu operací (aritmetické, logické, ...) skalární datový typ - hodnoty jsou uspořádané skalární může být ordinální jednoduché strukturované integer boolean char interval výčtový typ real soubor záznam množina pole ordinální neordinální integer boolean char interval výčtový typ real soubor záznam množina pole standardní nestandardní 12/29/2018 Informatika I

2 ORDINÁLNÍ DATOVÉ TYPY integer boolean char interval výčtový typ ordinální jsou jednoduché (jedna proměnná daného typu obsahuje v daném okamžiku právě jednu hodnotu) všechny hodnoty z množiny hodnot lze seřadit a přidělit jim pořadové číslo, tzn. pro každou hodnotu existuje jednoznačně definovaný předchůdce a následník (splněno např. pro celá čísla, nikoliv pro racionální - tam lze rozhodnout pouze o relaci menší - větší) ord(a) ord(hi) = i-1 hi < hj Þ i < j succ(a) succ(hi) = hi+1 pred(a) pred(hi) = hi-1 ordinální číslo = pořadové číslo v množině hodnot předchůdce - predecessor následník - successor 12/29/2018 Informatika I

3 DATOVÝ TYP INTEGER integer - latinsky „celý“
množina hodnot: celá čísla (kladná, záporná a nula) rozsah omezen velikostí paměťového místa použitého pro uložení hodnoty pro 16 bitů až (-215 až 215-1) pro 32 bitů až (-231 až 231-1) konstanta maxint: rozsah <–maxint-1, maxint> operace: vstup a výstup přiřazení aritmetické operace relační operace operace aritmetické relační + - * div mod sčítání odčítání násobení celočíselné dělení zbytek po dělení = <> > >= < <= 10 div 3 = 3 10 mod 3 = 1 přetečení při aritmetických operacích (výsledek neleží v intervalu <-maxint-1,maxint>) 12/29/2018 Informatika I

4 DATOVÝ TYP INTEGER var x, y : integer; begin x := 3; y := sqr(3); if odd(y) then write('liche') else write('sude'); end; standardní funkce odd(a) abs(a) sqr(a) ord(a) succ(a) pred(a) true, když a je liché absolutní hodnota druhá mocnina ordinální číslo následník předchůdce |a| a2 a a+1 a-1 V překladačích bývají obvykle definovány další celočíselné datové typy, např.: ShortInt Smallint Longint Byte Word 12/29/2018 Informatika I

5 DATOVÝ TYP BOOLEAN Logické operace: pouze dvě hodnoty: true a false
přiřazení logické operace funkce ord, succ, pred ord (false) = 0 ord (true) = 1 relační operace (všechny, porovnává se podle ordinálního čísla) true > false vstup a výstup Logické operace: A B false true not A A and B A or B 12/29/2018 Informatika I

6 DATOVÝ TYP CHAR zkratka z character (m.j. písmeno, znak – angl.)
množina hodnot: zobrazitelné znaky (písmena, číslice, různé symboly, ...), řídící znaky operace: vstup a výstup (standardní typ) přiřazení relační operace (podle abecedy - anglické, tzn. bez diakrititky) funkce ord, succ, pred a chr ordinální čísla (uloženo v jednom bytu) ord(’A’) = 65 chr(65) = ’A’ succ(’A’) = ’B’ pred(’B’) = ’A’ Zápis konstanty: ’A’ 12/29/2018 Informatika I

7 DATOVÝ TYP CHAR kód = přiřazení znaků a ordinálních čísel
ASCII - American Standard Code for Information Interchanges pův. 7-mibitový (max. 128 znaků), později rozšíření na 8 bitů - více způsobů (max. 256 znaků, národní abecedy) jiné kódy: CCITT (5 bitů), EBCDIC, UniCode, ... ! řídící znaky Z A B 9 1 # / : ; @ z a b del 33 32 90 65 66 57 48 49 34 35 47 58 59 64 122 97 98 127 nad 127: znaky národních abeced znaky pro rámečky a výplně speciální znaky (½, a, b, ¥, ø, º, ...) pro češtinu několik různých kódů (bří Kamenických, Latin2, ISO , Windows 1250) 12/29/2018 Informatika I

8 DATOVÝ TYP CHAR var c : char; ... (* test, zda číslice *)
if (c >= ’0’) and (c <= ’9’) then ... (* test, zda velké písmeno *) if (c >= ’A’) and (c <= ’Z’) then ... (* test, zda vůbec nějaké písmeno *) if ((c >= ’A’) and (c <= ’Z’)) or ((c >= ’a’) and (c <= ’z’)) then ... (* převod malého písmene na velké *) if (c >= ’a’) and (c <= ’z’) then c := chr(ord(c) - (ord(’a’) - ord (’A’))); 12/29/2018 Informatika I

9 DATOVÝ TYP INTERVAL definován pomocí již definovaného ordinálního typu (tzv. hostitelský typ) množina hodnot omezena na souvislou podmnožinu, hranice zadány v definici (např. číslo měsíce v roce je sice integer, ale smysl mají pouze hodnoty 1 až 12) hostitelský typ může být: integer, char, výčtový typ var mesic : ; s proměnnou mesic lze provádět stejné operace, jako s proměnnou hostitelského typu (integer) určeno hlavně pro snížení výskytu chyb: při překročení rozsahu (přiřazením) je hlášena chyba (např. mesic := 100 je špatně) v některých situacích je použití typu interval (resp. existence typu příslušných vlastností) přímo vyžadováno 12/29/2018 Informatika I

10 DEFINICE DATOVÉHO TYPU
pokud potřebujeme více proměnných stejného nestandardního typu (deklarovaných na různých místech) patří do deklarační části programu pro jméno typu platí stejná pravidla jako pro jména proměnných type TMesic = ; var mesic : TMesic; lze definovat i nový název pro již existující typ type TMesic = integer; var mesic : TMesic; 12/29/2018 Informatika I

11 VÝČTOVÝ DATOVÝ TYP (enumerative type)
nestandardní jednoduchý ordinální typ definovaný v programu explicitně pomocí výčtu množiny hodnot operace: přiřazení relační operace (dle ordinálních čísel), funkce ord, succ, pred nejsou definovány vstupy a výstupy type TDen = (Pondeli, Utery, Streda, Ctvrtek, Patek, Sobota, Nedele); TPracDen = Pondeli .. Patek; var den : TDen; ... den := Utery; if den > Patek then ... write(ord(Utery)); (* vypíše se 1 *) 12/29/2018 Informatika I

12 DATOVÝ TYP REAL neordinální neceločíselné hodnoty
v paměti ukládáno obvykle v semilogaritmickém tvaru: m * 2 q hodnoty nemají jednotný stupeň rozlišitelnosti hodnoty: konečná podmnožina reálných čísel (spíše racionálních) maxreal - největší absolutní hodnota čísla minreal - nejmenší absolutní hodnota čísla počet zobrazitelných míst mantisy (uvádí se ekvivalent v desítkové soustavě) strojová nula: všechny hodnoty z intervalu (-minreal, minreal) podtečení (výsledkem je strojová nula) -maxreal -minreal maxreal minreal 12/29/2018 Informatika I

13 DATOVÝ TYP REAL operace aritmetické relační + - * / sčítání odčítání
násobení dělení = <> > >= < <= Zápis konstanty: 3.14 -72.59 547.15e-15 -4E20 standardní funkce abs(x) sqr(x) sin(x) cos(x) arctg(x) ln(x) exp(x) sqrt(x) trunc(x) round(x) absolutní hodnota druhá mocnina sinus (x v radiánech) druhá odmocnina celá část x zaokrouhlení x na celé číslo |x| x2 ex 12/29/2018 Informatika I

14 DATOVÝ TYP REAL V překladačích obvykle definovány další neceločíselné datové typy, např.: Real Single Double Extended 2.9 E -39 až 1.7 E 38 1.5 E -45 až 3.4 E 38 5.0 E -324 až 1.7 E 308 3.47 E až 1.1 E 4932 11-12 7-8 15-16 19-20 6 4 8 10 jméno rozsah plat. cifry délka [B] Problémy s přesností numerických výpočtů (konečný počet cifer) var x : real; i : integer; ... x := 1.1E10; for i := 1 to do x := x ; 12/29/2018 Informatika I

15 DATOVÝ TYP POLE strukturovaný datový typ složky stejného typu
složky rozlišeny pomocí indexu index může být libovolného ordinálního typu (nejčastěji integer) typ složek: jakýkoliv datový typ (mimo typu soubor) Ti – typ indexu Ts – typ složek (prvků) type T = array [Ti ] of Ts; type VEKTOR = array [1..3] of real; var A : VEKTOR; B : array [’A’..’Z’] of integer; ... A[1] := 7; B[’X’] := B [’X’] + 1; složka pole má stejné vlastnosti (a použitelnost) jako proměnná příslušného typu (A[1] jako real, B[’X’] jako integer) 12/29/2018 Informatika I

16 DATOVÝ TYP POLE složky pole mohou být opět typu pole - vícerozměrná pole type MATICE = array [1..10] of array [1..10] of real; var A : MATICE; ... A[1,2] := 0.2; (* nebo A[1][2] *) totéž stručněji: type MATICE = array [1..10, 1..10] of real; var A : MATICE; ... A[1,2] := 0.2; (* nebo A[1][2] *) 12/29/2018 Informatika I

17 DATOVÝ TYP POLE operace:
zpřístupnění složky podle indexu přiřazení (stejný typ!) žádné další operace pro typ pole (vstup/výstup, relace, ...), pouze pro složky dle jejich typu velmi silný výrazový prostředek pro vyjadřování algoritmů Vstup a výstup pole (po složkách) var A : array [1..100] of real; i, n : integer; ... read(n); for i:=1 to n do read(A[i]); writeln(A[i]); 12/29/2018 Informatika I

18 příklady nejčastějších manipulací
DATOVÝ TYP POLE příklady nejčastějších manipulací Operace s vektory, s maticemi, třídění, soustavy rovnic... var A : array [1..100] of integer; x := 0; for i:=1 to N do x := x + A[i]; x := A[1]; for i:=2 to N do if x > A[i] then x := A[i]; 12/29/2018 Informatika I

19 DATOVÝ TYP POLE var A : array [1..100] of integer; b : boolean;
i : integer; b := false; i := 1; repeat if A[i]<>0 then b := true; i := i+1; until (i>n) or b; b ;= true; i := 1; repeat if A[i]=0 then b :=false; i := i+1; until (i>n) or not(b); 12/29/2018 Informatika I

20 TEXTOVÉ ŘETĚZCE víceznakový text = textový řetězec (např. ’ahoj’)
je vhodné, aby slovo (věta, ...) mohly být v jedné proměnné lze použít array of char, ale zůstávají (nevýhodné) vlastnosti pole (zejm. nemožnost vstupu a výstupu) v Pascalu jsou obvykle k dispozici spec. typy pro práci s textovými řetězci (obvykle string, není to součást jazyka Pascal, takže vlastnosti závisí na implementaci!) string má vlastnosti pole (výběr znaku dle indexu), ale mnoho operací navíc (vstupy, výstupy, přiřazení, spojování řetězců, mnoho speciálních funkcí) prvek typu string je typu char var x : string; (* max. 255 nebo 232 znaků *) y : string[20]; (* max. 20 znaků *) ... read(x); write(x); y:='Ahoj'; x:=y + ', lidi!'; write(x); (* Ahoj, lidi! *) 12/29/2018 Informatika I

21 NĚKTERÉ FUNKCE PRO PRÁCI S ŘETĚZCI
t1 + t2 length(t) pos(t1,t2) delete(t,i,n) insert(co,kam,i) copy(t,i,n) zřetězení aktuální délka řetězce (počet znaků) index prvního výskytu t1 v t2 odstranění n znaků z řetězce t počínaje znakem s indexem i vložení co do řetězce kam od indexu i získání podřetězce (n znaků z řetězce t počínaje indexem i) var s,t : string; i : integer; ... s := 'dobry'; t := s + ' den'; writeln(t); { dobry den } i := length(t); { 9 } i := pos('br',t); { 3 } delete(t,3,2); writeln(t); { doy den } insert('br',t,3); s := copy(t,3,5); writeln(s); { bry d } 12/29/2018 Informatika I

22 TEXTOVÉ ŘETĚZCE var x : string; i : integer; ... x:='ahoj, lidi!';
write(x); { ahoj, lidi! } { převod prvního znaku na velké písmeno } if (x[1] >= ’a’) and (x[1] <= ’z’) then x[1] := chr(ord(x[1]) - (ord(’a’) - ord (’A’))); write (x); { Ahoj, lidi! } { převod všech znaků na velké písmeno } for i:=1 to length(x) do if (x[i] >= ’a’) and (x[i] <= ’z’) then x[i] := chr(ord(x[i]) - (ord(’a’) - ord (’A’))); write (x); { AHOJ, LIDI! } 12/29/2018 Informatika I

23 DATOVÝ TYP MNOŽINA [s1, s2, s3]
strukturovaný datový typ, hodnoty jsou množiny množina všech hodnot typu je potenční množina typ prvku báze (bázový typ) smí být jen ordinální typ nelze přímo přistupovat k jednotlivým složkám operace: zápis konstanty přiřazení množinové operace (sjednocení, průnik, množinový rozdíl) test "je prvkem množiny" relace type T = set of Ts; [s1, s2, s3] type ZNAKY = set of char; var A, B, C : ZNAKY; ... C := []; { prázdná množina } A := ['0', '1', '2']; B := ['1', 'a']; C := A + B; { ['0', '1', '2', 'a'] } C := A * B; { ['1'] } C := A - B; { ['0', '2'] } if 'a' in B then ... + sjednocení * průnik - rozdíl = rovnost <> nerovnost <= je podmnožinou >= je nadmnožinou in je prvkem 12/29/2018 Informatika I

24 obě přiřazení jsou ekvivalentní
DATOVÝ TYP MNOŽINA var A : set of char; ... A := ['0', '1', '2', '3']; A := ['0'..'3']; obě přiřazení jsou ekvivalentní var x : char; ... if x in ['0'..'9'] then write('v x je cislice'); if x in ['A'..'Z','a'..'z'] then write('v x je pismeno'); 12/29/2018 Informatika I

25 DATOVÝ TYP MNOŽINA var x : string; A : set of char; i : integer; begin
read(x); A := ['A','E','I','O','U','Y']; for i:=1 to length(x) do if (x[i] >= ’a’) and (x[i] <= ’z’) then x[i] := chr(ord(x[i]) - (ord(’a’) - ord (’A’))); if x[i] in A then A := A - [x[i]]; end; if A <> [] then write('ne'); writeln('byly vsechny samohlasky') end. 12/29/2018 Informatika I

26 DATOVÝ TYP ZÁZNAM strukturovaný datový typ prvky různého typu
prvky mohou být libovolného typu (mimo soubor) typický příklad použití: databáze (tabulku DB lze chápat jako pole záznamů) operace: zpřístupnění složky přiřazení type ZELENINA = record jmeno : string[20]; mj : (kg, ks, pytel); cena : real; end; var A, B : ZELENINA; X : array [ ] of ZELENINA; ... A.jmeno := 'mrkev'; B := A; X[20].cena := ; type T = record N1 : T1; ... end; Ni - jméno i-té složky Ti - typ i-té složky 12/29/2018 Informatika I

27 KLÍČOVÉ SLOVO with type XYZ = record a,b,c : integer; x, y, z : real;
end; var POM : array [1..100] of XYZ; ... POM[15].a := 0; POM[15].b := 0; POM[15].c := 0; POM[15].x := 0; POM[15].y := 0; POM[15].z := 0; with POM[15] do begin a := 0; b := 0; c := 0; x := 0; y := 0; z := 0; end; 12/29/2018 Informatika I

28 DATOVÝ TYP SOUBOR prvky různého typu
textový, binární (stejné nebo různé prvky) pro realizaci V/V operací přiřazení jména otevření souboru práce se souborem (vstup, výstup - read, readln, write, writeln) zavření souboru řada dalších funkcí: nestandardní - nastavení na pozici v souboru, čtení a zápis bloku dat definované délky (bez ohledu na typ) apod. rozdíl mezi read a readln (readln jen pro textové soubory, čte až do konce řádku) assign(g,<jméno>); přiřazení jména souboru proměnné reset(g); otevření existujícího souboru pro čtení rewrite(g); otevření existujícího nebo nového souboru pro zápis append(g); otevření existujícího souboru pro zápis, nastavení na konec close(g); zavření souboru eof(g); true na konci souboru (už dále není co číst) eoln(g); true na konci řádku při čtení z textového souboru 12/29/2018 Informatika I

29 DATOVÝ TYP SOUBOR zobrazení obsahu textového souboru prvni.txt na obrazovku program cat; var g : text; s : string; begin assign(g,'prvni.txt'); reset(g); while not eof(g) do readln(g,s); writeln(s); end; close(g); end. 12/29/2018 Informatika I

30 DATOVÝ TYP SOUBOR type ZELENINA = record jmeno : string[20];
mj : (kg, ks, pytel); cena : real; end; var X : array [ ] of ZELENINA; f : file of ZELENINA; i : integer; ... assign(f,'zelenina.dat'); rewrite(f); for i := 1 to 1000 do writeln(f,X[i]); close(f); 12/29/2018 Informatika I

31 PŘÍKAZ case vícenásobné větvení podle hodnoty výrazu (ordinální typ)
zbytný příkaz (lze nahradit posloupností if - then - else if ...) case p of h1: ŘS1; h2: ŘS2; ... hn: ŘSn; else ŘSx (* žádná z uvedených *) end; p ? h2 hn h1 ŘS1 ŘS2 ŘSn if p = h1 then ŘS1 else if p = h2 then ŘS2 else ... else if p = hn then ŘSn; case c of 'A'..'Z', 'a'..'z': write('pismeno'); '0'..'9: write('cislice'); write('zavinac'); else write('neco jineho'); end; 12/29/2018 Informatika I


Stáhnout ppt "DATOVÉ TYPY určuje druh hodnoty (číslo, text, logická hodnota) a množinu operací (aritmetické, logické, ...) skalární datový typ - hodnoty jsou uspořádané."

Podobné prezentace


Reklamy Google