Case поле_признака : имя_типа of
(заочная форма обучения) Приложение 2
Записи с фиксированными частями Формат описания: 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
{ вариантная часть: }
|