Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
datove typy.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
38.76 Кб
Скачать

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, DICpole1

      jmeno, prijmenipole2

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_cisloarray[1..15]of integer

      prijmeniarray[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_cislo1telefon

      telefonni_cislo2array[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 

    Jmenostring

    Titulstring[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 eE (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ů

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]