Лекция №7.1: Записи. Бинарные файлы

страницы: 1 2 3 4 5

Использование таблиц с разнотипными полями. Работа с бинарными файлами. 

Содержание

Записи

Продолжая изучение структурированных типов данных, переходим к записям.

Как и массивы, записи являются структурами прямого доступа, однако, в отличие от массивов, могут хранить элементы, относящиеся к разным типам данных.

Таким образом, запись — это вектор, компоненты которого (поля) могут относиться к разным типам данных.

Описание записей

В разделе var переменную типа запись описывают так:

var <имя_записи>: record <имя_поля1>: <тип_поля1>;
                                     [<имя_поля2>: <тип_поля2>;]
                                     [...]
                          end;

Имена полей должны подчиняться общим правилам построения идентификаторов. Повторение имён полей внутри одной записи не допускается.

Замечание: Имена полей могут совпадать с именами других переменных, поскольку на самом деле являются составными:

<имя_записи>.<имя_поля>. 

Поэтому можно записать:

var x : Real;
    r : record
      x : Real;
      y : Real
   end;

Поля могут относиться к любым стандартным (базовым или сконструированным) или определённым ранее типам, даже к файловому или процедурному (см. лекцию 8).

Если несколько подряд идущих полей принадлежат к одному типу данных, их описания можно объединить:

var <имя_записи>: record <имя_поля1>,_,<имя_поляN>: <тип_полей>;
                                <имя_поляS>: <тип_поляS>;
                                 ...
                        end;

Например:

var zap1 : record
             x, y : Real;
             i, j, k : Integer;
             flag : Boolean;
             s : set of 'a' .. 'z';
             a : array[1 .. 100] of Byte;
            date : record
               day : 1 .. 31;
               month : 1 .. 12;
               year : 1900 .. 2100;
            end;
          end;

Эта запись содержит 9 полей, три из которых сами являются составными.

Наиболее распространённый способ использования записей — двумерная таблица, каждый столбец которой имеет свой тип. Такую структуру описывают, например, следующим образом:

var tabl : array[1 .. 100] of zap1;

Задание записей константой

Как и массивы, записи не могут быть заданы неименованной или нетипизированной константой.

Для того, чтобы задать запись типизированной константой, следует вначале описать соответствующий тип в разделе 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));

страницы: 1 2 3 4 5

Примечания

| G+
Код для вставки: :: :: :: ::
Поделиться: // //