8. Adatszerkezetek és típusok

Sok feladatot kényelmetlen (sõt, lehetetlen) egyedi változókkal megoldanunk. Gondoljunk egy névsor tárolására:
readln(a); readln(b); readln(c); readln(d); ........

Szükségünk van olyan adattípusra, amelyben több egyedi adatot lehet egyszerre tárolni. Az eddig megismert típusok elemi típusok voltak. Elemi típusokból adatszerkezeteket, összetett típusokat építhetünk. Ilyen összetett típus a tömb és a rekord. Összetett típusnál jellegzetes új mûvelet a benne lévõ egyedi típusokhoz való hozzáférés.

A tömb típusát a deklarációban a következõképpen kell jelölni:

Pédául elhelyezhetünk egy ilyen változódeklarációt:

VAR t:Array [1..10] of string;

Ennek hatására a Pascal létrehoz egy 10-elemû, stringekbõl álló tömböt. Ebben a tömbben tárolhatunk pl. egy 10 névbõl álló névsort. Ehhez szükségünk van a tömb egyes elemeinek kiválasztására. Ez a tömb indexelése: a tömb neve után szögletes zárójelben meg kell adni a megfelelõ egyedi elem indexét tömbnév[index] módon. A tömb így a következõ elemekbõl áll: t[1], t[2], ..., t[10].

For i:=1 to 10 do begin
   Write('Add meg a(z) ',i,'. nevet:'); Readln(t[i]);
End;

Látható, hogy a tömb egyes elemeivel pontosan úgy lehet bánni, mintha alaptípus (a példában string) típusú változók lennének. Csak éppen ahelyett, hogy 10 string típusú változót kellene kezelnünk, egy ciklussal fel tudjuk dolgozni a tömb összes elemét. A tömbök feldolgozása többnyire ciklussal történik.

A tömbindex csak diszkrét típusú kifejezés lehet, az indexhatárok pedig diszkrét típus részei: ezen belül viszont akármi. Tehát deklarálhatunk tömböket így is:

Var a:array['a'..'z'] of integer;
    b:array[100...110] of real;

Használhatunk többdimenziós tömböket is, ezek több indexszel kiválasztható elemekbõl állnak. Többdimenziós tömböket egymásba skatulyázott ciklusokkal dolgozunk fel, mint a következõ példa 10-szer 10-es (összesen 100 elemû) szorzótáblájának elõállításánál:

Var t:Array[1..10,1..10] of integer;
    i,j:integer;
Begin
 For i:=1 to 10 do
    For j:=1 to 10 do
       t[i,j]:=i*j;
End.

A rekord adattípus mezõkbõl áll, melyek egyedi változóként kezelhetõk. Deklarációja:

Például készíthetünk egy Ember nevû változót a következõképpen:

VAR ember:Record
             nev:string;
             szul:integer;
             suly:real;
          End;

A rekord egyes mezõit rekordnév.mezõnév formában választhatjuk ki. Például a következõképpen adhatunk értéket a rekordnak:

ember.nev:='Kovács János'; ember.szul:=1952; ember.suly:=73.5;

A fenti típusú mûveletek nehézkesek. Ha több utasítás ugyanarra a rekordra vonatkozik, használhatjuk a következõ szerkezetet:

Ekkor az utasításban szereplõ mezõnevek automatikusan a megadott rekordra fognak vonatkozni. Több utasításhoz összetett utasítást kell használnunk. Példa:

With ember Do Begin
   nev:='Kovács János';
   szul:=1952;
   suly:=73.5;
End;

A rekordok fõ szerepe az, hogy áttekinthetõbbé teszik a programot. A legtöbb feladatot meg lehet oldani rekordok használata nélkül.

Következõ fejezet
Elõzõ fejezet
Tartalomjegyzék
Honlap