Записи
Например, этой записи можно сначала присвоить значение как длинному целому, а затем проанализировать результат по байтам или словам:
var х: Word; xb: Byte; x1: Longint; begin ….. with m do begin lo: = trunc(2*pi*x); if wo[1] = 0 then if by[l] = 0 then xb: = x[0] else x: = wo[0] else x1: = lo end; ….. end.
Предложение CASE… OF, открывающее вариантную часть, внешне похоже на соответствующий оператор выбора, но на самом деле лишь играет роль своеобразного служебного слова, обозначающего начало вариантной части. Именно поэтому в конце вариантной части не следует ставить END как пару к CASE… OF. (Поскольку вариантная часть – всегда последняя в записи, за ней все же стоит END, но лишь как пара к RECORD). Ключ выбора в предложении CASE… OF фактически игнорируется компилятором: единственное требование, предъявляемое к нему Турбо Паскалем, состоит в том, чтобы ключ определял некоторый стандартный или предварительно объявленный порядковый тип. Причем сам этот тип никак не влияет ни на количество следующих ниже вариантных полей, ни даже на характер констант выбора.
В стандартном Паскале в качестве ключа выбора необходимо указывать некоторую переменную порядкового типа, причем в исполняемой части программы можно присваивать значение этой переменной и таким образом влиять на выбор полей. В Турбо Паскале также можно в поле ключа выбора указывать переменную порядкового типа и даже присваивать ей в программе значение, что однако не влияет на выбор поля: значения констант выбора в Турбо Паскале могут быть произвольными, в том числе повторяющимися, например:
type reel = record a: Byte; b: Word; end; rec2 = record с: longint; case x: Byte of 1: (d: Word); 2: (e: record case Boolean of 3:(freel); 3:(g Single); '3':(с Word); end) end; var r: rec2; begin r.x: = 255; if r.e.g = 0 then WriteLn('O.K. ') else WriteLn(r.e.g) end.
В этом примере предложение:
case Boolean of
В записи, определяемой в поле Е, объявляет ключом выбора логический тип, который, как известно, имеет лишь два значения – TRUE и FALSE. Константы же выбора следующих далее вариантов не только содержат совершенно не свойственные этому типу значения, но и две из них повторяются, а общее количество вариантов – три, а не два, как следовало бы ожидать.
Имена полей должны быть уникальными в пределах той записи, где они объявлены, однако, если записи содержат поля-записи, т.е. вложены одна в другую, имена могут повторяться на разных уровнях вложенности (см. поле С в последнем примере).