|
Можно ли сдавать один и тот же тест несколько раз? |
Структурированные типы данных языка Object Pascal
Записи
Запись представляет собой структуру, состоящую из набора полей различных типов. Каждый элемент записи называется полем. Каждое поле имеет свой идентификатор и свой тип.
Запись может иметь поля двух видов:
- фиксированные поля, которые всегда присутствуют в создаваемом экземпляре записи;
- вариантные поля (располагаются только после фиксированных полей), для которых память при создании экземпляра записи выделяется только под одно самое наибольшее поле из варианта.
Объявление типа записи завершается ключевым словом end;.
Например:
type
MyDateRec = record
Year: Integer;
Month: 1..12;
Day: 1..31;
end;
var
{Объявление переменных}
Record1, Record2: MyDateRec;
begin
{Доступ к полям записи: }
Record1.Month := 11;
Record1.Day := 22;
{Доступ к полям записи:}
with Record1 do
begin
Year := 2004;
Month := 11;
Day := 22;
end;
{Копирование значений полей
записей одного типа }
Record2:= Record1;Переменная типа записи может быть объявлена одновременно с определением полей записи.
Например:
var S: record Name: string; Age: Integer; end;
Запись, состоящая из одних вариантных полей, реализует тип, в некотором роде аналогичный типу union для языка С++.
Вариантные поля позволяют на основе одного типа записи создавать экземпляры записей, содержащие поля разных типов. Это позволяет значительно экономить память.
Объявление записи имеет следующее формальное описание:
type имя_типа_записи = record
список_полей: тип; {фиксированные поля}
...
case тег: тип_варианта
of {вариантные поля}
константа_или_список: (вариант_1);
...
константа_или_список: (вариант_n);
end;Описание каждого фиксированного поля состоит из его идентификатора (или списка идентификаторов) и типа. Описания полей разделяются точкой с запятой. Вариантная часть объявления записи начинается с зарезервированного слова case.
При определении вариантной части тег и символ двоеточия могут быть опущены в том случае, если тип_варианта описывает существующий тип или каждая константа ( константа_или_список ) в вариантной части является значением типа тип_варианта.
Тип варианта не может быть длинной строкой, динамическим массивом, типом Variant или интерфейсом, но он может быть указателем на эти типы.
Например:
type
TPerson = record
FirstName, LastName: string[40];
case bl: Boolean
of {Вариантные поля}
True: (str1: string[40]);
False: (str2: string[20];
date1: TDate);
end;
TShapeList = (Rectangle, Circle,
Other, Ellipse);
TFigure = record
case TShapeList of
Rectangle: (Height, Width: Real);
Circle: (Radius: Real);
Ellipse, Other: ();
end;Применяя вариантные поля, можно одинаково трактовать данные различных типов, используя для доступа к ним вариантные поля соответствующих типов.
Файлы
Файл представляет собой упорядоченный набор элементов одного типа.
Стандартные процедуры ввода и вывода используют предопределенный тип TextFile, или Text, который реализует файл как упорядоченный набор строк символов.
Объявление типа файл и создание переменных файлового типа имеет следующее формальное описание:
type тип_файла = file of тип; var идентификатор: file of тип_файла;
Тип, указываемый после ключевых слов file of, может быть производным типом или базовым типом. Так, в качестве типа можно указать string[число_символов] или array[нач_инд..кон_инд] of Char.
Объявление нетипизированного файла имеет следующее формальное описание:
var идентификатор: file;
Для создания переменной файлового типа следует предварительно объявить файловый тип, а затем объявить переменную созданного типа, или сразу объявить переменную, указав используемый тип как файловый.
Например:
type
Phone = record Name: string[30];
PhoneNumber: string[20];
end;
{Объявление файлового типа }
PhoneList = file of Phone;
var
{Объявление переменной файлового типа}
book1: PhoneList;
{Объявление переменной с указанием типа
как файлового типа}
book2: file of Phone;