Pascal adattípusok

TURBO PASCAL TÍPUSRENDSZERE

Egyszeru

Összetett

Mu-
tató

String

Valós

Sorszámozott

Tömb

Állomány

Rekord

Halmaz

Objektum

array

file

record

set

object

^

Elore definiált

Felso-
rolásos

Inter-
vallum

Logikai

Egész

Karakter

string

real
single
double
extended
comp

boolean

integer shortint longint
word
byte

char

 

Egyszeru típusok

Sorszámozott típusok :

Minden lehetséges értékhez hozzárendelheto egy sorszám (ORDinal number), az értékek sorszámuk alapján rendezettek. A sorszámok : 0,1,2 ... (kivéve az egész típusoknál, ahol a sorszám maga a szám)

Sorszámozott típusok :

Egész típusok

Típus

Értékei

Tárolás

Byte

0..255

Elojel nélküli, 8 bit

Word

0..65,535

Elojel nélküli, 16 bit

ShortInt

-128..127

Elojeles, 8 bit

Integer

-32,768..32,767

Elojeles, 16 bit

LongInt

-2,147,483,648..
2,147,483,647

Elojeles, 32 bit

Tárolás : eloször mindíg a kisebb helyiértéku bájt kerül tárolásra.

Karakteres típus - CHAR

Minden karakternek van egy kódja. A 256 karakter közül 128 kódja minden számítógépen ugyanaz. Ezeket a karaktereket nemzetközileg szabványosították - ezek az ASCII kódok. (ASCII = American Standard Code for Information Interchange). A többi 128 karakter kódja már eltérhet a különbözo gépeken. A karakter típusú változó egy ASCII kódot tartalmaz. A karakereket megadhatjuk ASCII kódjaikkal is. Tárolás : a karakter ASCII kódja 1 bájton tárolódik.

Logikai típus - BOOLEAN

A logikai típusú változónak két értéke van : igaz (true) vagy hamis (false). Mivel sorszámozott típus : igaz=1, hamis=0. Tárolása 1 bájton történik. A nullától eltéro érték mindíg 1-et jelent.

Felsorolt típus

A felsorolt elemek azonosítók lehetnek. A felsorolás sorrendje definiál egy sorszámot (0, 1, …) a pascal ennek alapján azonosítja az elemeket. A felsorolt típust a felhasználó által definiált típusok közé soroljuk. pl.:

type szin=(kek, zold, piros, fekete);

var x,y: szin ;

Begin

x:= piros;

end.

Intervallum típus

Egy már létezo sorszámozott típus egy intervalluma. Tárolás: az intervallum típus használatával nem spórolunk memóriát. A tárolás a legkisebb olyan típus szerint történik, amelybe belefér az alsó és a felso határ is.

Var inttip : 'a'..'m';

inttip2 : -1..100;

Begin

inttip := 'b';

inttip2 := 56;

End.

Valós típusok

A valós számokat lebegopontosan szokták ábrázolni.

Lebegopontos alak: [mantissza][E][exponens].

Jelentése :

A valós számok kiírása - hacsak nem adjuk meg a kiírandó jegyek számát - lebegopontos formában történik, adott hosszon.

Típus

Értékei

Tárolás

Pontosság

Real

2.9E-39..1.7E38

6 bájt

11-12 jegy

Single

1.5E45..3.4E38

4 bájt

7-8 jegy

Double

5.0E-324..1.7E308

8 bájt

15-16 jegy

Extended

3.4E-4932..1.1E4932

10 bájt

19-20 jegy

Comp

(-9.2E18..9.2E18)

8 bájt

19-20 jegy egész érték

 

Tárolás: Elojel (1 bit) + Szignifikáns tizedesei + Exponens. A tárolás mindig a legkisebb helyértéku bájttal kezdodik. Az elojelbit mindig az utolsó.

Karakterlánc típus - STRING [maxhossz]

. Ha elhagyjuk m, maxhossz=255. A karakterlánc elemei Char típusúak, azaz bármilyen ASCII karakterek lehetnek. A karakterlánc típusú változó egy dinamikus hosszúságú karaktersorozat. Hivatkozás a karakterlánc egy elemére: azonosító[index] , ahol . A string hosszát a LENGTH függvény adja vissza. Tárolás: a string típus memóriaigénye: maxhossz+1 bájt.

Mivel a string, tovább bontható karakterekre, ezért szokták az összetett típusokhoz is sorolni.

Összetett típusok:

Állomány típusok:

Szöveges állományok

Típusos állományok

Típusnélküli állományok

Tömb típus - ARRAY[indextítpus] OF alaptípus

Meghatározott számú azonos típusú elemekbol álló összetett adattípus.

Jellemzoi:

Dimenziók száma: A turbo pascal gyakorlatilag nem korlátozza a dimenziók számát, a pontos érték implementációfüggo, de elég nagy. pl.:255 (A standard pascal csak egydimenziós tömböket kezelt, de ekkor is megvolt a lehetoségünk, hogy többdimenziós tömböt tömbök tömbjeként hozzunk létre.)
Dimenziók indexkészletének típusa: A turbo pascalban sorszámozott típus lehet.
Dimenziók indexkészletének tartománya: A turbó pascalban az alsó és felso határt is a programozó szabja meg.

Elemeinek típusa: Állomány és objektumtípus kivételével bármi lehet

A tömb elemei szintén lehetnek tömbök, így is deklarálhatunk két, három, ill több dimenziós tömböket. Az egydimenziós tömböt vektornak, a kétdimenziósat mátrixnak szokták hívni. A tömb elemeire a tömbazonosítóval és az elem indexével hivatkozhatunk. Tárolás: a tárolás sorfolytonosan történik. A lefoglalt memóriaterület méretét az alaptípus mérete és az egyes indextípusok számossága határozza meg.

  Type tömb = Array [1..80] Of Char;

Var tömbaz : tömb;
tömb1 : Array [1..50] Of Integer;
Begin
tömbaz [1] := 'A'; {A tömbelemre indexeléssel hivatkozunk}
tömb1 [23] := 2456;
End.

 Rekord típus - RECORD [mezolista] END

Egy rekord, különbözo típusú elemeket fog össze.

Hivatkozás a rekord egy elemére: rekordazonosító.mezoazonosító.

Type Telkönyv_rekord = Record
Név : String;
Telefon : Integer;
End;
Var Telkönyv : Telkönyv_rekord;

Hivatkozhatunk az egész recordra a nevének megadásával ill. a record egy mezojére minosítéssel. pl.:

Begin
Telkönyv.Név := " Földházi "
Telkönyv.Telefon := 1234567;
End.

 Halmaztípus - SET OF alaptípus

A halmaz speciális adattípus, melyen a matematikai halmazelmélet muveletei végezhetok el. A halmaz elemi ugyanolyan típusúak. Az alaptípus csak sorszámozott lehet, melyben a lehetséges elemek sorszámai 0 és 255 közöttiek lehetnek. Azaz a halmaz maximális elemszáma: 256. Egy halmazt megadhatunk úgy, hogy felsoroljuk elemeit, vagy egy intervallumot adunk meg. Az üres halmaz: [] .

Tárolás : 1 elem = 1 bit.

Muveletek : * metszet; + egyesítés; - különbség; =: egyenloség; <>: nem egyenlo; <=: részhalmaz; >=: részhalmaz; IN elemvizsgálat.

in : eleme; logikai értéket ad

+ : únió, egyesítés; multihalmaz esetén mindem elem megjelenik az únióban

* : metszet; multihalmaz esetén ahányszor mind a kettoben benne van

- : különbség

létrehozás : 1.megadunk valamilyen elôírást, feltételt, predikátumot, amely alapján

eldöntheto, hogy egy elem beletartozik-e a halmazba (multihalmazba)

X={a 200-nál nem nagyobb páros, pozitív egészek}

2. felsoroljuk a halmaz elemeit

Y={fekete, piros, kék, zöld, sárga. fehér}

3. üres halmaz

bôvítés : únióval

törlés : különbségképzéssel

csere : nincs - nem tudom megfogni az elemet, akkor sem, ha benne van

rendezés : nincs

keresés : nincs

elérés : nincs

feldolgozás : a négy halmazmuvelettel

Halmazok összehasonlítása : Két halmaz egyenlo (=), ha ugyanazon elemeket tartalmazza, különben nem egyenloek (<>).

Egy halmaz kisebb a másiknál, ha részhalmaza annak (valódi <, nem valódi<=).

Var H1 : Set of 1..100;
H2 : Set of Char;
Begin
H1 := [1,7,77,34,33];
H1 := [1..23];
H2 := [];
End.

Objektum típus

Állomány típusok

Mutató típusok:

Egy mutató típusú változó tartalma egy cím, amely egy másik, a végrehajtás során dinamikusan létrehozott változó memóriabeli elhelyezkedését adja meg. A magas szintu programozási nyelvekben az így megcímzett változó meghatározott alaptípussal rendelkezik.

 

Általánosan definiálva:

1. A pointer lehetôvé teszi egy, a végrehajtás során létrehozott struktúra elérését

2. A deklarációban meg kell adni a mutató által címzett objektum típusát

var P: ^Alaptípus;

3. Muveleti primitívek

· egy pointer hozzárendelése egy (adott típusú) objektumhoz, amelyet ezen mutató segítségével érhetünk el. Ez a hozzárendelés nem adja meg az objektum értékét.
Ez az eljárás keres a memórában az alaptípusban meghatározott objektum számára egy elegendôen nagy helyet, lefoglalja azt és a címét elhelyezi a mutatóban.

new(P); hatására tehát a P mutató és az általa címzett P^ objektum (aminek nincs saját azonosítója) használhatóvá válik.

 

· jelezzük, ha nincs semmilyen objektum megcímezve
Ha a NIL elôredefiniált konstanst rendeljük egy mutatóhoz, akkor a mutató nem címez objektumot.

P:=NIL;

· A pointerrel megcímzett objektum megszüntetése
Ez az eljárás felszabadítja a P^ objektum által lefoglalt helyet és a P mutatónak NIL értéket ad, ezzel jelezve, hogy többé nem címez semmilyen objektumot.

Dispose(P);

 

· egy másik pointerrel megcímzett objektumhoz való hozzáférés
P:=Q;

Mielôtt a P mutatónak értékül adjuk a Q által címzett objektum címét figyeljünk rá, hogy felszabadítsuk a P-vel elôzôleg esetleg megcímzett objuktumot. Ellenkezô esetben ez az objektum foglalja ugyan a memórában a helyet, de nem tudjuk azt elérni, hiszen nincs saját azonosítója.

Hasonlóan, ha egy eljárásban egy lokális mutató típusú változó megcímez egy dinamikus struktúrát, akkor az eljárásból való kilépés elôtt gondoskodnunk kell arról, hogy ezt a struktúrát felszabadítsuk, vagy hozzáférhetôvé tegyük egy nem lokális változóval is. Ugyanis a lokális változók automatikus megszüntetése az eljárás végén nem szünteti meg az általuk címzett objektumot.

Ha két mutató ugyanazt az objektumot címzi, és azt akarjuk, hogy az egyik közülük ne mutasson semmire, akkor NIL értétet kell hozzárendelnünk, ahelyett, hogy a Dispose utasítást használnánk, hiszen a másik mutatóval továbbra is címezni kívánjuk az obejktumot.

· értékadás a pointerrel megcímzett objektumnak

P^:=érték;

· hozzáférhetôvé tenni a mutatóval címzett objektum értékét

változó:=P^;

· két mutatót összehasonlítása, vajon ugyanazt az objektumot címzik-e meg

if P=Q then ...

 

Ha egy mutatót érték szerint adunk át paraméterként egy eljárásnak, akkor maga a mutató a hívó eljárásban nem változtatja ugyan az értékét, de az általa címzett objektum igen.

A turbo pascal operátorai:

Op.

Egész

Valós

Sztring

Halmaz

+

Összeadás

Összeadás

Összefuzés

Únió

-

Kivonás

Kivonás

---

Különbség

*

Szorzás

Szorzás

---

Metszet

/

---

Osztás

---

---

DIV

Osztás

---

---

---

MOD

Maradékos osztás

---

---

---

 

Egész

Logikai

NOT

Bitmód negálás

Logikai negálás

AND

Bitmód ÉS

Logikai ÉS

OR

Bitmód VAGY

Logikai megengedo VAGY

XOR

Bitmód kizáró VAGY

Logikai kizáró VAGY

SHL

Bitmód balra tolás

 

SHR

Bitmód jobbra tolás

 

Összehasonlító operátorok adnak Boolean (logikai) eredményt:

Op.

Mit jelent

Milyen típusokat hasonlít össze

=

Egyenlo

Megszámlálható, valós, sztring, halmaz, mutató

<>

Nem egyenlo

Megszámlálható, valós, sztring, halmaz, mutató

<

Kisebb mint

Megszámlálható, valós, sztring

>

Nagyobb mint

Megszámlálható, valós, sztring

<=

Kisebb vagy egyenlo

Megszámlálható, valós, sztring, halmaz

>=

Nagyobb vagy egyenlo

Megszámlálható, alós, sztring, halmaz

 

 

Mit ad vissza

IN

Tagja-e

True-t, ha a bal oldali operandus (megszámlálható típus) tagja a jobb oldali operandusnak (halmaz típus)False-t, ha nem

 

A turbo pascal precedencia szintei:

@, not
*, /, div, mod, and, shl, shr
+, -, or, xor
=, <>, <, >, <=, >=, in