Записи.
Необходимость описания атрибутов какого-либо объекта требует использования такого комбинированного типа, как запись. Например, для описания объекта «Студент» могут понадобится следующие характеристики: номер по списку (тип byte или word), Ф.И.О.(тип string), баллы (массив из 5-6 элементов, каждый из которых типа byte), средний балл (тип real ). Отдельные компоненты записи, которые называются полями, не могут рассматриваться с индексами как в массивах, поскольку имеют различный тип.
Когда задается тип «запись», используется слово RECORD, после которого перечисляются поля. После каждого поля через двоеточие указывается тип. В конце описания записи ставится слово END. Количество полей принципиально не ограниченно.
Const ColDsp = 7;
Type StrVed=record
nomer: byte;
f.i.o.: string[30];
ball: array[1..ColDsp] of byte;
srBall: real;
end;
В пределах записи имена полей не должны совпадать друг с другом, но могут совпадать с именами полей в других записях или с именами в программном блоке. После введения в разделе Type типа запись в разделе Var задаются переменные этого типа, а также могут задаваться типизированные константы в разделе Const. Для получения доступа к отдельному полю, входящему в состав записи, необходимо указать имя переменной, затем точка и после точки имя поля.
Var
OneStroka: strVed;
.............................
OneStroka.nomer:=5;
...............................
Для того, чтобы при обращении к полям переменной типа «запись» каждый раз не записывать имя переменной, можно использовать оператор над записями. Его конструкция: WITH < имя переменной> DO < оператор>;
Например: Составить программу формирования ведомости успеваемости студентов. Каждая строка ведомости включает номер по списку, Ф. И. О., баллы полученные на экзаменах по отдельным дисциплинам, средний бал студента по результатам сессии.
Program VedST;
Const ColStud=25;
ColDisp=5;
Type strVed =record
nomer: byte;
f.i.o.: string [30];
ball: array [1..ColDisp] of byte;
Srball: real;
Var
Pz00:array [1..ColStud] of strVed;
i, j: byte;
s: real;
BEGIN
for j:=1 to ColStud do
BEGIN
with pz00[i] do
BEGIN
nomer:=i;
Writeln(‘ Введите Ф. И. О. ’,i,’ -го студента‘);
Readln(f.i.o);
s:=0;
for i:= to ColDisp do
begin
Writeln(‘ Введите оценки студента ’,f.i.o.,’ по ’,j,’-ой дисциплине‘);
Readln(ball[j]);
s:=s+ball[j];
end;
Srball:= s / ColDisp;
end;
end:
end.
Дата добавления: 2015-01-13; просмотров: 792;