Údajový typ záznam (Record)

14.03.2010 18:36

Dá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:

  1. pevne daný zoznam položiek záznamu
  2. položky záznamu môžu byť rôzneho dátového typu
  3. 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 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äť

Vyhľadávanie

(c) 2008 Všetky práva vyhradené.