RECORD

DEFINIZIOA

RECORD edo erregistro datu-mota egituratua da. Erregistroak dituen elementuak eremuak deitzen dira eta datu-mota ezberdinak izan daitezke elkarrekiko, erregistroaren elementu kopurua finitua da eta eremu bakoitzaren atzipena identifikadore baten bitartez lortzen da.
ESKEMA
DATU-MOTA SORTZEN

Erregistro datu-mota bat deklaratzean, eremuak izendatzeko identifikadorea erabaki behar da eta eremu bakoitza zein datu-motatakoa izango den.

Eskeman erakusten den rdIkaslea izeneko aldagai lortzeko, aurretik deklarazio hau egin beharko da:

TYPE
DM_rdIkasle = RECORD
Izena : String[39] ;
Nota : Real ;
Helbidea : String[99] ;
Adina : Byte ;
END ;
VAR
rdIkaslea : DM_rdIkasle ;
rdIrakaslea : DM_rdIkasle ;
Ondorioz rdIkaslea eta rdIrakaslea aldagai biak datu-mota bera daukate oinarrian eta biak parekatzen dira goian erakutsi den eskemarekin.

Erregistro aldagai baten datuak gordetzeko aldagaiaren identifikadorea eta eremuaren identifikadorea idatzi behar dira horien artean lokailu bat jarri beharra dago. Pascal lengoaiak identifikadoreen arteko banaketa burutzeko puntu bat darabil, horrelaxe:
WriteLn (rdIkaslea.Izena) ;
ReadLn (rdIkaslea.Nota) ;
Puntua ken daiteke WITH klausula erabiltzen bada, aurreko aginduak honelaxe idatziko lirateke:
WITH rdIkaslea DO
BEGIN
WriteLn (Izena) ;
ReadLn (Nota) ;
END ;
ERAGIKETAK: IDATZI-IRAKURRI ETA ESLEIPENA

Erregistro bat ezin daiteke ez irakurri ez idatzi, horregatik ondoko aginduak okerrak dira:
WriteLn (rdIkaslea) ; { HAU GAIZKI DAGO }
ReadLn (rdIrakaslea) ; { HAU GAIZKI DAGO }
Aurreko adibidearen erregistroaren eremuak idatz edo irakur daiteke, eta ondorioz agindu hauek zuzenak dira:
WriteLn (rdIkaslea.Izena) ;
ReadLn (rdIkaslea.Nota) ;
Erregistro bati aplika dakioken eragiketa bakarra esleipena da, ondoko agindu hau zuzena da:
rdIkaslea := rdIrakaslea ;
ERAGIKETAK: KONPARAKETAK

Esan den bezala, erregistroek onartzen duten eragiketa bakarra asignazioa da. Hori dela eta, ezin daiteke erregistroen arteko konparaziorik egin.

Horregatik erregistro bik informazio berdina gordetzen dutela frogatzeko eremuka lan egingo da. Konparaketa helburu horrekin, ErregistroBiBerdinakOteDiren izeneko adibidean, funtzio boolear bat garatu da.
ERREGISTROAK ETA ARRAYAK

Sarritan erregistroak eta arrayak elkarrekin konbinatzen dira. Esate baterako, jarraian erregistroen array bat deklaratzen da:

TYPE
DM_rdIkasle = RECORD
Izena : String[39] ;
Nota : Real ;
END ;
DM_ardTalde = ARRAY [1..80] OF DM_rdIkaslea ;
VAR
ardIkasGela : DM_ardTalde ;
iLuzera : Integer ;
Indize : Integer ;

Datuak sartu eta eskema bat eginez:

Datuak sartu ondoren, ikusi nola eskuratuko genukeen irudiko P hori. Honelaxe zehaztuko genuke:
  • ardIkasGela arraytik abiatuta
  • ardIkasGela[Indize]arrayaren bigarren elementua erregistro bat da...
  • eta Izena eremua hartzean, hots, ardIkasGela[Indize].Izena string bat da...
  • eta bere lehen karakterea eskuratzeko ardIkasGela[Indize].Izena[1]erabiliko dugu
ARRAYAK ERREGISTROETAN

Erregistro baten eremu bat array bat izan daiteke. Esate baterako, jarraian array bat daukan erregistro bat deklaratzen da:

TYPE
DM_asKateak = ARRAY [1..3] OF String[9] ;
DM_rdIkasle = RECORD
IzenDeiturak : DM_asKateak ;
Nota : Real ;
END ;
VAR
rdIkaslea : DM_rdIkasle ;

Datuak sartu eta eskema bat eginez:

Datuak sartu ondoren, ikusi nola eskuratuko genukeen irudiko M hori. Honelaxe zehaztuko genuke:
  • rdIkaslea erregistrorik abiatuta
  • rdIkaslea.IzenDeiturak array bat da eta...
  • bere hirugarren elementua rdIkaslea.IzenDeiturak[3]izanik, badakigu string bat dela
  • eta bere lehen karakterea eskuratzeko rdIkaslea.IzenDeiturak[3][1]erabiliko dugu
ERREGISTROAK ERREGISTROETAN

Erregistro baten eremu bat beste erregistro bat izan daiteke. Esate baterako, ikusi jarraian nola deklaratzen den DM_rdLangile erregistroa bere barnean DM_rdData erregistroa daukana:

TYPE
DM_rdData = RECORD
Urtea : Integer ;
Hilea, Eguna : Byte ;
END ;
DM_rdLangile = RECORD
Izena : String[39] ;
Kategoria : Char ;
Jaioteguna : DM_rdData ;
Aintzinatasuna : DM_rdData ;
END ;
VAR
rdMekanikoa : DM_rdLangile ;

Datu-motaren eskema bat eginez:

rdMekanikoa aldagaian datuak sartzeko bi bide ditugu. Puntu konektorea birritan erabili edo bestela WITH klausula erabili. Ondoko esleipenak zuzenak dira eta edozein modutan irudian erakusten den emaitza lortuko dugu:

Puntu konektorea birritan erabiliz:
rdMekanikoa.Izena := 'Alain' ;
rdMekanikoa.Kategoria := 'B' ;
rdMekanikoa.Jaioteguna.Urtea := 1955 ;
rdMekanikoa.Jaioteguna.Hilea := 11 ;
rdMekanikoa.Jaioteguna.Eguna := 27 ;
rdMekanikoa.Aintzinatasuna.Urtea := 1987 ;
rdMekanikoa.Aintzinatasuna.Hilea := 10 ;
rdMekanikoa.Aintzinatasuna.Eguna := 30 ;
WITH klausula erabiltzean kontuz ibili behar da. Izan ere, ezinezkoa zaigu puntu konektorea kentzea Aintzinatasuna identifikadorearekin lan egitean:
WITH rdMekanikoa, Jaioteguna DO
BEGIN
Izena := 'Alain' ;
Kategoria := 'B' ;
Urtea := 1955 ;
Hilea := 11 ;
Eguna := 27 ;
Aintzinatasuna.Urtea := 1987 ;
Aintzinatasuna.Hilea := 10 ;
Aintzinatasuna.Eguna := 30 ;
END ;
     
PARAMETRO IZATEAN JOKAMOLDEA

Erregistro bat datu-mota egituratua delako beti erreferentziaz pasatuko dugu azpiprogrametara. Horregatik, azpiprograma batean honela agertuko da jokamoldearen arabera:
  • Irteerakoa denean VAR marka izango du aurrean
  • Sarrerakoa denean CONST marka izango du aurrean
ADIBIDEAK

Hona hemen erregistroen zenbait programa:
Azken aldaketa: asteartea, 2013(e)ko abuztuaren 6(e)an, 14:23(e)tan