Google PageRank

 

Rekordok és típusok

A rekordok

A változódeklarálás lehetőségeit szeretném tovább feszegetni. Itt szó lesz a váltók csoportosításáról. Ha több változó írja le egy adatelem tulajdonságait, akkor nem árt rekordokba foglalni őket. Szemléltető példaként vegyük azt, hogy több ember nevét és adatait (lakhely, telefonszám, stb.) szeretnénk tárolni. Ehhez létre kell hoznunk egy rekordot, így minden személy adatait egy-egy rekord tárolja.

var

 adatok:record

  nev:string[50];

  telefonszam:string[14];{Nem célszerű számként tárolni, mert 0-val is kezdődhet.}

  iranyitoszam:longint;

 end;

Látszólag semmi értelme ennek, de a fájlkezelésnél ez elengedhetetlen lesz.

Na jó! Ezt már deklaráltuk. De szeretnénk is használni.

adatok.nev:='Trab Antal';

adatok.telefonszam:='0366985978';{Telefonbetyárok figyelmébe ajánlom, hogy csak kitaláltam, tehát nem biztos, hogy létezik is.}

Van más alternatíva is, ha szeretnéd megspórolni, hogy ne kelljen állandóan odaírni, hogy "adatok.".

with adatok do begin

 nev:='Trab Antal';

 telefonszam:='0366985978';

end;

Csak ilyenkor vigyázni kell egy dologgal!

var

 adat:record

  elso:byte;

  masodik:word;

 end;

 elso:byte;

begin with adat do begin

 elso:=54;{Ez bizony megkavarja a helyzetet. Ezért is nem szeretem alkalmazni, de azt hiszem, ilyenkor az "adat.elso"-nek ad értéket, nem pedig az "elso"-nek. Ki lehet próbálni:D}

end end.

A típusok

Azért veszem most ezt a témát is, mert szorosan kapcsolódik az előbbihez.

A lényeg: mi van, ha szeretnék egy olyan típust deklarálni, aminek már eleve az a felépítése, mint ennek a recordnak, amit letárgyaltunk?

type

 adat=record{Sic! Nincs ott hiba. Tényleg egyenlőségjel kell.}.

  nev:string[50];

  telefonszam:string[14];

  iranyitoszam:longint;

 end;

{Ha csak ennyit írsz be, csak a változó típusát hoztad létre, a memóriából nem foglal le még semmit a változóhoz.}

Mint egy folytatásként leírom, hogy hogyan kell hivatkozni a típusra.

var szemely:adat;{És ennyi! Tehát ha több ilyen adat típusú változót szeretnél deklarálni, akkor azt ilyen könnyedén!}

Kis eltérés van a változóra hivatkozásnál.

 szemely.nev:='Idét Lenke';
Bemutató program

Ezzel azt hiszem, hogy végeztem is. Nézzünk egy programot! Egy-egy ember telefonszámát szeretnénk tárolni.

Ja! És ne felejtsétek el, hogy mivel nem menti el az adatokat, azok a program bezárásával kitörlődnek.

program telefonkonyv;

type

 adat=record

  nev:string[50];

  tel:string[14];

 end;

var

 szemelyek:array[1..25] of adat;{Csak azért 25 elemű, mert általában 25 soros egy DOS képernyő-mi ezen még nem tudunk állítani.}

 db,menupont,i:byte;{A pillanatnyilag használható adatok számát jelzi a "db". A "menupont" használni kívánt menüpontot jelzi. Mint már valahol említettem az "i" index.}

begin

 db:=0;

 repeat

  writeln('Írd be a használni kívánt menüpont számát, és nyomj entert!');

  writeln('1. Új adat beolvasása');

  writeln('2. Adatok megjelenítése');

  writeln('3. Kilépés');

  readln(menupont);

  while(menupont<1)or(menupont>3) do begin

   writeln('Nincs ilyen menupont. Kérlek írd újra!');

   writeln('1. Új adat beolvasása');

   writeln('2. Adatok megjelenítése');

   writeln('3. Kilépés');

   readln(menupont);

  end;

  case menupont of

   1:begin

    if db<>25 then

    begin

     inc(db);

     write('Név: '); readln(szemelyek[db].nev);

     write('Telefonszám: '); readln(szemelyek[db].tel);

    end else writeln('Nem fér több adat a telefonkönyvbe.');

   end;

   2:begin

    if db<>0

    then for i:=1 to db do

     writeln(szemelyek[i].nev,': ',szemelyek[i].tel)

    else writeln('Nincs még adat a telefonkönyvben.');

   end;

  end;

 until menupont=3;

end.

Forráskód letöltése

Program letöltése