Wednesday, December 15, 2010

Pascal хэлний бичлэг төрөл

Янз бүрийн төрөлтэй өгөгдлүүдийг нэг өгөгдлийн төрөл мэт нэгэтгэсэн төрлийг бичлэг (Record) төрөл гэдэг. Түүний гишүүдийг талбар гэнэ. Бичлэг төрлийг RECORD END нөөц үгээр зарлана. (Бичлэг нь C/C++ хэлний struct гэсэн үг. Энэ талаар дараа бичинэ.)
Формат нь:
Type
нэр = Record
<Талбар1>: <Төрөл>;
<Талбар2>: <Төрөл>;
<Талбар3>: <Төрөл>;
...
<ТалбарN>: <Төрөл>
End;


Ижил төрөлтэй талбаруудыг ,-аар тусгаарлаж, жагсааж бичиж болно.
Жишээлбэл,
Type
myRecord = Record
k, h, a, i: integer;
r: arary[1.100] of real;
o: boolean;
s: string
End;
Бичлэг төрлийн хувьсагчийг ердийн хувьсагч зарлахтай адилхан зарладаг. Дээрхи myRecord төрлийн хувьсагчийг дараах байдлаар зарлана гэсэн үг.
myR: myRecord;
myRec: array[1.10] of myRecord;
Бичлэгийн талбаруудад хандахдаа, мөн утга олгохдоо бичлэг төрлийн хувьсагчийн ард . тавьж цэгийн ард нь талбарын нэрийг бичинэ. Ж, Printf(' k = ', myR.k); w := myRec[2].r[1]; myR.k := 10; myR.s := 'Good luck!', myRec[1].o := TRUE; г.м.
Мөн WITH оперторыг ашиглан бичлэгийн талбаруудад шууд утга олгож болно. Формат нь:
With <хувьсагч> do <оператор>;
Ж.
With myR do begin
k := 0;
s := 'Easy';
o := FALSE;
end;

Жишээ бодлого. N тооны хүний биеийн жин ба өндөр өгөгджээ. Энэ хүмүүсийг өндөр ба жингийн харьцаа нь хамгийн их байхаас нь эхлэн эрэмбэлж гарга.
Энэ бодлогыг Бичлэг ашиглаж бодъё.

Program Example_Record;

Type
People = record
m, h: integer;
end;

var
person: array[1..100] of People;
n, i, j: integer;
q: array[1..100] of real;
p: People;
qq: real;

begin
write(' n = ');
read(n);
for i:=1 to n do begin
writeln(' ', i, '-r khun');
write(' Jin: ');
read(person[i].m);
write(' Ondor: ');
read(person[i].h);
q[i] := person[i].h / person[i].m;
end;

for i:=1 to n-1 do
for j:=i+1 to n do
if q[i] < q[j] then begin
p := person[i];
person[i] := person[j];
person[j] := p;
qq := q[i];
q[i] := q[j];
q[j] := qq;
end;
for i:=1 to n do begin
writeln('');
writeln(' ', i, '-r khun');
write(' Jin: ');
writeln(person[i].m);
write(' Ondor: ');
writeln(person[i].h);
writeln(' Kharitsaa: ', q[i]:0:2);
end;
end.

No comments:

Post a Comment