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'; |
|
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 |
|