|
Записи с фиксированными частями
Формат описания:
1-ый способ:
Type
имя _ типа_записи = Record
список_имен _ полей_1: тип_1;
список_имен _ полей_2: тип_2;
...
список_имен _ полей_N: тип_N
end;
Var
имя_перем_записи: имя _ типа_записи;
2-ой способ:
Var
имя_перем_записи: Record
список_имен _ полей_1: тип_1;
список_имен _ полей_2: тип_2;
...
список_имен _ полей_N: тип_N
end;
Пример 8.1 (описания записей):
1) определение комплексных чисел:
Type
Complex = Record
Re, Im: Real
end;
Var
X, Y: Complex;
2) определение даты:
Type
Date = Record
Day: 1 .. 31;
Month: (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sept, Oct, Nov, Dec);
Year: Integer
end;
Var
D1, D2: Date;
Доступ к полям записи осуществляется путем указания идентификатора переменной-записи и идентификатора поля, разделенныхточкой (такая комбинация называется составным именем), например:
X. Re: = 10. 5;
X. Im: = 5. 3;
D1. Day: = 2 8;
D1. Mont: = Oct;
D1. Year: = 2009;
Read (X. Re);
Write (‘ a + i*b = ’, X. Re, ‘ + i * ’, X. Im);
Все действия производятся над полями записи, только операцию присваивания можно выполнить над всей записью:
D1: = D2;
Разрешается использовать тип запись при описании других типов данных: массив записей, запись записей и т.д.
Type
Family = (Father, Mother, Son, Daudhter);
Day = 1 .. 31;
Month = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sept, Oct, Nov, Dec);
Year = 1900 .. 2010;
Date = Record
D: Day;
M: Month;
Y: Year
end;
T_Fio = Record
Fam: String [ 20 ];
Name: String [ 15 ];
Otch: String [ 15 ]
end;
T_Ank = Record
Fio: T_Fio;
Dat: Date;
Adr: String
end;
List = Array [ Family ] of T_Ank;
Var
Ank_Fam: List;
...
WriteLn (‘ Введи FIO отца ’);
Write (‘ Фамилия: ’);
ReadLn (Ank_Fam [ Father ]. Fio. Fam);
Write (‘ Имя: ’);
ReadLn (Ank_Fam [ Father ]. Fio. Name);
Write (‘ Отчество: ’);
ReadLn (Ank_Fam [ Father ]. Fio. Otch);
...
Оператор With
Для более простого обращения к отдельным полям записей (как если бы это были простые переменные) используется оператор присоединения With:
Формат оператора:
With список_переменных_типа_запись do оператор;
Внутри оператор’а поле записи опознается только по имени поля без указания имени записи:
With X, D1 do
Begin
Re: = 10.5;
Im: = 5.3;
Day: = 2 8;
Mont: = Oct;
Year: = 2009
End;
Сравните с примером в начале пункта (без использования оператора With). Понятно, что в операторе With нельзя указывать имена нескольких записей одного и того же типа.
Поскольку Паскаль допускает вложение записей друг в друга (см., пример выше), то оператор With тоже может быть вложенным (уровень вложения не должен превышать 9):
Withсписок_переменных_1 do
With список_переменных_2 do
...
With список_переменных_N do оператор;
Последнее можно записать более коротко:
Withсписок_переменных_1, список_переменных_2,..., список_переменных_N do
оператор;
Записи с фиксированными частями можно описывать с помощью типизованных констант:
Const
имя_типиз_конст: тип = (список_значений_полей);
Список значений полей представляет собой список отделяемых друг от друга точкой с запятой элементов вида:
имя_поля: константа
Пример:
Type
Point = Record
x, y: Real
end;
Vector = Array [ 0 .. 1 ] of Point;
Date = Record
Day: 1 .. 31;
Month: (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sept, Oct, Nov, Dec);
Year: 1900 .. 2010
end;
Const
Origon: Point = (x: 1.1; y: -1.2);
Line: Vector = ((x: -4.1; y: 6.5),
(x: 5.3; y: 3.6));
SomeDay: Date = (Day: 2 8; Month: Oct; Year: 2009);
Записи с вариантами
Записи, кроме фиксированных полей, могут иметь вариантную часть, т.е. в зависимости от значения поля признака (когда его значение совпадает с соответствующей меткой) может добавляться соответствующий вариант дополнительных полей. Такие записи называются записями с вариантами.
Записи с вариантами состоят из необязательной фиксированной и вариантной части. Использование фиксированной части не отличается от использования, описанного выше.
Вариантная часть формируется с помощью конструкции, аналогичной оператору case. Она задает особое поле записи — поле признака, которое определяет, какой из вариантов в данный момент будет активизирован. Значением признака в каждый текущий момент выполнения программы должна быть одна из расположенных далее констант. Константа, служащая признаком, задает вариант записи и называется константой выбора.
Формат описания:
Type
имя _ типа = Record
{ фиксированная часть (может отсутствовать): }
список_имен _ полей_1: тип_1;
...
список_имен _ полей_N: тип_N
{ вариантная часть: }
Case поле_признака: имя_типа of
константа_выбора_1: (вариант_списка_имен _ полей_и_типов_1);
...
константа_выбора_M: (вариант_списка_имен _ полей_и_типов_M)
end;
Пример:
Type
Tovar = Record
{ фиксированная часть: }
Nomer: Byte;
A rticle: String
{ вариантная часть: }
Дата добавления: 2015-02-16; просмотров: 171 | Поможем написать вашу работу | Нарушение авторских прав |
<== предыдущая лекция | | | следующая лекция ==> |
Выражения с множествами | | | Стандартные модули |