Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
79
Добавлен:
15.06.2014
Размер:
308.22 Кб
Скачать

Записи

Запись - описание комбинированного типа, состоящее из нескольких полей, каждое из которых имеет свой тип.

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

var Zz: ARRAY [1..20] OF student; s:string; {g:word;}
i,m,j: byte;

{Пример Разработать программу Формирования списка студентов с указанием дат рождения, номера комнаты, если живет в общежитии, индекса и адреса, если в Омске, а так же вывода сведений о студенте по его ИМЕНИ}

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

Соседние файлы в папке 2семестр