Největší typ proměnné v Pascalu. Pascal. Datové typy. Typy strukturovaných jazyků

Každý program napsaný v jakémkoli programovacím jazyce je v podstatě navržen tak, aby zpracovával data. Data mohou být čísla, texty, grafika, zvuk atd. Některá data jsou zdrojová data, jiná jsou výsledkem, který je získán zpracováním zdrojových dat programem.

Data jsou uložena v paměti počítače. Program k nim přistupuje pomocí názvů proměnných spojených s paměťovými místy, kde jsou data uložena.

Proměnné jsou popsány před hlavním programovým kódem. Zde jsou uvedeny názvy proměnných a typ dat v nich uložených.

V programovacím jazyce Pascal existuje mnoho datových typů. Navíc si uživatel sám může definovat své vlastní typy.

Typ proměnné určuje, jaká data mohou být uložena v paměti, která je s ní spojena.

Zadejte proměnné celé číslo lze asociovat pouze s celočíselnými hodnotami typicky v rozsahu -32768 až 32767. Pascal má jiné celočíselné typy (byte, longint).

Zadejte proměnné nemovitý ukládat reálná (zlomková) čísla.

Variabilní Boolean(Boolean) typ (boolean) může nabývat pouze dvou hodnot - věrný(1, pravda) nebo falešný(0, nepravda).

Typ znaku (char) může nabývat hodnot z konkrétní uspořádané sekvence znaků.

Typ intervalu definované uživatelem a tvořené pouze z ordinálních typů. Představuje podmnožinu hodnot v určitém rozsahu.

Můžete si vytvořit svůj vlastní datový typ jednoduchý výčet hodnoty, které může proměnná nabývat tohoto typu. Jedná se o tzv výčtový datový typ.

Všechny výše uvedené jsou jednoduché datové typy. Existují ale i složité, strukturované, které vycházejí z jednoduchých typů.

Pole je struktura, která zabírá jednu oblast v paměti a skládá se z pevného počtu komponent stejného typu.

Struny je posloupnost znaků. Navíc počet těchto znaků nesmí být větší než 255 včetně. Toto omezení je charakteristický rys Pascal.

Záznam je struktura sestávající z pevného počtu komponent nazývaných pole. Data v různých polích záznamu mohou být různých typů.

Sady představují kolekci libovolného počtu prvků, ale stejného výčtového typu.

Soubory pro Pascal jsou to sekvence stejného typu dat, které jsou uloženy na externích paměťových zařízeních (například na pevném disku).

Koncept takového datového typu jako ukazatel spojené s dynamickým ukládáním dat do paměti počítače. Použití dynamických datových typů je při programování často efektivnější než použití statických datových typů.

Data jsou obecný koncept za vše, s čím operuje počítač. Jakýkoli datový typ definuje sadu hodnot, které může konkrétní proměnná nabývat, a operace, které na ně lze použít. Každá proměnná, se kterou se program setká, musí být přidružen pouze k jednomu typu.

V Pascalu existují dva typy jednoduchých typů: ordinální typy a skutečné typy. Pořadový typ je buď definován programátorem (typ výčtu nebo typ rozsahu) nebo je označen názvem jednoho ze tří předdefinovaných pořadových typů: Boolean, Integer nebo Char. Skutečný typ se označuje normativním názvem typu Real.

Výčtový typ je charakterizován souborem prvků, které jsou v něm obsaženy. různé významy, mezi nimiž je definován lineární řád. Samotné hodnoty jsou v definici tohoto typu označeny názvy.

Typ rozsahu (omezený) je specifikován pomocí minimálních a maximálních hodnot souvisejících s dříve popsaným ordinálním typem. Takto se generuje nový ordinální typ.

Ordinální datové typy

Pořadový datový typ popisuje konečnou a uspořádanou množinu hodnot. Tyto hodnoty jsou mapovány na posloupnost pořadových čísel 0,1,2,...; výjimku tvoří pouze řadová celá čísla, která se mapují na sebe. Každý ordinální typ má minimální a maximální hodnota. Pro všechny hodnoty kromě minima existuje předchozí hodnota a pro všechny hodnoty kromě maxima je následující hodnota.

Předepsané funkce succ, pred, ord přijímají argumenty libovolného z ordinálních typů:
succ(X) - dává další řadovou hodnotu po X
pred(X) - udává pořadovou hodnotu předcházející X
ord(X) - udává pořadové číslo pro X

Pro všechny ordinální typy existují relační operátory = , = a > , za předpokladu, že oba operandy jsou stejného typu.

Booleovský typ

Booleovská hodnota je jedna ze dvou pravdivostních hodnot označených předdefinovanými názvy false a true .

Existují následující logické operace, která dává logickou hodnotu při použití na logické operandy:
a - logické AND
nebo - logické NEBO
ne - logické NE

Také jakákoli relační operace (= , = , > , in) vytváří logický výsledek.

Kromě booleovský typ definované tak, že nepravdivé

Tam jsou také předepsané logické funkce(tj. funkce, které vytvářejí logický výsledek):
odd(F) - true, pokud je celé číslo F-liché a výsledek je nepravdivý, pokud je F-sudá
eoln(F) - kontrola konce řádku
eof(F) - kontrola konce souboru

Celočíselný typ

Typ celé číslo zahrnuje celou řadu celých čísel.

Při práci s celočíselnými operandy generují následující aritmetické operace celočíselné hodnoty:
* - násobení
div - celočíselná část z dělení
mod - zbytek dělení
+ - sčítání
- - odčítání

Pascal má také předdefinovanou konstantu nazvanou MaxInt, která obsahuje maximální hodnotu celého čísla a rovná se 32767

Celý výsledek poskytují čtyři důležité předepsané funkce:
abs(I) - absolutní hodnota celočíselná hodnota I
sgr(I) - celočíselná hodnota I na druhou za předpokladu, že I trunc(R) - udává celočíselnou část reálného čísla R
round(R) - vrátí zaokrouhlené celé číslo. V tomto případě: pro R>0 znamená trunc(R+0,5) a pro R

Pokud je I celočíselná hodnota, pak:
succ(I) - dává další celočíselnou hodnotu (I+1)
pred(I) - dává předchozí celočíselnou hodnotu (I-1)

Typ postavy (Char)

Hodnoty znaků jsou prvky konečné a uspořádané sady znaků. Hodnoty tohoto typu jsou reprezentovány jedním znakem uzavřeným v jednoduchých uvozovkách (apostrofech). Pokud je potřeba samotný apostrof, píše se dvakrát.
Příklady: "*" "G" "3" """" "X"

    Pro typ Char platí následující minimální předpoklady:
  1. Desetinné číslice 0 až 9 jsou seřazeny podle číselných hodnot a následují za sebou (například succ("5") = "6").
  2. Mohou zde být velká písmena od "A" do "Z"; pokud ano, pak jsou objednány v abecední pořadí, ale nemusí nutně následovat za sebou (například "A"
  3. Může existovat malá písmena od "a" do "z"; pokud ano, pak jsou seřazeny abecedně, ale nemusí nutně následovat za sebou (např.

Chcete-li namapovat danou sadu znaků na sériová čísla a zpět, existují dvě předdefinované funkce:
ord(C) - dává sériové číslo znak C v uvedené uspořádané sadě znaků
chr(I) - dává znak s pořadovým číslem I

Pro argumenty typu Char lze předdefinované funkce pred a succ definovat takto:
pred(C) = chr(ord(C)-I)
succ(C) = chr(ord(C)+I)

Komentář. Předchozí nebo následující symbol závisí na zadané sadě symbolů, takže oba tyto vztahy jsou platné pouze v případě, že předchozí nebo následující symbol existuje.

Skutečný typ

Hodnoty reálného typu jsou prvky podmnožiny definované implementací reálná čísla.

Všechny operace s reálnými veličinami jsou přibližné, jejich přesnost je dána realizací (strojem), se kterou se zabýváte. Skutečný typ je jednoduchý typ, není to ordinální typ. Skutečné hodnoty nemají pořadové číslo a pro žádnou z nich neexistuje žádná předchozí ani následující hodnota.

Pokud je alespoň jeden z operandů reálného typu (druhý může být celé číslo), dávají následující operace skutečný výsledek:
* - násobení
/ - dělení (oba operandy mohou být celá čísla, ale výsledek je vždy skutečný)
+ - sčítání
- - odčítání

Existují předepsané funkce, které dávají skutečný výsledek se skutečným argumentem:
abs(R) - absolutní hodnota R
sqr(R) - R na druhou, pokud je výsledek v rozsahu reálných čísel

A tyto předepsané funkce poskytují skutečný výsledek s celým číslem nebo skutečným argumentem:
sin(X) - udává sinus X; X je vyjádřeno v radiánech
cos(X) - udává kosinus X; X je vyjádřeno v radiánech
arctan(X) - udává arkustangens X vyjádřený v radiánech
ln(X) - udává hodnotu přirozeného (základ e) logaritmu pro X, X>0
exp(X) - udává hodnotu exponenciální funkce(tj. na mocninu X)
sqrt(X) - udává hodnotu druhé odmocniny X, X>=0

Varování. Funkce pred, succ nelze použít pro skutečné argumenty Při indexování polí, pro řízení ve smyčce s parametrem, pro určování nelze použít hodnoty typu real základní typ sady, pro indexování v operátoru variant.

Federální agentura pro vzdělávání

Abstraktní

"TYPY DAT V PASCALU"

1. Datové typy

Jakékoliv údaje, tzn. konstanty, proměnné, vlastnosti, funkční hodnoty nebo výrazy jsou charakterizovány svými typy. Typ definuje sadu přijatelné hodnoty, které ten či onen objekt může mít, stejně jako množinu platných operací, které se na něj vztahují. Kromě toho typ určuje také formát vnitřní reprezentace dat v paměti PC.

Obecně se jazyk Object Pascal vyznačuje rozvětvenou strukturou datových typů (obr. 1.1). Jazyk poskytuje mechanismus pro vytváření nových typů, díky němuž může být celkový počet typů použitých v programu libovolně velký.

Data zpracovávaná v programu jsou rozdělena na proměnné, konstanty a literály:

Konstanty reprezentují data, jejichž hodnoty jsou nastaveny v sekci deklarace konstant a během provádění programu se nemění.

Proměnné jsou deklarovány v sekci deklarace proměnných, ale na rozdíl od konstant dostávají své hodnoty během provádění programu a tyto hodnoty lze měnit. Na konstanty a proměnné lze odkazovat jménem.

Doslovný nemá žádný identifikátor a je reprezentován přímo jako hodnota v textu programu.

Typ definuje množinu hodnot, které mohou datové prvky nabývat, a množinu operací s nimi povolených.

Tato a čtyři následující kapitoly poskytují podrobný popis všechny typy.

1.1 Jednoduché typy

NA jednoduché typy Patří mezi ně ordinální, reálné a datum a čas.

Řadové typy se liší tím, že každý z nich má konečný počet možné hodnoty. Tyto hodnoty mohou být určitým způsobem seřazeny (odtud název typů), a proto může být každá z nich spojena s nějakým celým číslem - pořadovým číslem hodnoty.

Skutečné typy, přísně vzato, mají také konečný počet hodnot, který je určen formátem vnitřní reprezentace reálného čísla. Počet možných hodnot reálných typů je však tak velký, že ke každé z nich není možné přiřadit celé číslo (jeho počet).

Typ data a času navržený pro ukládání data a času. Ve skutečnosti pro tyto účely používá skutečný formát.

1.1.1 Pořadové typy

K ordinálním typům patří (viz obrázek 1.1) celočíselné, logické, znakové, výčtové a rozsahové typy. Na kteroukoli z nich lze aplikovat funkci Ord(x), která vrací pořadové číslo hodnoty výrazu X.


Rýže. 1.1 - Struktura datových typů

Pro celý typů, funkce ord(x) vrací hodnotu samotného x, tj. Ord(X) = x pro x patřící libovolnému celý typ. Použití Ord(x) na logický , symbolické a vyčíslitelné typy dává kladné celé číslo v rozsahu 0 až 1 ( booleovský typ), od 0 do 255 ( symbolický), od 0 do 65535 ( spočítatelný). Typová řada zachovává všechny vlastnosti základního ordinálního typu, takže výsledek aplikace funkce ord(x) na něj závisí na vlastnostech tohoto typu.

Funkce můžete také použít na ordinální typy:

před(x)- vrátí předchozí hodnotu ordinálního typu (hodnotu, která odpovídá ordinálnímu číslu ord(x) -1, tj. ord(pred(x)) = ord(x) - 1;

succ(x)- vrátí další hodnotu ordinálního typu, která odpovídá řadovému číslu ord(x) +1, tedy ord(Succ(x)) = ord(x) + 1.

Například pokud program definuje proměnnou

pak funkce PRED(c) vrátí znak "4" a funkce SUCC(c) vrátí znak "6".

Pokud si nějaké představíte ordinální typ jako uspořádaná množina hodnot rostoucí zleva doprava a zabírající určitý segment na číselné ose, pak funkce pred(x) není definována pro levý a succ (x) pro pravý konec tohoto segmentu.

Celočíselné typy . Rozsah možných hodnot celočíselných typů závisí na jejich vnitřní reprezentaci, která může být jeden, dva, čtyři nebo osm bajtů. V tabulce 1.1 ukazuje názvy celočíselných typů, délku jejich vnitřní reprezentace v bajtech a rozsah možných hodnot.

Tabulka 1.1 - Typy celých čísel

Jméno Délka, bajty Rozsah hodnot
Kardinál 4 0. .. 2 147 483 647
Byte 1 0...255
Shortint 1 -128...+127
Smallint 2 -32 768...+32 767
Slovo 2 0...65 535
Celé číslo 4
Longint 4 -2 147 483 648...+2 147 483 647
Int64 8 -9*1018...+9*1018
LongWord 4 0. . .4 294 967 295

Typy LongWord A Int64 byly poprvé představeny ve verzi 4 a typy Smallint A Kardinál není k dispozici v Delphi 1. Typ celé číslo pro tuto verzi trvá 2 bajty a má rozsah hodnot od -32768 do +32767, tedy stejný jako Smallint .

Při používání procedur a funkcí s celočíselnými parametry byste se měli řídit „vnořováním“ typů, tzn. kdekoli jej lze použít slovo, povoleno používat Byte(ale ne naopak), v Longint"vstoupí" Smallint, což zase zahrnuje Shortint .

Seznam postupů a funkcí použitelných na integrální typy, je uveden v tabulce. 1.2. Písmena b, s, w, i, l označují výrazy tohoto typu: Byte , Shortint, Word, Integer a Longint ,

x je výraz kteréhokoli z těchto typů; písmena vb, vs, vw, vi, vl, vx označují proměnné odpovídajících typů. Nepovinný parametr je uveden v hranatých závorkách.

Tabulka 1.2 - Standardní postupy a funkce použitelné pro celé typy

Odvolání Typ výsledku Akce
abs(x) x Vrátí modul x
chr(b) Char Vrátí znak podle jeho kódu
dec(vx[,i]) - Snižuje hodnotu vx o i, a pokud není i - o 1
inc(vx[,i]) - Zvýší hodnotu vx o i, a v nepřítomnosti i - o 1
ahoj(w) Byte Vrátí nejvyšší úklon argumentu
ahoj (já) Stejný Vrátí třetí bajt
Lo(i) Vrátí dolní bajt argumentu
Nízký) Stejný
lichý(l) Boolean Vrátí hodnotu True, pokud je argumentem liché číslo
Náhodné (w) Stejné jako parametr Návraty pseudonáhodné číslo, rovnoměrně rozložené v rozsahu 0...(w-l)
sqr(x) X Vrátí druhou mocninu argumentu
vyměnit (i) Celé číslo Vymění bajty ve slově
vyměnit (w) Slovo Stejný

Při práci s celými čísly bude typ výsledku odpovídat typu operandů, a pokud jsou operandy různých typů celých čísel - obecný typ, který zahrnuje oba operandy. Například při provozu s zkratka A slovo běžný typ bude celé číslo. V standardní nastavení kompilátor Delphi nevytváří kód, který řídí případné ověření hodnota je mimo přijatelný rozsah, což může vést k nedorozuměním.

Booleovské typy . Mezi logické typy patří Boolean, ByteBool, Bool, wordBool A LongBool. Ve standardním Pascalu je definován pouze typ Boolean, jsou do Object Pascal zavedeny další logické typy kvůli kompatibilitě s Windows: typy Boolean A ByteBool každý zabírá jeden bajt, Bool A WordBool- 2 bajty každý, LongBool- 4 bajty. Booleovské hodnoty mohou být jednou z předem deklarovaných konstant False nebo True.

Protože booleovský typ je ordinální typ, lze jej použít v příkazu smyčky počitatelného typu. V Delphi 32 pro Boolean význam

Ord (True) = +1, zatímco pro ostatní typy ( Boole, WordBool atd.)

Ord(True) = -1, takže tyto druhy operátorů je třeba používat opatrně! Například pro verzi Delphi 6, spustitelný příkaz showMessage(" --- ") v následující smyčce pro nikdy nebude provedeno:

for L:= False to True do

ShowMessage("--);

Pokud nahradíme parametr smyčky typu L v předchozím příkladu za Boolean, smyčka se spustí a zpráva se na obrazovce objeví dvakrát. [Pro verze Delphi 1 a 2 ord (True) =+1 pro jakýkoli booleovský typ.]

Typ postavy . Hodnota typu znaku je množina všech znaků PC. Každému znaku je přiřazeno celé číslo v rozsahu 0...255. Toto číslo slouží jako kód pro interní reprezentaci symbolu, je vráceno funkcí ord.

Pro kódování ve Windows se používá kód ANSI (pojmenovaný podle American National Standard Institute, amerického standardizačního institutu, který tento kód navrhl). První polovina znaků PC s kódy 0...127 odpovídá tabulce 1.3. Druhá polovina znaků s kódy 128...255 se změní pro různá písma. Standardní Windows fonty Arial Cyr, Courier New Cyr a Times New Roman používají posledních 64 kódů (od 192 do 256) k reprezentaci znaků azbuky (bez písmen „ё“ a „Ё“): „A“... „Za“ jsou kódovány hodnoty 192.. 223, „a“... „i“ - 224...255. Symboly „Ё“ a „е“ mají kódy 168 a 184.

Tabulka 1.3 - Kódování znaků v souladu se standardem ANSI

Kód Symbol Kód. Symbol Kód. Symbol Kód Symbol
0 NUL 32 B.L. 64 @ 96 "
1 ZON 33 ! 65 A 97 A
2 STX 34 66 V 98 b
3 ETX 35 # 67 S 99 S
4 EOT 36 $ 68 D 100 d
5 ENQ 37 % 69 E 101 E
6 ACK 38 & 70 F 102 F
7 BEL 39 " 71 G 103 d
8" B.S. 40 ( 72 N 104 h
9 HT 41 ) 73 105 i
10 LF 42 * 74 J 106 j
11 VT 43 + 75 NA 107 k
12 FF 44 F 76 L 108 1
13 ČR 45 - 77 M 109 m
14 TAK 46 78 N 110 n
15 S.I. 47 / 79 0 111 Ó
16 DEL 48 0 80 R 112 P
17 DC1 49 1 81 Q 113 q
18 DC2 50 2 82 R 114 r
19 DC3 51 3 83 S 115 s
20 DC 4 52 4 84 T 116 t
21 N.A.K. 53 5 85 U 117 u
22 SYN 54 6 86 PROTI 118 proti
23 ETB 55 7 87 W 119 W
24 CAN 56 8 88 X 120 x
25 E.M. 57 9 89 Y 121 U
26 SUB 58 : 90 Z .122 z
27 ESC 59 ; 91 t 123 {
28 FS 60 < 92 \ 124 1
29 G.S. 61 = 93 ] 125 }
30 R.S. 62 > 94 L 126 ~
31 NÁS 63 F 95 127 r

Znaky s kódy 0...31 odkazují servisní kódy. Pokud jsou tyto kódy použity ve znakovém textu programu, jsou považovány za prázdné znaky.

Datové typy jazyka Pascal: klasifikace a popisy. Aritmetické a ordinální datové typy, akce s nimi. Aritmetické výrazy: funkce, operace a pořadí akcí. Kompatibilita datových typů a převody.

Kompilátory Pascalu vyžadují, aby byly před spuštěním programu poskytnuty informace o množství paměti potřebné ke spuštění programu. Chcete-li to provést, v části popisu proměnné ( var) musíte vypsat všechny proměnné používané v programu. Kromě toho také musíte kompilátoru sdělit, kolik paměti bude každá z těchto proměnných zabírat. Také by bylo fajn se předem dohodnout na různých operacích použitelných pro určité proměnné...

To vše lze sdělit programu jednoduchým uvedením typu budoucí proměnné. Když má kompilátor informace o typu proměnné, „rozumí“, kolik bajtů je pro ni potřeba alokovat, jaké akce s ní lze provádět a na jakých konstrukcích se může podílet.

Pro pohodlí programátorů jazyk Pascal je jich mnoho standardní typy data a navíc možnost vytvářet nové typy.

Při konstrukci nových typů dat na základě stávajících (standardních nebo opět definovaných samotným programátorem) musíme pamatovat na to, že každá budova musí být postavena na dobrých základech. Proto nyní budeme hovořit o tomto „základu“.

Na základě základní datové typy jsou vytvořeny všechny ostatní typy jazyka Pascal, které se nazývají: postavený.

Rozdělení na základní a konstruované datové typy v Pascalu ukazuje tabulka:

Datové typy vytvořené programátorem jsou popsány v části typ podle následující šablony:

typ<имя_типа> = <описание_типа>;

Například:

typ Lat_Bukvy = "a" .. "z", "A" .. "Z";

Základní datové typy jsou standardní, není tedy třeba je v sekci popisovat typ. Je-li to však žádoucí, lze to také provést například poskytnutím dlouhých definic krátká jména. Řekněme zadáním nový typ data

typ Int = Integer;

Text programu můžete trochu zkrátit.

Standardní konstruované typy také nemusí být v této části popisovány typ. V některých případech to však stále musí být provedeno kvůli požadavkům na syntaxi. Například v seznam parametrů postupy nebo funkcí Typové konstruktory nelze použít (viz přednáška 8).

Ordinální datové typy

Mezi základními datovými typy patří ty nejpozoruhodnější řadové typy. Tento název lze odůvodnit dvěma způsoby:

Standardní rutiny, které zpracovávají ordinální datové typy

Pouze pro množství řadové typy určeno následující funkce a postupy:

  1. Funkce Obj(x) vrátí pořadové číslo hodnoty proměnné x (vzhledem k typu, ke kterému proměnná x patří).
  2. Funkce Před(x) vrátí hodnotu předcházející x (neplatí pro první prvek typu).
  3. Funkce Succ(x) vrátí hodnotu následující x(k poslední prvek druh nepoužitelný).
  4. Postup Inc(x) vrátí hodnotu následující za x (pro aritmetické datové typy to je ekvivalentní operátoru x:= x + 1).
  5. Postup Inc(x, k) vrátí k-tou hodnotu za x (pro aritmetické datové typy to je ekvivalentní operátoru x:= x + k).
  6. Postup prosinec(x) vrátí hodnotu před x (pro aritmetické datové typy to je ekvivalentní operátoru x:= x - 1).
  7. Postup prosinec(x, k) vrátí hodnotu k–e předcházející x (for aritmetické datové typy to je ekvivalentní operátoru x:= x - k).

Na první pohled se zdá, jako by výsledek aplikace postupu Inc(x) se zcela shoduje s výsledkem aplikace funkce Succ(x). Rozdíl mezi nimi se však objevuje na hranicích přípustného rozsahu. Funkce Succ(x) nevztahuje se na maximální prvek jako, tady je postup Inc(x) nevyvolá žádnou chybu, ale podle pravidel strojového sčítání přidá k číslu prvku další jednotku. Číslo samozřejmě půjde za rozsah a z důvodu zkrácení se změní na číslo minimální hodnoty rozsahu. Ukazuje se, že postupy Inc() A prosinec() jakýkoli ordinální typ vnímají jako „uzavřený do kruhu“: hned po posledním přichází opět první hodnota.

Vysvětleme vše, co bylo řečeno, na příkladu. Pro datový typ

typ šestnáct = 0 .. 15 ;

pokus o přičtení 1 k číslu 15 bude mít za následek následující výsledek:

1 1 1 1 1 1 0 0 0 0

Počáteční jednotka bude odříznuta, a proto se ukazuje, že Inc(15)=0 .

Obdobná situace na spodní hranici přípustného rozsahu libovolného ordinálního datového typu je pozorována u postupu prosinec(x) a funkcí Před(x):

Datové typy související s řadové

Pojďme si nyní popsat ordinální datové typy podrobněji.

  1. Booleovský typ Boolean má dvě hodnoty: False a True a platí pro ně následující rovnosti:
  2. Na typ postavy Char obsahuje 256 znaků rozšířená ASCII tabulka(například "a", "b", "i", "7", "#"). Číslo znaku vrácené funkcí Obj() , odpovídá číslu tohoto symbolu v ASCII tabulka.
  3. Integer datové typy Dáme to do tabulky:
  4. Listovatelné datové typy jsou uvedeny v sekci typ výslovným uvedením jejich prvků. Například:

    typ Týden = (ne, po, út, st, čt, pá, so);

    Připomeňme, že pro tento typ dat:

  5. Intervalové datové typy jsou specifikovány pouze hranicemi jejich rozsahu. Například:

    typ Měsíc = 1 .. 12 ;
    Budni = Po .. Pá;

  6. Programátor může vytvářet vlastní datové typy, které jsou kombinací několika standardních typů. Například:

    zadejte Valid_For_Identifiers = "a" .. "z" , "A" .. "Z" , "_" , "0" .. "9" ;

Tento typ spočívá v kombinaci několika intervalů a in v tomto případě pořadí latinských písmen bylo změněno: pokud ve standardním typu

Federální agentura pro vzdělávání

Abstraktní

"TYPY DAT V PASCALU"

1. Datové typy

Jakékoliv údaje, tzn. konstanty, proměnné, vlastnosti, funkční hodnoty nebo výrazy jsou charakterizovány svými typy. Typ definuje sadu platných hodnot, které může objekt mít, a také sadu platných operací, které na něj lze použít. Kromě toho typ určuje také formát vnitřní reprezentace dat v paměti PC.

Obecně se jazyk Object Pascal vyznačuje rozvětvenou strukturou datových typů (obr. 1.1). Jazyk poskytuje mechanismus pro vytváření nových typů, díky němuž může být celkový počet typů použitých v programu libovolně velký.

Data zpracovávaná v programu jsou rozdělena na proměnné, konstanty a literály:

Konstanty reprezentují data, jejichž hodnoty jsou nastaveny v sekci deklarace konstant a během provádění programu se nemění.

Proměnné jsou deklarovány v sekci deklarace proměnných, ale na rozdíl od konstant dostávají své hodnoty během provádění programu a tyto hodnoty lze měnit. Na konstanty a proměnné lze odkazovat jménem.

Doslovný nemá žádný identifikátor a je reprezentován přímo jako hodnota v textu programu.

Typ definuje množinu hodnot, které mohou datové prvky nabývat, a množinu operací s nimi povolených.

Tato a čtyři následující kapitoly poskytují podrobné popisy každého typu.

1.1 Jednoduché typy

Jednoduché typy zahrnují ordinální, reálné a datum a čas.

Řadové typy se liší tím, že každá z nich má konečný počet možných hodnot. Tyto hodnoty mohou být určitým způsobem seřazeny (odtud název typů), a proto může být každá z nich spojena s nějakým celým číslem - pořadovým číslem hodnoty.

Skutečné typy, přísně vzato, mají také konečný počet hodnot, který je určen formátem vnitřní reprezentace reálného čísla. Počet možných hodnot reálných typů je však tak velký, že ke každé z nich není možné přiřadit celé číslo (jeho počet).

Typ data a času navržený pro ukládání data a času. Ve skutečnosti pro tyto účely používá skutečný formát.

1.1.1 Pořadové typy

K ordinálním typům patří (viz obrázek 1.1) celočíselné, logické, znakové, výčtové a rozsahové typy. Na kteroukoli z nich lze aplikovat funkci Ord(x), která vrací pořadové číslo hodnoty výrazu X.


Rýže. 1.1 - Struktura datových typů

Pro celý typů, funkce ord(x) vrací hodnotu samotného x, tj. Ord(X) = x pro x patřící libovolnému celý typ. Použití Ord(x) na logický , symbolické a vyčíslitelné typy dává kladné celé číslo v rozsahu 0 až 1 ( booleovský typ), od 0 do 255 ( symbolický), od 0 do 65535 ( spočítatelný). Typová řada zachovává všechny vlastnosti základního ordinálního typu, takže výsledek aplikace funkce ord(x) na něj závisí na vlastnostech tohoto typu.

Funkce můžete také použít na ordinální typy:

před(x)- vrátí předchozí hodnotu ordinálního typu (hodnotu, která odpovídá ordinálnímu číslu ord(x) -1, tj. ord(pred(x)) = ord(x) - 1;

succ(x)- vrátí další hodnotu ordinálního typu, která odpovídá řadovému číslu ord(x) +1, tedy ord(Succ(x)) = ord(x) + 1.

Například pokud program definuje proměnnou

pak funkce PRED(c) vrátí znak "4" a funkce SUCC(c) vrátí znak "6".

Představíme-li si jakýkoli ordinální typ jako uspořádanou množinu hodnot, rostoucí zleva doprava a zabírající určitý segment na číselné ose, pak funkce pred(x) není definována pro levou a succ (x) pro pravou konec tohoto segmentu.

Celočíselné typy . Rozsah možných hodnot celočíselných typů závisí na jejich vnitřní reprezentaci, která může být jeden, dva, čtyři nebo osm bajtů. V tabulce 1.1 ukazuje názvy celočíselných typů, délku jejich vnitřní reprezentace v bajtech a rozsah možných hodnot.

Tabulka 1.1 - Typy celých čísel

Jméno Délka, bajty Rozsah hodnot
Kardinál 4 0. .. 2 147 483 647
Byte 1 0...255
Shortint 1 -128...+127
Smallint 2 -32 768...+32 767
Slovo 2 0...65 535
Celé číslo 4
Longint 4 -2 147 483 648...+2 147 483 647
Int64 8 -9*1018...+9*1018
LongWord 4 0. . .4 294 967 295

Typy LongWord A Int64 byly poprvé představeny ve verzi 4 a typy Smallint A Kardinál není k dispozici v Delphi 1. Typ celé číslo pro tuto verzi trvá 2 bajty a má rozsah hodnot od -32768 do +32767, tedy stejný jako Smallint .

Při používání procedur a funkcí s celočíselnými parametry byste se měli řídit „vnořováním“ typů, tzn. kdekoli jej lze použít slovo, povoleno používat Byte(ale ne naopak), v Longint"vstoupí" Smallint, což zase zahrnuje Shortint .

Seznam procedur a funkcí použitelných pro celočíselné typy je uveden v tabulce. 1.2. Písmena b, s, w, i, l označují výrazy tohoto typu: Byte , Shortint, Word, Integer a Longint ,

x je výraz kteréhokoli z těchto typů; písmena vb, vs, vw, vi, vl, vx označují proměnné odpovídajících typů. Nepovinný parametr je uveden v hranatých závorkách.

Tabulka 1.2 - Standardní postupy a funkce platné pro celé typy

Odvolání Typ výsledku Akce
abs(x) x Vrátí modul x
chr(b) Char Vrátí znak podle jeho kódu
dec(vx[,i]) - Snižuje hodnotu vx o i, a pokud není i - o 1
inc(vx[,i]) - Zvýší hodnotu vx o i, a v nepřítomnosti i - o 1
ahoj(w) Byte Vrátí nejvyšší úklon argumentu
ahoj (já) Stejný Vrátí třetí bajt
Lo(i) Vrátí dolní bajt argumentu
Nízký) Stejný
lichý(l) Boolean Vrátí hodnotu True, pokud je argumentem liché číslo
Náhodné (w) Stejné jako parametr Vrátí pseudonáhodné číslo rovnoměrně rozložené v rozsahu 0...(w-l)
sqr(x) X Vrátí druhou mocninu argumentu
vyměnit (i) Celé číslo Vymění bajty ve slově
vyměnit (w) Slovo Stejný

Při práci s celými čísly bude typ výsledku odpovídat typu operandů, a pokud jsou operandy různých celočíselných typů, bude obecný typ, který zahrnuje oba operandy. Například při provozu s zkratka A slovo běžný typ bude celé číslo. Ve výchozím nastavení kompilátor Delphi nevytváří kód pro kontrolu, zda je hodnota mimo rozsah, což může vést k nedorozuměním.

Booleovské typy . Mezi logické typy patří Boolean, ByteBool, Bool, wordBool A LongBool. Ve standardním Pascalu je definován pouze typ Boolean, jsou do Object Pascal zavedeny další logické typy kvůli kompatibilitě s Windows: typy Boolean A ByteBool každý zabírá jeden bajt, Bool A WordBool- 2 bajty každý, LongBool- 4 bajty. Booleovské hodnoty mohou být jednou z předem deklarovaných konstant False nebo True.

Protože booleovský typ je ordinální typ, lze jej použít v příkazu smyčky počitatelného typu. V Delphi 32 pro Boolean význam

Ord (True) = +1, zatímco pro ostatní typy ( Boole, WordBool atd.)

Ord(True) = -1, takže tyto druhy operátorů je třeba používat opatrně! Například pro verzi Delphi 6, spustitelný příkaz showMessage(" --- ") v následující smyčce pro nikdy nebude provedeno:

for L:= False to True do

ShowMessage("--);

Pokud nahradíme parametr smyčky typu L v předchozím příkladu za Boolean, smyčka se spustí a zpráva se na obrazovce objeví dvakrát. [Pro verze Delphi 1 a 2 ord (True) =+1 pro jakýkoli booleovský typ.]

Typ postavy . Hodnota typu znaku je množina všech znaků PC. Každému znaku je přiřazeno celé číslo v rozsahu 0...255. Toto číslo slouží jako kód pro interní reprezentaci symbolu, je vráceno funkcí ord.

Pro kódování ve Windows se používá kód ANSI (pojmenovaný podle American National Standard Institute, amerického standardizačního institutu, který tento kód navrhl). První polovina znaků PC s kódy 0...127 odpovídá tabulce 1.3. Druhá polovina znaků s kódy 128...255 se pro různá písma liší. Standardní písma Windows Arial Cyr, Courier New Cyr a Times New Roman používají posledních 64 kódů (od 192 do 256) k reprezentaci znaků azbuky (bez písmen „ё“ a „Ё“): „A“... „Z“ jsou zakódované hodnoty 192..223, „a“... „i“ - 224...255. Symboly „Ё“ a „е“ mají kódy 168 a 184.

Tabulka 1.3 - Kódování znaků v souladu se standardem ANSI

Kód Symbol Kód. Symbol Kód. Symbol Kód Symbol
0 NUL 32 B.L. 64 @ 96 "
1 ZON 33 ! 65 A 97 A
2 STX 34 66 V 98 b
3 ETX 35 # 67 S 99 S
4 EOT 36 $ 68 D 100 d
5 ENQ 37 % 69 E 101 E
6 ACK 38 & 70 F 102 F
7 BEL 39 " 71 G 103 d
8" B.S. 40 ( 72 N 104 h
9 HT 41 ) 73 105 i
10 LF 42 * 74 J 106 j
11 VT 43 + 75 NA 107 k
12 FF 44 F 76 L 108 1
13 ČR 45 - 77 M 109 m
14 TAK 46 78 N 110 n
15 S.I. 47 / 79 0 111 Ó
16 DEL 48 0 80 R 112 P
17 DC1 49 1 81 Q 113 q
18 DC2 50 2 82 R 114 r
19 DC3 51 3 83 S 115 s
20 DC 4 52 4 84 T 116 t
21 N.A.K. 53 5 85 U 117 u
22 SYN 54 6 86 PROTI 118 proti
23 ETB 55 7 87 W 119 W
24 CAN 56 8 88 X 120 x
25 E.M. 57 9 89 Y 121 U
26 SUB 58 : 90 Z .122 z
27 ESC 59 ; 91 t 123 {
28 FS 60 < 92 \ 124 1
29 G.S. 61 = 93 ] 125 }
30 R.S. 62 > 94 L 126 ~
31 NÁS 63 F 95 127 r

Znaky s kódy 0...31 odkazují na servisní kódy. Pokud jsou tyto kódy použity ve znakovém textu programu, jsou považovány za prázdné znaky.

Chcete-li zadat char jsou použitelné relační operace a také vestavěné funkce:

znak (c)- typ funkce char; převede výraz na typ Byte do symbolu a vrátí jej s jeho hodnotou;

UpCase (CH)- typ funkce char; vrátí velké písmeno, pokud je sn malé latinské písmeno, jinak vrátí samotný symbol сн (pro azbuku vrátí původní znak).

Typ výčtu . Výčtový typ je určen výčtem hodnot, které může přijímat. Každá hodnota je pojmenována nějakým identifikátorem a je umístěna v seznamu ohraničeném závorkami, například:

barvy = (červená, bílá, modrá);

Použití výčtových typů činí programy vizuálnějšími.

Korespondence mezi hodnotami typu výčtu a pořadovými čísly těchto hodnot je stanovena pořadím výčtu: první hodnota v seznamu obdrží pořadové číslo 0, druhá - 1 atd. Maximální mohutnost výčtu typ výčtu je 65536 hodnot, takže ve skutečnosti typ výčtu určuje nějakou podmnožinu celého typu slovo a lze jej považovat za kompaktní deklaraci skupiny celočíselných konstant s hodnotami 0, 1 atd.

Použití výčtových typů zvyšuje spolehlivost programů tím, že vám umožňuje řídit hodnoty, které odpovídající proměnné přijímají. V Object Pascalu je to povoleno inverzní konverze: libovolný typ výrazu Slovo lze převést na hodnotu výčtového typu, pokud hodnota celočíselného výrazu nepřekročí mohutnost tohoto typu. Tohoto převodu je dosaženo použitím automaticky deklarované funkce s názvem výčtového typu.

Typová řada . Typ rozsahu je podmnožinou svého základního typu, což může být jakýkoli ordinální typ kromě typu rozsahu.

Typ rozsahu je definován hranicemi jeho hodnot v rámci základního typu:

<мин.знач.>..<макс.знач.>

Zde<мин. знач. > - minimální hodnota typový rozsah;<макс. знач. >- jeho maximální hodnota.

Typ rozsahu nemusí být popsán v sekci typ, ale lze jej zadat přímo při deklaraci proměnné.

Při určování typu rozsahu musíte dodržovat následující pravidla:

dva znaky „..“ jsou považovány za jeden znak, takže mezery mezi nimi nejsou povoleny; levý okraj rozsahu by neměl přesahovat jeho pravý okraj.

Typ rozsahu zdědí všechny vlastnosti svého základního typu, ale s omezením jeho nižší síly. Zejména pokud je definována proměnná.

Standardní knihovna Object Pascal obsahuje dvě funkce, které podporují práci s typy rozsahů:

vysoká (x)- vrátí maximální hodnotu typu rozsahu, do kterého proměnná x patří;

Nízká (x)- vrátí minimální hodnotu typu rozsahu.

1.1.2 Reálné typy

Na rozdíl od ordinálních typů, jejichž hodnoty jsou vždy mapovány na řadu celých čísel, a jsou tedy v PC reprezentovány naprosto přesně, definují hodnoty reálných typů libovolné číslo pouze s určitou konečnou přesností v závislosti na vnitřním formátu reálného čísla. .

Tabulka 1.4 - Reálné typy

V předchozí verze Typ Delphi 1...3 Nemovitý zabíral 6 bajtů a měl rozsah hodnot od 2,9*10-39 do 1,7*1038. Ve verzích 4 a 5 je tento typ ekvivalentní typu Dvojnásobek. V případě potřeby (z důvodů kompatibility) použijte 6bajtový Nemovitý, musíte zadat direktivu kompilátoru (SREALCOMPATIBILITY ON).

Jak je vidět z tabulky. 1.4, reálné číslo v Object Pascalu zabírá 4 až 10 souvislých bytů a má v paměti PC následující strukturu.

Zde s je znaková číslice čísla; e - exponenciální část; obsahuje binární pořadí; m je mantisa čísla.

Mantisa m má délku 23 (pro singl) až 63 (pro Rozšířené) binární bity, což zajišťuje přesnost 7...8 pro singl a 19...20 za Rozšířené desetinné číslice. Desetinná čárka (čárka) je implikována před levou (nejvýznamnější) číslicí mantisy, ale při práci s číslem se její pozice posouvá doleva nebo doprava v souladu s binárním pořadím čísla uloženého v exponenciální části. , proto se operace s reálnými čísly nazývají aritmetika s pohyblivou řádovou čárkou (čárkou).

Všimněte si, že aritmetický koprocesor vždy zpracovává čísla ve formátu Rozšířené, a další tři skutečné typy v tomto případě získáme prostým zkrácením výsledků na požadované velikosti a slouží především k úspoře paměti.

Typy zaujímají v Object Pascalu zvláštní pozici komp A Měna, se kterými se zachází jako s reálnými čísly se zlomkovými částmi pevné délky: in komp zlomková část má délku 0 číslic, tj. jednoduše chybí, v měna délka zlomkové části je 4 desetinná místa. Ve skutečnosti oba typy definují velké celé číslo se znaménkem, které ukládá 19...20 platných desetinných číslic (interně zabírají 8 souvislých bajtů). Přitom ve výrazech komp A měna plně kompatibilní s jakýmkoli jiným skutečné typy: jsou na nich definovány všechny reálné operace, lze je použít jako argumenty matematické funkce atd. Nejvhodnější aplikační oblastí pro tyto typy je účetnictví.

1.1.3 Typ data a času

Typ datetime je definován standardním identifikátorem TDateTime a je navržen tak, aby současně ukládal datum i čas. Ve vnitřní reprezentaci zabírá 8 bajtů a podobně měna představuje reálné číslo s pevnou zlomková část: celočíselná část čísla ukládá datum a zlomková část ukládá čas. Datum je definováno jako počet dní, které uplynuly od 30. prosince 1899, a čas jako zlomek dne, který uplynul od 0 hodin, takže hodnota 36444,837 odpovídá datu 10/11/1999 a času 20:05. Počet dní může být záporný, ale hodnoty menší než -693594 (odpovídající datu 00.00.0000 z narození Krista) jsou funkcemi pro převod data na typ řetězce ignorovány.

Výše uvedený typ dat TDateTime jsou definovány stejné operace jako s reálnými čísly a výrazy tohoto typu mohou zahrnovat konstanty a proměnné celočíselného a reálného typu.

Protože typ TDateTime kompatibilní s formátem reálných čísel snadno určíte datum, které je od daného data několik dní dopředu nebo dozadu: k tomu stačí přičíst nebo odečíst požadované celé číslo od daného data, resp.

1.2 Strukturované typy

Jakýkoli z strukturované typy(a v Object Pascalu jsou čtyři: pole, záznamy, množiny a soubory) se vyznačuje množstvím prvků, které tvoří tento typ. Každý prvek zase může patřit ke strukturovanému typu, což nám umožňuje mluvit o možném vnoření typů. Object Pascal umožňuje libovolnou hloubku vnoření typů, ale celková délka žádného z nich v interní reprezentaci by neměla přesáhnout 2 GB.

Pro kompatibilitu se standardním Pascalem umožňuje Object Pascal umístit vyhrazené slovo před deklaraci strukturovaného typu zabalené, instruující kompilátor, aby uložil, kdykoli je to možné, paměť přidělenou pro objekty strukturovaného typu; ale kompilátor ve skutečnosti ignoruje tuto instrukci: „balení“ dat do Object Pascalu se provádí automaticky, kdykoli je to možné.

1.2.1 Pole

Pole v Object Pascalu jsou v mnoha ohledech podobná podobné typy data v jiných programovacích jazycích. Výrazná vlastnost pole je, že všechny jejich součásti jsou data stejného typu (případně strukturovaná). Tyto komponenty lze snadno organizovat a ke kterékoli z nich lze přistupovat jednoduše zadáním sériového čísla.

Popis typu pole je specifikován takto:

<имя типа>= pole [<сп.инд.типов>] z<тип>;

Zde<имя типа>- správný identifikátor; pole, z- vyhrazená slova (pole, z);<сп.инд.типов>- seznam jednoho nebo více typů indexů oddělených čárkami; hranaté závorky rámující seznam jsou požadavkem syntaxe;<тип>- jakýkoli typ Object Pascal.

Jakékoli ordinální typy s kapacitou ne větší než 2 GB lze v Object Pascalu použít jako indexové typy (tj. LongWord A Int64)

Hloubka vnoření strukturovaných typů obecně a následně i polí je libovolná, takže počet prvků v seznamu typů indexů (velikost pole) není omezen, nicméně celková délka vnitřní reprezentace libovolné pole nesmí být větší než 2 GB. V paměti PC na sebe prvky pole navazují tak, že při přechodu z nízkých adres na vysoké se nejrychleji změní index pole nejvíce vpravo.

V Object Pascal můžete použít jediný operátor přiřazení k přenosu všech prvků jednoho pole do jiného pole stejného typu.

1.2.2 Záznamy

Záznam je datová struktura sestávající z pevného počtu komponent nazývaných pole záznamu. Na rozdíl od pole mohou být komponenty (pole) záznamu různé typy. Aby bylo možné odkazovat na jednu nebo druhou složku záznamu, jsou pole pojmenována.

Struktura deklarace typu příspěvku je:

<имятипа>= záznam<сп.полей>konec;

Zde<имя типа>- správný identifikátor; záznam/konec- vyhrazená slova (nahrát, ukončit);<сп.полей>- seznam oborů; je posloupnost částí záznamu oddělených středníkem.

Každá část záznamu se skládá z jednoho nebo více identifikátorů polí oddělených čárkami.

Nabídka případ..., který otevírá variantní část, je povrchně podobný odpovídajícímu výběrovému operátoru, ale ve skutečnosti hraje pouze roli zvláštního funkční slovo, označující začátek variantní části. To je důvod, proč na konec variantní části byste neměli dávat konec jako pár případ.... (Vzhledem k tomu, že variantní část je vždy poslední v záznamu, stále následuje konec, ale pouze jako dvojice k záznamu). Tlačítko pro výběr vět případ... je kompilátor efektivně ignorován: jediným požadavkem v Object Pascalu je, že klíč definuje nějaký standardní nebo předem deklarovaný ordinální typ.

Názvy polí musí být jedinečné v rámci záznamu, kde jsou deklarovány, pokud však záznamy obsahují pole záznamu, tj. jsou vnořena do sebe, mohou se názvy opakovat na různých úrovních vnoření.

1.2.3 Sady

Sady - jedná se o soubory stejného typu objektů, které spolu logicky souvisí. Povaha vztahů mezi objekty je pouze naznačena programátorem a není nijak řízena Object Pascalem. Počet prvků obsažených v sadě se může lišit od 0 do 256 (množina, která neobsahuje prvky, se nazývá prázdná). Právě nestálost počtu jejich prvků se liší od polí a záznamů.

Dvě množiny jsou považovány za ekvivalentní tehdy a jen tehdy, když jsou všechny jejich prvky stejné a pořadí prvků v množině je lhostejné. Jsou-li všechny prvky jedné množiny zahrnuty také do jiné množiny, říká se, že první množina je zahrnuta do druhé. Prázdná sada je součástí jakékoli jiné sady.

Popis typu sady je:

<имя типа>= sada<базовый тип>;

Zde<имя типа>- správný identifikátor; sada, z- vyhrazená slova (množina, z);<базовый тип>- základní typ množinových prvků, které mohou být libovolného ordinálního typu, kromě Word, Integer, Longint, Int64 .

Pro definici množiny se používá tzv. konstruktor množiny: seznam specifikací prvků množiny oddělený čárkami; seznam je zarámován hranaté závorky. Specifikace prvků mohou být konstanty nebo výrazy základního typu nebo typ rozsahu stejného základního typu.

Vnitřní struktura množiny je taková, že každému jejímu prvku je přiřazena jedna binární číslice (jeden bit); je-li prvek součástí množiny, má příslušná číslice hodnotu 1, jinak - 0. Zároveň minimální jednotka paměť je jeden bajt obsahující 8 bitů, takže kompilátor přidělil množinám jeden bajt a v důsledku toho se kapacita každé z nich rovnala 8 prvkům. Maximální kapacita sady je 256 prvků. Pro takové sady kompilátor alokuje 16 sousedních bajtů.

A ještě jeden experiment: změňte rozsah základního typu na 1..256. Přestože mohutnost tohoto typu je 256 prvků, při pokusu o kompilaci programu kompilátor ohlásí chybu: Sets může mít maximálně 256 prvků (sady mohou mít maximálně 256 prvků), protože číslování prvků sady začíná od nuly, bez ohledu na spodní hranici deklarovanou v programu. Kompilátor umožňuje použít jako základní typ celočíselný rozsahový typ s minimální hranicí 0 a maximálně 255, nebo libovolný výčtový typ s maximálně 256 prvky (maximální mohutnost výčtového typu je 65536 prvků).

1.3 Struny

Pro zpracování textu v Object Pascal se používají následující typy:

krátký řetězec shortString nebo řetězec [n], kde n<= 255;

dlouhý řetězec řetězec ;

široká čára WideString ;

null-terminální řetězec pchar .

Tyto typy mají společné to, že s každým řetězcem se zachází jako s jednorozměrným polem znaků, přičemž počet znaků se může v běžícím programu měnit: pro řetězec [n] se délka řetězce mění z 0 na n, pro řetězec A pchar- od 0 do 2 GB.

Standardní Pascal používá pouze krátké řetězce řetězec[n]. V paměti je takovému řetězci přiděleno n+i bajtů, první bajt obsahuje aktuální délku řetězce a samotné znaky jsou umístěny od 2. bajtu. Protože délka řetězce je v tomto případě jeden bajt, maximální délka krátkého řetězce nesmí přesáhnout 255 znaků. Standardní typ se používá k deklaraci krátkého řetězce maximální délky ShortString(ekvivalent Řetězec).

Windows široce používá null-terminální řetězce, což jsou řetězce znaků oddělené znakem #o. Maximální délka takového řetězce je omezena pouze dostupnou pamětí a může být velmi velká.

V 32bitových verzích Delphi byl představen nový typ řetězec, spojující vymoženosti obou typů. Při práci s tímto typem je paměť alokována podle potřeby (dynamicky) a je omezena dostupnou pamětí, kterou má program k dispozici.

1.4 Ukazatele a dynamická paměť

1.4.1 Dynamická paměť

Dynamická paměť- to je PC RAM poskytnutá programu během jeho provozu. Dynamické umístění dat znamená použití dynamické paměti přímo za běhu programu. Naproti tomu statickou alokaci provádí kompilátor Object Pascal při kompilaci programu. U dynamického umístění není předem znám typ ani množství dat, která mají být umístěna.

1.4.2 Směrovky

PC RAM je soubor buněk pro ukládání informací – bajtů, z nichž každá má své číslo. Tato čísla se nazývají adresy a umožňují přístup k libovolnému bajtu paměti. Object Pascal poskytuje programátorovi flexibilní prostředky pro správu dynamické paměti – tzv. ukazatele. Ukazatel je proměnná, která jako svou hodnotu obsahuje adresu bajtu paměti. Pomocí ukazatelů můžete umístit libovolný z datových typů známých v Object Pascal do dynamické paměti. Jen některé z nich ( Byte, Char, ShortInt, Boolean) zabírají jeden bajt ve vnitřní reprezentaci, zbytek - několik sousedních. Ukazatel tedy ve skutečnosti adresuje pouze první bajt dat.

Ukazatel je obvykle spojen s nějakým datovým typem. Takové ukazatele budeme nazývat typované. Chcete-li deklarovat zadaný ukazatel, použijte ikonu ^, která je umístěna před odpovídajícím typem.

V Object Pascalu můžete deklarovat ukazatel, aniž byste jej museli přidružit k nějakému konkrétnímu datovému typu. K tomu slouží standardní typ ukazatel, Například:

Ukazatele tohoto druhu se budou nazývat netypizované. Vzhledem k tomu, že ukazatele bez typu nejsou přidruženy ke konkrétnímu typu, lze je použít k dynamickému přidělování dat, jejichž struktura a typ se během běhu programu mění.

Jak již bylo zmíněno, hodnoty ukazatelů jsou adresy proměnných v paměti, takže byste očekávali, že hodnotu jednoho ukazatele lze předat druhému. Ve skutečnosti to není tak úplně pravda. V Object Pascal můžete předávat hodnoty pouze mezi ukazateli přidruženými ke stejnému datovému typu.

1.4.3 Alokace a uvolnění dynamické paměti

Veškerá dynamická paměť v Object Pascal je považována za spojité pole bajtů, které se nazývá halda.

Paměť pro jakoukoli dynamicky alokovanou proměnnou je alokována procedurou New. Parametrem pro volání této procedury je zadaný ukazatel. V důsledku přístupu získá ukazatel hodnotu odpovídající adrese, ze které lze umístit data. Hodnota, na kterou ukazuje ukazatel, tedy skutečná data přidělená haldě, je označena znaménkem ^, které je umístěno bezprostředně za ukazatelem. Pokud za ukazatelem není znak ^, znamená to adresu, kde se data nacházejí. Má smysl znovu se zamyslet nad tím, co bylo právě řečeno: hodnota jakéhokoli ukazatele je adresa, a abychom naznačili, že nemluvíme o adrese, ale o datech, která se na této adrese nacházejí, je za znakem ^ umístěn ukazatel (někdy se tomu říká dereferenční ukazatel).

Dynamicky alokovaná data lze použít kdekoli v programu, kde platí pro konstanty a proměnné příslušného typu

Dynamickou paměť lze nejen vzít z haldy, ale také ji vrátit zpět. Chcete-li to provést, použijte postup Likvidace. Například operátoři

Dispose(pJ);

Dispose(pR);

vrátí do haldy paměť, která byla dříve přiřazena ukazatelům pJ a pR (viz výše).

Všimněte si, že procedura Dispose (pPtr) nezmění hodnotu ukazatele pPtr, ale pouze vrátí paměť dříve přidruženou k tomuto ukazateli do haldy. Opětovné použití postupu na volný ukazatel však povede k chybě běhu. Programátor může označit uvolněný ukazatel rezervovaným slovem nil.

1.5 Typové aliasy

Pro jakýkoli typ můžete deklarovat tolik aliasů, kolik chcete. Například:

TMyInteger = Integer;

V budoucnu lze alias používat stejným způsobem jako základní typ:

Mylnt: TMyInteger;

Mylnt:= 2*Round(pi);

Tyto druhy aliasů se obvykle používají ke zlepšení viditelnosti programového kódu. V Object Pascalu však můžete deklarovat aliasy se silným typem přidáním rezervovaného typu slova před název základního typu:

TMyIntegerType = typ Integer;

MylntVar: TMyIntegerType;

Z pohledu kompilátoru jsou typové aliasy kompatibilní se základním typem v různých druzích výrazů, ale ve skutečnosti deklarují nový datový typ, takže je nelze použít jako formální parametry pro volání podprogramů místo základního typu. Pokud je např. vyhlášen postup

function MylntFunc(APar: integer): Integer;

pak takový apel na ni

MylntFunc(MylntVar)

bude kompilátorem považováno za chybné.

Silně typované aliasy nutí kompilátor generovat informace o typu běhu (RTTI). Tyto informace jsou obvykle využívány prostředím Delphi pro podporu fungování různých typů editorů.




Nahoru