Egyszerű adattípusok

 

a) A sorszámozott típusok

Ezek közé tartoznak: integer, shortint, longint, byte, word, boolean, char. Ide tartozik még a felsorolt típus, és a bármelyik sorszámozott típus elemiből felépített résztartománytípus.

 

b) Egész típusok

Az Integer és a Cardinal általános egész típusok mérete függ a fejlesztői rendszertől. Az Int64 típussal 2GB-nál nagyobb merevlemezek mérete is lekérdezhető.

 

Típus

méret

értékhatár

 

jelentése

 

 

 

 

(byte)

 

 

 

 

 

 

char

1 byte

0-255

0-255

-128..127

-32768..32767

0..65535

-231..231-1

2,939*10-39..1,701*1038

0..255

true / false

Egy karakter az ASCII kódtáblából

byte

1 byte

előjel nélküli egész

 

 

shortint

1 byte

előjeles rövid egész

 

 

integer

2 byte

előjeles egész

 

 

word

2 byte

előjel nélküli egész

 

 

longint

4 byte

előjeles hosszú egész

 

real

8 byte

valós szám

 

 

string

1 byte

egy max. 255 elemből álló karakterlánc

boolean

1 byte

logikai változó, igaz vagy hamis

 

 

c) A valós típusok

A valós számok tárolására öt különböző típus (real, single, double, extended, comp) áll rendelkezésre. A real típus minden megkötés nélkül használható. A másik négy típushoz a 8087 mód bekapcsolása szükséges: {$N+}.

Ha a processzor nem tartalmazza a lebegőpontos modult, akkor annak működését emulálni kell. Erre a fordítót a {$N+,E+} globális direktívával utasíthatjuk. A {$N+} direktíva hatására olyan program keletkezik fordításkor, amely csak FPU-t tartalmazó processzoron futtatható.

A lebegőpontos (floating point) elnevezés a valós számok tárolására utal. A valós számok

a x 2b formában tárolódnak, ahol az a egy fixpontos kettedes tört, míg a b a 2 hatványkitevője.

 

típus

értékkészlet

 

Pontosság

Helyfoglalás

real

2.9x10-39..1.7x1038

 

.11-12

 

6 byte

 

single

1.5x10-45..3.4x1038

 

.7-8

 

4 byte

 

double

5.0x10-324..1.7x10308

 

.15-16

 

8 byte

 

extended

3.4x10-4932..1.1x104932

.19-20

 

10 byte

 

comp

.-2-63:263 -1

 

.19-20

 

8 byte

 

d) Logikai információk tárolása

A DELPHI-ban újabb típusok is megjelentek (ByteBool, WordBool, LongBool), amelyek csak a tárolási hosszban különböznek egymástól. Alaphelyzetben az egybájtos boolean típus használata javasolt.

 

e) A char típus

Csak egyetlen karakter tárolására alkalmas. Ennek módja: karakter:=’A’; vagy karakter:=#65;

 

f) A string típus

Karaktersorozatok tárolására használjuk. Lásd később.

 

g) A chr függvény

Integer paramétere egész számot fogad és az annak megfelelő sorszámú karaktert ad vissza. Például a 65 az ASCII kódtáblában az ’A’ betűt jelöli, így: x:=chr(65) esetén x értéke ’A’ lesz. Persze x-nek karakter típusúnak kell lennie, különben hibaüzenetet kapunk.

 

h) Az ord függvény

Ha bemenő paramétere byte típusú érték, akkor az ennek megfelelő karaktert adja vissza. Tehát a megadott paraméterértékhez rendelt sorszámot szolgáltatja. Formája:

 

X:=Ord(a);       (* x=97 lesz, mert az ’a’ ASCII kódja 97 *)

 

i) A succ függvény

A típus értékkészletéből megkapjuk a bemenő paraméter után következő (eggyel nagyobb sorszámú) értéket. PL. Succ(’A’)=’B’

 

j) A pred függvény

Megadja a paraméter értéke előtt álló (tőle eggyel kisebb sorszámú) értéket. PL. Pred(30)=29

A Delphi két olyan függvényt is tartalmaz, melyek segítségével megtudhatjuk egy sorszámozott típus értékkészletének határait. A low függvény az alsó, míg a high függvény a felső határt szolgáltatja. PL. high(integer)=32767

 

k) A felsorolt típus

Lehetőség van arra, hogy magunk is létrehozzunk sorszámozott típust. Ilyen felsorolt típus úgy készíthetünk, hogy kerek zárójelben, vesszővel elválasztva felsoroljuk az egyedi azonosítókat. A felsorolás egyben nagyság szerinti sorrendet is jelent, ahol az első elem sorszáma 0.

 

Pl. var nyelvek: (angol, német, spanyol);

 

A fenti deklaráció esetén az ord, succ, pred, low, high függvények természetesen használhatóak.

 

l) A résztartománytípus

Ilyet bármely sorszámozott típus tetszőleges értéksorozatával definiálhatunk.

 

PL. var index: 1..100;

 

Ha futás közben ellenőrizni kívánjuk, hogy nem lépjük-e át a résztartomány határát, akkor a programot {$R+} fordítási direktívával kell lefordítani. Ezt csak akkor ajánlatos használni, ha a program helyes működését ellenőrizzük, mivel a vizsgálat lassítja a program működését.

 

m) Mutatótípusok

A memória jobb kihasználása érdekében a lehetőség van dinamikus memóriakezelésre. Ennek során nem a fordítóprogram, hanem a programozó gondoskodik helyről a változók számára a memóriában. A mutató, melynek helyfoglalása 4 byte, memóriacímet tartalmaz. A cím első két byte-ja az offset-et, míg a következő képt byte a szegmenscímet tartalmazza.

A mutatót egyrészt a pointer típusnévvel, másrészt pedig ^típus alakú típusleírás segítségével deklarálhatjuk: var hely: pointer; ip: ^integer;

A Delphi támogatja a C nyelvben használt sztringkezelést. Az ilyen 0-végű sztringekre mindig mutatóval hivatkozunk, melynek típusa pchar (^char). A mutatótípusok értékkészlete lehetővé teszi a DOS által elérhető teljes 1MB memória címzését. Annak jelölésére, hogy egy mutató sehova sem mutat, a nil értéket használjuk: pmem:=nil;

 

n) Az idő tárolása

Delphiben az időpontok tárolását a TDateTime típusú változókban végezhetjük. Ezt a típust a System modul definiálja.

 

Összetett adattípusok

 

a) Strukturált típusok tömörített tárolása

A strukturált típusok adatelemei alaphelyzetben szó vagy duplaszó határon kezdődnek, a gyorsabb elérés érdekében. Ez azt jelenti, hogy a memória nem optimálisan kihasznált. Ha a deklarációban a típusmegadás előtt a packed kulcsszót használjuk, akkor elérhetjük a memória hézagmentes felhasználását, de az adatok elérése lassúbbá válik.

 

PL. type TNumbers = Packed array [1..100] of real;

 

Az adatelemek méretének meghatározásához használhatjuk a SizeOf függvényt, amely a típus vagy változó által lefoglalt bájtok számával tér vissza.

 

b) Tömbtípusok

A tömb adott számú, azonos típusú elemet tartalmazó adattípus. Az elemtípus határozza meg, hogy milyen adatokat tartalmaz a tömb. Az elemek típusa lehet egyszerű, összetett vagy a felhasználó által definiált típus. A tömb lehet egy –két vagy több dimenziós. Az egydimenziós tömb a vektor, a kétdimenziós a mátrix.

Minden tömb a memória egy-egy folytonos területén helyezkedik el. Az egydimenziós tömb esetén az elemek egyszerűen az indexek növekvő sorrendjében követik egymást. Többdimenziós tömb elemeinek tárolása esetén mindig először a legutolsó index fut körbe, majd az utolsó előtti, stb.

Az indexhatár átlépése kideríthető  a {$R+} fordítási direktíva használatával.

 

c) Rekord típusok

Tetszőleges számú, különböző tulajdonságú rész szerepelhet benne. Típusdeklarációja a record és az end foglalt szavak között helyezkedik el. Hivatkozás a mezőkre: pl rec.tankor:=’I/14’;

Egy variálható rekordnak megadott feltételtől függően más és más mezői lehetnek. A lehetséges szerkezeteket a case szó mögött adjuk meg, a hagyományos mezők után.

A rekordok azonosítójára vonatkozó egyetlen értékadó lépésben másolhatjuk át a mezők tartalmát, ha a rekordok ugyanolyan típusúak.

 

 

 

d) Halmaz

A halmaz bizonyos tulajdonságú elemek összessége. Var változó: set of alaptípus.

Egy halmaz maximum 256 elemet tartalmazhat, és az alaptípus csak sorszámozott típus lehet. Pl. abc: set of ’a’..’z’; Az in utasítás segítségével megállapítható, hogy egy elem benne van-e a halmazban. / if (halmazelem in halmaz) then…/

 

e) Állománytípusok

A fájl azonos típusú komponensekből álló adatszerkezet, amely nagy mennyiségű adat tárolását teszi lehetővé a háttértárolón. Deklaráció: var fájlváltozó: file of típus;

Használhatunk típus nélküli állományokat is. Ilyenkor típuskonverzió nélkül érhetjük el a lemezen lévő információt. Var allomany: file;

 

f) A sztringek

A sztring karakter típusú elemekből épül fel. Maximális hossza 255 karakter. A sztring 0. byte-ja a sztring hosszát tartalmazza, ezért például egy 12 karakterből álló sztring 13 byte-ot foglal a memóriában. Ha a sztring deklarációjánál hosszabb láncot határozunk meg, mint amennyit a sztringbe írunk majd, a felesleges helyek véletlenszerű karakterekkel lesznek kitöltve.

A string típust kétféleképpen használhatjuk. Az első esetben a sztringváltozó számára maximális területet foglal le a fordítóprogram: var nev: string; Amennyiben nincs szükség 255 karakteres sztringekre, a deklarációban szögletes zárójelek között megadhatjuk a sztring maximális hosszát: kod: string[4]; A string típusú változóban tárolt szöveget egy darabban és karakterenként is feldolgozhatjuk. A karakteres elérés esetén a sztringindexben (a sztring azonosítója melletti szögletes zárójelben) kell megadni a vizsgálandó karakter sorszámát: nev:=’UFO’; elso:=nev[1];     //elso=U

 

Szabványos eljárások és függvények a sztringek kezelésére

 

a) A concat függvény

A sztringek összefűzésére alkalmazható ez a függvény, a ’+’ operátor mellett. Így bármely sztringeket összefűzhetünk, de az így kapott sztring hossza sem haladhatja meg a 255 karaktert.

 

Formája: concat(sztring1,sztring2,sztring3);    vagy    ujsztring:=’tartalom’+’másik tartalom’;

 

Ha az összefűzött sztring hossza túlnő a 255 karakteren, akkor onnantól az eredménysztring tartalma elveszik.

 

b) A copy függvény

Ezzel egy részsztringet másolhatunk ki egy nagyobb sztringből. Három paramétere van. Az első a sztring neve, amiből másolni akarunk, a második a karakter sorszáma, ahonnan kezdjük a másolást, a harmadik pedig megmondja, hogy hány karakter kerüljön másolásra.

 

Formája:

S1:=’Vadember’;

S2:=copy(s1, 4, 8);      (* Így s2 értéke: ’ember’ *)

 

c) A delete eljárás

Ez az eljárás sztringből karaktereket töröl. Első paramétere a sztring, amelyből törölni kell, a második az első törlendő karakter helye, a harmadik pedig a törlendő karakterek száma. Használata:

 

S1:=’assholefucker’;

S2:=delete(s1, 4, 4);        (* Így s2 értéke: assfucker *)

 

d) Az insert eljárás

Ezzel egy sztringbe egy részsztringet szúrhatunk be. Első paramétere a beszúrandó részsztring, második a módosítandó sztring, harmadik pedig, hogy a módosítás hányadik karaktertől kezdődjön.

 

Formája:

S1:=’fog’;

S2:=insert(’kefe’, s1, 4);        (* Így s2 értéke: fogkefe *)

 

e) A length függvény

A paraméterben megadott sztring hosszát adja vissza. Jól használható, ha egy sztring végét szeretnénk meghatározni, majd onnantól bővíteni azt. Vagy ha egy sztring elemein akarunk műveleteket végrehajtani, egy for ciklust írunk length(sztring)-ig.

 

Formája:

S:=’Nincs pénzem’;

Length(s);         (* s= 12 lesz, hiszen a szóköz is egy karaktert foglal *)

 

f) A pos függvény

Ezen függvény segítségével sztringben megadott részsztringet lehet keresni. A pos első paramétere a részsztring, a második pedig, amiben keresünk. A függvény visszatérési értéke lehet 0, ha a részsztringet nem találta, pozitív visszatérési érték esetén megtalálta, az említett számnak megfelelő helyen.

 

Formája:

S:=’Esik az eső’;         Pos(’sik’,s);           (* A pos visszatérési értéke 2 *)

 

g) Az str eljárás

Első paramétere integer vagy real típusú szám, amelyet a második paraméterben megadott sztringbe karaktersorozattá alakít át. Az egész szám paraméternél használhatjuk a mezőszélességet, valamint valós szám esetén a tizedek számára vonatkozó megadási módot is. Ha valós számnál 0 mezőszélességet adunk meg, akkor a szám egy egész és egy tizedes normál alakjában jelenik meg.

 

Formája:

Str(0.05 : 0, s);          (* s=5.0E-02 lesz //5*10-2 *)


h) A val eljárás

Három paramétere van: egy sztring, amelyet szám

A bejegyzés trackback címe:

https://delphi-learning.blog.hu/api/trackback/id/tr681599390

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása