Как и массивы, записи не могут быть заданы неименованной или нетипизированной константой.
Для того чтобы задать запись типизированной константой, следует вначале описать соответствующий тип в разделе type, а затем воспользоваться им в разделе const:
type <имя_типа> = record <имя_поля1>: <тип_поля1>; [<имя_поля2>: <тип_поля2>;] [...] end;const <имя_константы>:<имя_типа>=<начальное_значение>; |
Начальное значение для переменной типа запись задается перечислением в круглых скобках начальных значений для всех полей (соответствующих типов!) с обязательным указанием имени задаваемого поля. Имя поля от его начального значения отделяется двоеточием, значения соседних полей разделяются точкой с запятой:
(<имя_поля1>:<значение_поля1>;_;<имя_поляN>:<значение_поляN>); |
Например:
type data = record day: 1..31; month: 1..12; year: 1900..2100; end;const my_birthday: data = (day:17; month:3; year:2004); |
Можно, конечно, не описывать тип константы отдельно, а объединить оба определения:
const my_birthday: record day: 1..31; month: 1..12; year: 1900..2100; end; = (day:17; month:3; year:2004); |
Если описана двумерная таблица, то ее начальные значения задаются как вектор, каждый компонент которого является записью. Таким образом, правила задания типизированной константы-таблицы сочетают в себе правила задания массива и записи:
type family = (mother, father, child);const birthdays: array[family] of data = ((day: 8; month: 3; year: 1975), (day: 23; month: 2; year: 1970), (day: 1; month: 9; year: 2000)); |
Доступ к полям
Обратиться к полю записи можно следующим способом:
<имя_записи>.<имя_поля> |
Например:
month:= my_birthday.month +1; |
Как уже было упомянуто, коллизий между переменной с именем month и полем записи my_birthday.month не возникает. Доступ к полю двумерной таблицы осуществляется аналогичным образом (жирные скобки являются обязательным элементом синтаксиса):
<имя_таблицы>[<индекс>].<имя_поля> |
Эту запись можно трактовать так:
(<имя_таблицы>[<индекс>]).<имя_поля> |
Например:
birthdays[mother].day:= 9; |