Údajový typ záznam (Record)
14.03.2010 18:36Dátový typ záznam (Record)
Pole je n-tica premenných (položiek), ktoré musia byť rovnakého typu. Naproti tomu záznam je n-tica premenných (položiek), ktoré nemusia byť rovnakého typu. Hovoríme, že premenná typu záznam sa skladá zo svojich súkromných premenných.
Záznamy môžeme chápať ako jednorozmerné polia. Dátový typ záznam má tieto vlastnosti:
- pevne daný zoznam položiek záznamu
- položky záznamu môžu byť rôzneho dátového typu
- k položkám záznamu sa pristupuje cez ich identifikátor
Deklarácia záznamu:
type
Datum = record
den: 1..31;
mesiac: 1..12;
rok: 1..3000
end;
Informacie = record
meno: array[1..15]of char;
priezvisko: array[1..15]of char;
datum_narodenia: datum;
pohlavie: (muz, zena);
stav: (slobodny, zenaty, rozvedeny, vdovec)
end;
var Osoba: Informacie;
K jednotlivým položkám môžeme pristupovať cez bodku a identifikátor položky - na rozdiel od polí, kde to bolo pomocou indexu.
S celým záznamom nie je povolený ani vstup ani výstup z/do textových súborov (ale len po položkách) a ani porovnávanie obsahov záznamov. Priradenie je povolené len ak sú obe premenné identického typu (rovnako ako pre polia).
var DnesnyDatum: Datum;
DatumZaRok: Datum;
begin
DnesnyDatum.den := 15;
DnesnyDatum.mesiac := 3;
DnesnyDatum.rok := 1998;
DatumZaRok := DnesnyDatum;
DatumZaRok.rok := DatumZaRok.rok+1;
end;
Záznamy môžu byť použité ako parametre procedúr, resp. ako výsledok funkcie.
Príklad načítania a zápisu záznamu z/do súboru:
type
TDatum = record
den: 1..31;
mesiac: 1..12;
rok: word;
end;
TOsoba = record
meno: string[25];
priezvisko: string[40];
datum: TDatum;
end;
var
f: file of TOsoba;
osoba: TOsoba;
procedure TForm1.Button1Click(Sender: TObject);
begin
osoba.meno := Edit1.Text;
osoba.priezvisko := Edit2.Text;
osoba.datum.den := StrToInt(Edit3.Text);
osoba.datum.mesiac := StrToInt(Edit4.Text);
osoba.datum.rok := StrToInt(Edit5.Text);
AssignFile(f,'osoba.dat');
Rewrite(f);
Write(f,osoba);
CloseFile(f);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Text := '';
Edit2.Text := '';
Edit3.Text := '';
Edit4.Text := '';
Edit5.Text := '';
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
AssignFile(f,'osoba.dat');
Reset(f);
Read(f,osoba);
CloseFile(f);
Edit1.Text := osoba.meno;
Edit2.Text := osoba.priezvisko;
Edit3.Text := IntToStr(osoba.datum.den);
Edit4.Text := IntToStr(osoba.datum.mesiac);
Edit5.Text := IntToStr(osoba.datum.rok);
end;
end.
Príkaz with
Príkaz with slúži na zjednodušenie a sprehľadnenie zápisu programu, v ktorom sa často pristupuje k položkám záznamu
begin
DnesnyDatum.den:=15;
DnesnyDatum.mesiac:=3;
DnesnyDatum.rok:=1998;
with Dnesnydatum do
begin
den:=15;
mesiac:=3;
rok:=1998;
end;
DatumZaRok:=DnesnyDatum;
with DatumZaRok do rok:=rok+1;
end.
Variantné záznamy
Sú to také záznamy, ktoré majú vo svojej štruktúre naviac ešte variantnú časť. Niekedy sa totiž stane, že definujeme také typy, ktoré sú len rôzne varianty toho typu, a preto ich možno napísať do variantnej časti. Typy, špecifikujúce niekoľko variant záznamu, sa nazývajú typy variantných záznamov.
Príklad:
type Informacie = record
meno, priezvisko: array[1..15] of char;
datum_narodenia: datum;
case pohlavie: (muz, zena) of
muz: (vaha: real; fuzy: boolean);
zena: (miery: array[1..3] of integer)
end;
———
Späť