Этот оператор используется для удобства работы с переменными типа RECORD (запись).
Общий вид:
WITH A DO ST; Здесь А - имя переменной типа RECORD,ST - оператор.В операторе ST при ссылках на компоненты записи имя А можно опускать.
Пример. Для занесения даты рождения в предыдущем примере достаточно
выполнить операторы:
WITH BIRTHDAY[MOTHER] DOBEGIN MONTH:=5; DAY:=1; YEAR:=1950;END.;
Общий вид:
TYPE V=RECORD A:TYPE1; B:TYPE2; ................. CASE N:TYPEN OF C1: (T11:TYPE11; T12:TYPE12; ,,,); C2: (T21:TYPE21; T22:TYPE22; ,,,); ............................... CK: (T1K:TYPE1K; T2K:TYPE2K; ,,,);END;VAR Z:V; Здесь Z - переменная типа V; N - переменная, называемая переключателем; TYPEN - тип переменной N.Этому же типу должны принадлежать метки С1, С2,...,СК.Каждой метке соответствует набор полей Т11,Т12,.... Эти поля являются компонентами варианта.Переменную N называют также тэгом (тагом), ярлыком, признаком, дискриминантом.Если какой-либо метке CL вообще не соответствует поля, то пишут CL: ();
I. Любая запись (record) может иметь только одну вариантную часть II. (CASE).III. IV. Вариантная часть должна помещаться после постоянной части. V. VI. Среди идентификаторов полей не должно быть одинаковых. Обращение к VII. компоненте Z.Tij записи Z происходит так: 1. Присваивается соответствующее значение (Ci) переключателю N. В 2. зависимости от значения N переменная Z, помимо полей А,В,..., содержит 3. те поля, которые соответствуют той метке Ci, с какой совпадает значение N.4. 5. Выполняется операция с компонентой Z.Tij.
Пример записи с вариантами. Пусть необходимо собрать следующие
сведения о сотрудниках института: фамилию, дату рождения и, если есть
семья, то фамилию и дату рождения супруги или супруга.
Эта информация моет быть описана, например, записью PERSON.
Пусть переменная KIND может иметь одно из значений (<женат>, <холост>).
KIND=(MARRIED, SINGLE); PERSON=RECORD NAME:STRING; DATEBIRTH:DATE; CASE YESNO:KIND OF MARRIED: (NAME1:STRING; DATE1:DATE); SINGLE: (); END; Здесь NAME - строка символов (например, 'ROGOV '); DATEBIRTH - запись, описанная выше, содержит дату рождения (например, 15.02.62); YESNO -переключатель типа KIND, который может принимать одно из двух значений: MARRIER либо SINGLE; NAME1 - строка символов, содержащая фамилию супруги (супруга) (например 'ROGOVA'); DATE1 - запись, содержащая дату рождения супруги (супруга). SINGLE - пустое поле.
Если ROGOV женат, то присутствует поле MARRIED, если холост - поле
SINGLE, а поле MARRIED отсутствует. Паскаль допускает вложение
вариантов в типе RECORD.
Пример. Пусть необходимо, помимо информации предыдущего примера, иметь
о сотрудниках следующие сведения: если сотрудник холост, но состоял в браке
раньше, то указать, когда разведен.
Опишем тип KIND как (женат, холост, разведен, нет);
KIND=(MARRIED, SINGLE, DEVORCED, NO); ТогдаPERSON=RECORD NAME:STRING; DATEBIRTH:DATE; CASE YESNO:KIND OF MARRIED: (NAME1:STRING; DATE1:DATE); SINGLE: (CASE YN:KIND OF DEVORCED: (DATEDV:DATE)); NO: (); END; Здесь для варианта SINGLE имеется вложенная запись с вариантами DEVORCED (разведен) и NO.
Если сотрудник состоит в браке, то в записях информации отсутствует
поле SINGLE; если разведен, то отсутствует MARRIED; если в браке не
состоял, то запись содержит лишь поле NAME, DATEBIRTH и пустое поле