Иллюстрированный самоучитель по Tirbo Pascal




Записи - часть 2


with с do with bd do month := 9;

или

with c,bd do month := 9;

или

c.bd.month := 9;

Турбо Паскаль разрешает использовать записи с так называемыми вариантными полями, например:

type

Forma = record 

Name: String; 

case Byte of

0: (Birthplace: String [40]); 

1: (Country : String [20]; 

EntryPort : String [20]; 

EntryDate : 1. . 31; 

ExitDate : 1..31) 

end;

В этом примере тип FORMA определяет запись с одним фиксированным полем NAME и вариантной частью, которая задается предложением CASE... OF. Вариантная часть состоит из нескольких вариантов (в примере - из двух вариантов: 0 и 1). Каждый вариант определяется константой выбора, за которой следует двоеточие и список полей, заключенный в круглые скобки. В любой записи может быть только одна вариантная часть, и, если она есть, она должна располагаться за всеми фиксированными полями.

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

var

mem4 : record case Byte of

0 : (by : array'[0..3] of Byte);

1 : (wo : array [0..1] of Word);

2 : (lo : longint); 

end;

В этом примере запись МЕМ4 имеет три варианта, каждый из которых занимает в памяти один и тот же участок из 4 байт. В зависимости от того, к какому полю записи мы обращаемся в программе, этот участок может рассматриваться как массив из 4 байт (поле ВТ), массив из двух целых типа WORD (поле WO) или, наконец, как одно целое число типа LONGINT (поле LO). Например, этой записи можно сначала присвоить значение как длинному целому, а затем проанализировать результат по байтам или словам:

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 




Содержание  Назад  Вперед