
- •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.2. Strukturované datové typy
Strukturovaný datový typ je v podstatě skupina jednodušších typů a proměnná strukturovaného datového typu je skupina proměnných nějakého jednoduššího typu (Nepíši záměrně "jednoduchého typu" místo "jednoduššího typu", sami dále uvidíme proč.) Každý strukturovaný datový typ poskytuje prostředky pro práci s prvky dat, tj. pro jejich zpřístupnění.
3.2.1. Datový typ pole
Tento datový typ se skládá z pevného počtu položek stejného typu. Položky se vzájemně rozlišují pomocí indexu. Mezi položkami dat a hodnotami indexů existuje jednoznačné přiřazení. Při definici pole se určuje jeho rozměr a datový typ složek. Rozměr pole určuje počet prvků, které se do pole mohou vložit. Index pole je většinou typu integer. Může jím však být i jiný ordinální typ. Velikost pole je vždy omezena paměťovými nároky. Deklarace pole vypadá následovně:
type |
pole1 = array[1..15]of integer; |
pole2 = array[1..50]of char; |
|
var |
telefonni_cislo, ICO, DIC: pole1; |
jmeno, prijmeni: pole2; |
Tímto způsobem jsou definovány nové datové typy pole1 a pole2, na které se pak lze odvolávat v části deklarace proměnných (část, začínající slovem var), jak bylo ukázáno výše. Někdy se však stává, že uvedený datový typ pole definujeme pouze pro jedinou proměnnou, potom je správný i zápis:
var |
telefonni_cislo: array[1..15]of integer; |
prijmeni: array[1..50]of char; |
Tímto způsobem pak definujeme pole patnácti číslic pro uložení jednoho telefonního čísla a pole padesáti znaků pro uložení jednoho příjmení.
Jedinou operací, která je pro proměnné typu pole definována, je označování složek - selektor pole. Výsledkem této operace je odkaz na příslušnou složku pole.
Přiřazovací příkaz, kterým se proměnné přiřadí její hodnota, můžeme u typu pole rozšířit jak na jeho složky, tak i na celé pole. Pro jednotlivé složky vypadá přiřazovací příkaz takto:
ICO[3] := 5; |
DIC[8] := 1; . |
A pro přiřazení proměnných celého pole vypadá přiřazovací příkaz takto:
DIC := ICO; , |
což odpovídá tomuto zápisu:
DIC[1] := ICO[1]; DIC[2] := ICO[2]; DIC[3] := ICO[3]; ... DIC[15] := ICO[15]; . |
Pozor však na přiřazování proměnných celého pole mezi dvěma na první pohled stejnými poli. Pokud si nadefinujete pole tímto způsobem:
type |
telefon = array[1..15]of integer; |
|
var |
telefonni_cislo1: telefon; |
telefonni_cislo2: array[1..15]of integer; |
a potom provedete přiřazovací příkaz:
telefonni_cislo2 := telefonni_cislo1; , |
jako výsledek obdržíte chybové hlášení jazyka Pascal, neboť obě proměnné jsou různého typu, i když jsou pole. Proměnnátelefonni_cislo1 je námi nadefinovaného nového typu telefon, zatímco proměnná telefonni_cislo2 je standardního typu pole.
3.2.2. Datový typ string - řetězec
V Pascalu je typ řetězec posloupností znaků s počitadlem délky na začátku. Každý řetězec má pevnou velikost (implicitně 255 znaků), i když většinou obsahuje znaků méně. Příklad je zde:
var |
Jmeno: string; |
Titul: string[50]; |
Proměnná Jmeno je řetězcem 255 znaků, proměnná Titul může obsahovat maximálně 50 znaků, může však obsahovat i méně než 50 znaků. Řetězce tohoto typu se zapisují v apostrofech, např.:
'To je vse.' |
'That''s all.' |
Jak je vidět z předcházejícího příkladu, pokud chceme uložit apostrof jakožto znak, musí se tento apostrof zdvojit.
Tento datový typ můžeme také chápat jako pole znaků a s ním jako s datovým typem pole také takto pracovat. K jednotlivým znakům přistupujeme pomocí indexů 1 až 255. V paměti počítače je však řetězec určité délky o jeden znak delší, a to o první znak s indexem 0. Ten totiž (respektive jeho ASCII kód) udává délku řetězce.
Nad tímto typem existuje několik standardních operací a funkcí, které uvedeme v tabulce:
lenght (ret) |
vrací dynamickou délku řetězce ret, výsledek je typu word |
copy (ret, poz, poc) |
vrací podřetězec o délce poc, obsažený v řetězci ret, od stanovené pozice poz |
concat (ret1, ret2, ... , retn) |
vrací spojení uvedených řetězců (obvykle se ale používá +) |
pos (podret, ret) |
vrací pozici prvního výskytu podřetězce podret v řetězci ret, výsledek je typu word; při neúspěšném hledání vrací hodnotu 0 |
delete (ret, poz, del) |
vymaže podřetězec ret délky del, začínající na pozici poz |
insert (podret, ret, poz) |
vloží podřetězec podret do řetězce ret od pozice poz |
str (cis, ret) |
převede číselnou hodnotu cis do řetězcové proměnné ret |
val (ret, prom, typ) |
převede řetězcovou proměnnou ret na číselnou proměnnou prom, ppřeváděný řetězec může obsahovat pouze číslice, desetinnou tečku, znaménka a písmena e, E (inverzní procedura k str) |
+ |
zřetězení dvou řetězců, výsledkem je opět řetězec; pokud je výsledný řetězec delší než 255 znaků, je zkrácen na délku 255 znaků |