Témakörök: k: Rekord adattípus Egymásba ágyazott rekordok With utasítás Változó rekord Rekord konstans
1. A rekord adattípus Sokszor találkozunk lkozunk olyan feladattal, melyben összetartozó adatokat, adatcsoportokat kell kezelni. Ilyen példp ldául a következk vetkező: Feladat: Készítsünk nyilvántart ntartást az osztályp lypénzről! A következő adatokat kell nyilvántartani: ntartani: Név (max.. 20 karakter) Befizetett összeg Tartozás (egész szám) (egész szám)
A feladat megoldása... Vegyünk mintának nak egy táblt blázatot: Név Befizetett összeg Tartozás Nagy Lajos 350 200 Kis Aladár 100 400 Búza Virág 600 0
Megoldás s tömbt mbök segíts tségével... A tömbt mbök k segíts tségével azonos típust pusú adatokat tudunk tárolni. t Mivel a feladatban ez nem valósul meg, az egyik megoldás s lehet a párhuzamos tömbt mbök használata. Három különbk nböző tömböt t vegyünk fel: Az egyikben a neveket,, a másikban m a befizetett összeget,, a harmadikban a tartozást tároljuk. Osztály ly-név: Tömb T (1.. 40) : szöveg[20] Osztály ly-befizetés: Tömb(1 T.. 40) : egész Osztály ly-tartozás: Tömb(1 T.. 40) : egész
Tárolás s a memóri riában... Ezek a tömbt mbök k a memó-ri riában egymás s után helyezkednek el. Egy adatcsoport mozga-tása ebben a konstruk-ci cióban csak adatonként nt lehetséges ges.. Nagy Lajos... 350... 200... Osztály-Név[1] Osztály-Név[40] Osztály-Befizetés[1] Osztály-Befizetés[40] Osztály-Tartozás[1] Osztály-Tartozás[40]
Megoldás s rekord segíts tségével... A másik m megoldás s a rekord használata. A rekord a különböző típusú,, de összetartozó adatokat összefogja,, azokat egy adatként kezeli. Az ilyen adatcsoportok a memóri riában egymás s után helyezkednek el, és s az egész adatcsoportra egy névvel n lehet hivatkozni. A rekord összetartozó adatait mezőknek nevezzük.
A rekord adattípus deklaráci ciója Type TRekord = Record Mező1 1 : Típus1 T ; Mező2 2 : Típus2 T ;... MezőN : TípusN ; End; Var Elem : TRekord; (Elem egy Tomb : Array[1.. 100] of TRekord Ha vannak azonos típusú mezők, akkor ezeket,-vel választhatjuk el egymástól. Több rekordtípusban szerepelhet ugyanaz a mezőnév, de egy rekordon belül a mezőnévnek egyedinek kell lenni! (Elem egy TRekord típusú változó) (Tomb egy rekordokból álló tömb)
Hivatkozás s a rekord mezőire... A rekord mezőire a következk vetkezőképpen hivatkozhatunk: Elem.Mező1, Elem.Mező2 2... Tomb[1].Mez [1].Mező1, 1, Tomb[1].Mez [1].Mező2,... Tomb[i]. [i].mezőn
A feladat megoldása: Az osztály nyilvántart ntartása: Type Tag = Record Nev : String[20] ; Befizetes, Tartozas : Word ; End; Var Osztaly : Array[1.. 40] of Tag
A tömb t feltölt ltése: For I:=1 to 40 do Begin Write( Kérem rem írja be a nevet: ); Readln(Osztaly Osztaly[ [ I ].Nev Nev); Write( Kérem rem írja be a befizetett összeget: sszeget: ); Readln(Osztaly Osztaly[ [ I ].Befizetes Befizetes); Write( Kérem rem írja be a tartozás s mértm rtékét: t: ); Readln(Osztaly Osztaly[ [ I ].Tartozas Tartozas); End;
A tömb t feltölt ltése más m s módon: m A tömbt mböt úgy is feltölthetj lthetjük, hogy mindig egy rekordba visszük k be az értékeket, majd az adatcsoportot áttesszük k a tömbbe: t For I:=1 to 40 do Begin Readln(Gyerek.Nev Gyerek.Nev); Readln(Gyerek.Befizetes Gyerek.Befizetes); Readln(Gyerek.Tartozas Gyerek.Tartozas); Osztaly[I]:=Gyerek End; ; A Gyerek változó Tag típusú
Az Osztály tömb t elhelyezkedése a memóri riában: Osztály[1] Osztály[2] Osztály[40] Nagy Lajos 350 200... Név Befizetés Tartozás Név Befizetés Tartozás Név Befizetés Tartozás
2. Egymásba ágyazott rekordok Előfordulhat, hogy a rekord mezője szintén rekord típus. Ekkor egymásba ágyazott rekordról beszélünk. A A rekordokat tetszőlegesen egymásba ágyazhatjuk. A A túl t l sok egymásba ágyazástól azonban óvakodjunk, mert a program áttekinthetetlen lesz!
Egymásba ágyazott rekordok Type Tnev = String[20]; Tdatum = Record Ev : Word; Ho : 1.. 12; Nap : 1.. 31; End; Tszemely = Record Nev : Tnev; Szuldatum : Tdatum; Anya : Tnev; End; Var Szemely : Tszemely
Egymásba ágyazott rekordok Előfordulhat, hogy meg kell jegyezni az anya nevét és s szület letési dátumd tumát: t: Tszemely = Record Nev : Tnev; Szuldatum : Tdatum; Anya : Record Nev : Tnev; Szuldatum : Tdatum; End; End;
A deklarált lt adatok struktúrája: Szemely Nev Szuldatum Anya Ev Ho Nap Nev Szuldatum Az elemi adatok a struktúra végein helyezkednek el. A Szemely változó összesen nyolc elemi adatból áll. Pl.: Szemely.Nev, Szemely.Szuldatum.Ev, Szemely.Anya.Szuldatum.Ev Ev Ho Nap
3. With utasítás A rekord használata az előny nyök k mellett egy apró kellemetlenséggel is jár. j A rekord mezőit állandóan minősíteni kell, ami az egyes utasításokat sokat hosszúvá teheti, és sok gépelg peléssel jár. j Ezt küszk szöböli ki a With utasítás, s, mely segíts tségével egy egész utasításcsoport scsoport minden adatát minősíthetj thetjük: With Rekord-azonos azonosító do Utasítás; s; Az utasítás általában összetett utasítás, s, amelyen belül l elegendő csak a mezőneveket megadni.
With utasítás Egy példa p a With utasítás s használat latára: For I:= 1 to 40 do With Osztaly[ [ I ] do Begin Readln(Nev Nev); Readln(Befizetes Befizetes); Readln(Tartozas Tartozas); End; ; Vigyázzunk, nehogy a For elé vigyük a With utasítást, mert akkor az I értéke definiálatlan lenne!
With utasítás A With utasításban sban több t rekord is felsorolható.. A következő két t utasítás s ekvivalens egymással: With R1, R2,..., Rn do Utasítás vagy With R1 do With R2 do... With Rn do Utasítás
With utasítás Egymásba ágyazott rekordok felsorolásakor sakor lényeges azok sorrendje: Pl.: With Szemely,, Anya, Szuldatum jó,, de értelmetlen és s hibás: With Szuldatum, Szemely, Anya
With utasítás Az utasításban sban felsorolt mezőnevekhez a fordító mindig visszafelé illeszti a rekordazonosítókat. kat. Ha az illesztés s nem sikerül, a következk vetkező azonosítót t veszi figyelembe, ha az sem megfelelő a következk vetkezőt, t, és így tovább... Pl: With Szemely, Anya, begin Nev:= := Kiss Virág ; Ev:=1974;..., Anya, Szuldatum do Mivel a Szuldatum-hoz nem tudta illeszteni a Nev mezőt, ezért az Anya-t vette figyelembe.
4. VáltozV ltozó rekord Gyakran merül l fel igényk nyként, nt, hogy a rekord többféle adatcsoportot tudjon tárolni t a feltételnek telnek megfelelően. en. A Pascal lehetőséget ad a változó rekord deklarálására. ra. Ilyenkor a rekord első része mindig egy állandó rész,, melyet a különböző változatok leírása követk vet. A rekord fizikai hosszát t a leghosszabb változatv határozza meg. A programból l bármikor b bármelyik b változatra v hivatkozhatunk, a helyes adattárol rolásra és hivatkozásra a programozónak kell figyelni.
4. VáltozV ltozó rekord A változv ltozó rekord szintaktikája: Type Trekord = Record Mezőlista Case Változó : Típus T of Érték1 : ( Mezőlista1) ; Érték2 : ( Mezőlista2) ;... End; ; Állandó rész Változó rész
Változó rekord Type Tfajta = ( Kor, Teglalap ); Tidom = Record Terulet : Real; szelektormező Case Fajta : Tfajta of Teglalap : ( Alap, Magassag : Real) ) ; Kor : ( Sugar : Real) ) ; End; Var Sikidom : Tidom;... Sikidom := Kor; Sikidom. Sugar := 4; A szelektormező értékétől függ, hogy melyik lista van érvényben.
Változó rekord Az előbbi példp ldában szereplő rekord fizikai hossza: Terulet : 6 byte Fajta: 1 byte Alap : 6 byte Magassag: : 6 byte 12 byte Sugar : 6 byte Tehát t a hossz: 6+1+6+12=19 byte
5. Konstans rekord A rekordot - ugyanúgy mint tömbt mböt - definiálhatjuk kezdőért rtékkel rendelkező rekordként nt. A rekord mezőinek úgy adunk kezdőért rtéket, hogy zárójelben z felsoroljuk az egyes mezők azonosítóit, és s kezdőért rtékeit. Az értékadásokat pontosvesszők k választjv lasztják k el egymást stól.
Konstans rekord Type Tszemely = Record Nev : string[20]; IQ : byte; End; Const Szemely : Tszemely = (Nev( : Kiss Éva ; IQ : 120)
Vége