Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1-7,13-15,20-32.docx
Скачиваний:
5
Добавлен:
26.09.2019
Размер:
48.11 Кб
Скачать

1.Записи(тип Record).Поля записи.

Объединение элементов произвольных типов называется записью. Элементы записи называется её полями. Запись-это неоднородная структура данных, доступ к элементам записи произвольный. Также как у массива, характер внесения данных в запись является разрушающим.

Записи более универсальны, чем массивы, т.к. элементы могут иметь разные типы. В то же время массивы являются более гибкими структурами данных, т.к. значения индекса можно вычислять.

Описание записей имеет вид:

Type<имя>=record;

<список полей>:<тип 1>;

<-//->:<тип n>;

[<вариантная часть>]

End;

Список полей - последовательное описание полей записи, разделённых запятой. Поле записи может быть записью. Можно создавать массивы из записи.

Допускается record определять с помощью var.

Var student : record;

Name:string[20];

Group:byte;

Marks:array[1..4] of byte;

End;

2.Доступ к полям записи. Оператор With.

Доступ к полям записи осуществляется через полное имя поля, которое образуется с помощью:

<имя_записи>.<имя_поля>

Другим способом доступа осуществляется с помощью оператора With:

With student do

Begin

Writeln(name);

For i:=1 to 4 do read(marks[i]);

End;

Можно сказать, что оператор with сделал запись student текущей, и в операции с полями можно указывать только собственно имена полей.

Формой оператора withимеет вид:

With<имя записи> do <оператор>;

<оператор> - произвольный оператор ТР, в том числе составной. Инициализация записи может производиться в разделе констант. Для каждого поля задаётся его имя, после которого через двоеточие указываются значения:

Const s1 : studrec = (name : ’Петров’ , group: ’2’ ,marks : (4,3,5,5));

Вложенные записи:

Определение: Если элементам записи является запись, то это называется вложенной записью.

Rec 1

Pole1 rec 2

Pole A pole B

Поля записи могут хранить информацию-pole 1,pole A, pole B.

И поле как элемент записи(rec 2).

3.Уникальность имён полей записи.Примеры.

1)В рамках одной записи имена записи должны быть различны

2)В различных записях, в том числе во вложенных имена полей могут совпадать.

3)Допускается, чтобы имя записи и имя поля совпадали.

Массивы в структуре записи:

1)массив может быть элементом записи

2)На промежуточном уровне записи может располагаться массив.

rec

S t[1..2]

U V

Type trec=record;

U:integer;

V:real;

T_array=array[1..2] of trec;

Trec=record

S:integer;

T:tarray;

End;

Var; rec:trec;

4.Запись как единый объект операций.

Если записи совпадают по типу, то допускается применение операции присваивания между такими записями.

5.Вариантные записи.

Одно из полей записи может быть вариантной записью.

Вариантная часть записи – изменяемая часть. Все варианты этой части располагаются в памяти на одном и том же месте в конце записи.

Var zap: record

P1,p2: integer;

P3:real;

Case k:integer of

1: (v1:string[20]);

2: (v2:real; v3:array[1..10] of integer);

3: (v4: string[10])

End;

Вариантная часть начинается словом case, но это не оператор варианта, так как такая часть стоит последней в записи, то закрывающий case end не нужен.

Константы – любые порядковые значения, выбор производится не по ним а по именам полей.

Компилятор под вариантную часть выделяет память, достаточную для самого протяженного из вариантов.

Контроля за размещением вариантов нет, одна вариантная часть может быть вложена в другую.

Допускается пустой вариант:

Type rec1=record

A:byte;

B:integer;

End;

Rec2=record

C:shortint;

Case x:byte of

1: (d:word);

2: (e:record

Case Boolean of

3: (f:rec1);

3: (g:real);

‘3’: (c:integer)

end)

end;

Указание имени селектора не является обязательным, обязателен лишь тип.

Константы выбора могут повторяться, их тип необязательно будет совпадать с типом селектора.

Обращение к полям вариантной части производится не через выбор а по полному имени поля.