
- •Записи
- •Begin
- •Доступ к вложенным элементам выполняется записью ряда полей через точку или оператор(ы) присоединения.
- •ПРИМЕР Напечатать сведения о студентах заданного года рождения
- •Записи с вариантами
- •Пример: Пусть необходимо собрать сведения о студентах
- •Пример предыдущий, но если студент живет в общежитии, добавить поля: если он из
- •{Пример Разработать программу Формирования списка студентов с указанием дат рождения, номера комнаты, если
- •readLN(data);

Записи
Запись - описание комбинированного типа, состоящее из нескольких полей, каждое из которых имеет свой тип.
TYPE <ИмяТипа> = RECORD {Запись} <поле1>:<тип поля1>;
<поле2>:<тип поля2>; {Список полей}
...
<полеN>:<тип поляN> end;
Пример:
TYPE
DATA = RECORD {дата рождения =записи}
{имеем 4 поля:} |
|
name: string; |
{фамилия или имя } |
den,mes: byte; |
{день, месяц} |
god: word |
{год} |
end; |
|
Пример: VAR a,b: DATA; {Объявление переменных }
1

Begin
a.name:='MARINA';
a.god:=1990; |
|
a.den:=23; |
|
a.mes:=3; |
|
Операция присваивания: |
B := A; |
Действия, разрешенные для базового типа: b.name:=‘NIK';
b.god:=a.god-1; (на год старше)
Для доступа к полям записи используется оператор присоединения: WITH <переменнаяТипа"запись"> DO <оператор>;
c |
выполнять |
||
Например: |
|
|
|
WITH a DO begin |
имя |
MARINA |
|
Год |
1990 |
||
name:='MARINA'; |
|||
|
|
||
god:=1990; |
День |
23 |
|
den:=23; |
Мес. |
3 |
|
mes:=3 |
|||
|
|
end;
2

Доступ к вложенным элементам выполняется записью ряда полей через точку или оператор(ы) присоединения.
Пример: определим сложную запись (вложенные записи)
TYPE
STUDENT=RECORD |
|
|
name:string; |
|
|
DENROGD: RECORD |
|
|
den,mes:byte; |
имя |
|
god:word |
день |
|
end; |
||
|
||
end; |
|
|
VAR s: STUDENT; |
|
|
begin |
|
|
s.name:=‘LIZA’; |
|
|
s.DENROGD.god:=1991; |
|
Или WITH s DO name:=‘LIZA’;
WITH s DO with DENROGD DO god:=1991;
Или WITH s.DENROGD DO god:=1991; DENROGD является вложенной записью для записи
denRogd Мес.
год
STUDENT 3

ПРИМЕР Напечатать сведения о студентах заданного года рождения
program zap12; USES CRT;
Type
student=record name:string[15]; denRogd: RECORD
den, mes:byte; god:word
end;
end; |
|
|
var |
|
|
Z: ARRAY [1..20] OF student; |
|
|
i, n: byte; |
|
|
BEGIN |
|
|
CLRSCR; |
|
|
writeln('ВВЕДИТЕ КОЛИЧЕСТВО СТУДЕНТОВ'); |
|
|
READln(n); |
{ввод данных} |
|
FOR i:=1 TO n DO WITH z[i] DO NAME:=‘ '; |
4 |
|
|
|

for i:=1 to n do begin
writeLN('ВВЕДИТЕ ИМЯ ',i,' СТУДЕНТА');
readln(z[i].name);
WRITELN('ВВЕДИТЕ день рождения');
readLN(z[i].denRogd.den);
WRITELN('ВВЕДИТЕ месяц рождения');
readLN(z[i].denRogd.mes);
WRITELN('ВВЕДИТЕ год рождения');
readLN(z[i].denRogd.god);
end;
writeln('СПИСОК ');
for i:=1 to n do
if z[i].denRogd.god=1992 then begin
writeLn('ИМЯ ',i, 'СТУДЕНТА');
WRITELN(z[i].name); WRITE(' день рождения '); writeln(z[i].denRogd.den); WRITE(' месяц рождения '); writeln(z[i].denRogd.mes); WRITE(' год рождения '); writeln(z[i].denRogd.god); WRITELN;
end;
5

Записи с вариантами
CASE .. OF вариантное поле при определении записи TYPE
<имя типа>=RECORD <поле1>:тип поля1;
<поле2>:тип поля2;
CASE <переменная-переключатель> OF <константа выбора1>: (<поле c11>:<тип поля с11>;
<поле с12>:<тип поля с12>;...); <константа выбора2>: (<поле с21>:<тип поля с21>;
<поле с22>:<тип поля с22>;...);
. . .
<константа выбораk>: (<поле сk1>:<тип поля ck1>;
<поле cr2>:<тип поля ck2>;...)
END;
Тип полей с11, с12 - компоненты варианта.
<константа>: ( )
6

Пример: Пусть необходимо собрать сведения о студентах
группы: |
фамилия, дата рождения, номер |
комнаты (если живет в |
общежитии) или |
почтовый индекс и адрес (если нет).
TYPE MESTO=(ob,dom); STUDENT=RECORD
name:=string;
DENROGD: RECORD data:read;
god:word
END;
CASE N OF dom: (indeks:word;adres:string);
ob: (komn:word);
END; Var z: student;
Переменную-переключатель называют также тагом (тэг, тег) - ярлыком, признаком, дискриминантом.
Пример: Cоздать запись - данные об одном из студентов - Петрове, родившемся 15.03.90, адрес; Маркса 6-2.
7

Const N=Dom;
…
Begin
With z do begin |
|
Name:=‘Petrov’; |
{z.name=‘Petrov’} |
with denRogd do begin |
|
God:=1980; |
{z.denRog.god:=1990} |
data:=15.03; |
{z.denRog.data:=15.03} |
If N=OB then read(komn); {z.komn:= }
|
else begin |
|
indeks:=24; |
End; |
ADRES:=‘Marksa 6-2’; |
|
|
… |
|
With z do write(‘i’, name); |
{печать из z.name} |
With z.denRogd do write(‘ |
’, god, ‘.’, date:5:2); {1990.15.03} |
If N=OB then With z do write (‘комната’, komn);
еlse With z do write(‘индекс’ , indeks, ‘адрес’, adress);
End.
8

Пример предыдущий, но если студент живет в общежитии, добавить поля: если он из Омска - ничего, если из
TYPE GOR=(OBL, NO);
другого города - название.
STUDENT=. RECORD name:=string; DENROGD: RECORD
… … …
Case N: Mesto OF DOM: (indeks: Byte, Adres:string);
OB: (Komn:word; Case YN: Gor OF {адрес:string} OBL: ();
NO: (Gorod:string);
End;
Var st: array [1..20] of student;
9

{Пример Разработать программу Формирования списка студентов с указанием дат рождения, номера комнаты, если живет в общежитии, индекса и адреса, если в Омске, а так же вывода сведений о студенте по его ИМЕНИ}
Program zap2case;
USES CRT; {подключение модуля СRT}
type {определение нового типа}
MESTO=(ob,dom); student=record {запись}
name:string[15];
denRogd: RECORD {вложенная
запись}
data:real;
god:word
end;
CASE N:mesto of
dom: (index:word; adres:string) ; ob: (komn:word)
end;
BEGIN CLRSCR;
writeln(‘введите количество студентов');
READln(m);
for i:=1 to m do with zz[i] do begin
writeLN(‘введите имя ',i,’студента);
readln(name); with denrogd do
begin
WRITELN(‘введите день и месяц рождения');
readLN(data);
10