Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции(ЯВУ)-Паскаль.doc
Скачиваний:
62
Добавлен:
31.03.2015
Размер:
1.08 Mб
Скачать

5.3. Записи

Запись – это составная структура данных, объединяющая в единое целое фиксированное количество компонент различных типов. Компоненты записи называются полями.

Переменная типа «запись» объявляется в разделе Varс помощью ключевого словаrecordследующим образом:

Var<имя переменной>:record

<поле 1>: <тип 1>;

<поле 2>: <тип 2>;

……

<поле n>: <типn>;

end;

Ключевое слово «end» завершает объявление переменной типа «запись».

Количество полей записи может быть любым. Поля записи могут быть простыми переменными любого типа, массивами и другими записями. В разделе описания типов можно объявить имя типа «запись»:

Type <имя типа> = record

<поле 1>: <тип 1>;

<поле 2>: <тип 2>;

……

<поле n>: <типn>;

end;

Тогда объявление переменной типа «запись» будет иметь следующий вид:

Var<имя переменной>: <имя типа «запись»>;

Например,

Type Tstudent = record

FAM: string[20]; {фамилия}

IM: string[20]; {имя}

OT: string[30]; {отчество}

GR: integer; {год рождения}

NZACH: integer; {номер зачетки}

NGR: string[30]; {номер группы}

end;

Var Zap_St: Tstudent;

Доступ к элементам (полям) записи производится с помощью составного имени:

<имя переменной типа «запись»>.<имя поля>.

Например,

Zap_St.FAM:=’Иванов’; или

Readln(Zap_St.FAM);

Для того, чтобы не писать имя переменной типа «запись» при каждом обращении к ее полям, можно использовать оператор with, называемый оператором присоединения, который имеет следующий синтаксис:

with<список ссылок на переменную>do<оператор>; или

with<список ссылок на переменную>dobegin

<операторы>

end;

Например,

Type T_Rec = record

A:integer ;

B: byte;

C: char;

end;

Var Rec: T_Rec;

……….

begin

……….

with Rec do begin

A:=10;

B:=1;

C:=’*’;

End;

Данный оператор withэквивалентен следующей последовательности операторов:

Rec.A:=10; Rec.B:=1; Rec.C:=’*’;

Оператор withиспользуется для того, чтобы не писать полные, составные имена элементов записей.

Константы типа «запись» определяются в разделе Constследующим образом:

Const<имя константы>: <имя типа «запись»>=

(<имя поля 1>:<значение поля 1>;

<имя поля 2>:<значение поля 2>;

…………………………………..

<имя поля n>:<значение поляn>) ;

Например,

Type Data= record

Y: integer;

M: 1..12;

D: 1..31;

End;

Const DR: Data=(Y:1984;

M: 4;

D: 12);

5.4. Записи с вариантами

Записи, рассмотренные выше, относятся к данным постоянной структуры. В языке Паскаль имеется возможность работы с записями переменной структуры, которые называются записями с вариантами. Запись с вариантами включает две части:

  • фиксированную часть;

  • вариантную часть.

Вариантные компоненты включаются в зависимости от признака. Тип записи с вариантами объявляется следующим образом:

Type <имя типа> = record

Case<признак варианта>: <тип признака>of

<константа 1>: (<описание поля 11>;

< описание поля 12>;

< описание поля 1n1>);

<константа 2>: (<описание поля 21>;

< описание поля 22>;

< описание поля 2n2>);

……

<константа k>: (<описание поляk1>;

< описание поля k2>;

< описание поля knk>);

End;

Например,

Type Coordinates = record

case kind: (dekart,polar) of

dekart: (x, y: real);

polar: (r, fi: real)

End;

В данном примере определено объединение двух взаимно исключающих вариантов. Однако на практике приходится объединять два типа с частично совпадающими компонентами. Для такой ситуации применяется тип «запись с вариантами», который объявляется следующим образом типа:

Type <имя типа> = record

<поле 1>: <тип 1>;

<поле 2>: <тип 2>;

……

<поле n>: <типn>;

Case<признак варианта>: <тип признака>of

<константа 1>: (<описание поля 11>;

< описание поля 12>;

< описание поля 1n1>);

<константа 2>: (<описание поля 21>;

< описание поля 22>;

< описание поля 2n2>);

……

<константа k>: (<описание поляk1>;

< описание поля k2>;

< описание поля knk>);

End;

Примером записи с вариантами является карточка отдела кадров, которая различается для дипломированных специалистов и работающих студентов:

Type Zap_OK = record

Fio:string[80]; {Фамилия, имя, отчество }

TabN: integer; {}

Otdel: integer; {}

Gpr: integer; {}

Case prizn: byte of

1: (spec_dipl:string[80]; {специальность по диплому}

nom_dipl: string[10]; {номер диплома}

stag:integer); {стаж работы по специальности}

2: (Nmvuz:string[80]; {наименование вуза, где учится сотрудник}

Nk:byte; { номер курса}

P_I_O:byte) {признак использования учебного отпуска}

End;