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.