Структурированные типы
Это типы:
- Массив.
- Запись
- Множество.
- Файл.
Массивы
Как и Turbo Pascal, FPC поддерживает массивы. Поддерживаются и многомерные, упакованные и динамические массивы в стиле Delphi.
Массив – упорядоченная индексированная совокупность однотипных компонент, имеющих общее имя. Массив определяется:
- именем,
- индексами (номерами компонент). Индексы должны иметь порядковые типы.
Размерность массива определяет числом индексов. Размерность массива ограничена только доступной памятью. Возможны массивы:
- одномерный (или вектор),
- двумерный (или матрица),
- многомерный.
Различают массивы:
- Статический. Память для него выделяется компилятором при объявлении переменной (в статической памяти).
- Динамический. Память для него выделяется при исполнении программы (в динамической памяти). Перед обращением к элементам такого массива необходимо задать его фактическую размерность с помощью функции SetLength, чтобы в динамической памяти под массив была выделена область нужного размера.
Любой тип массива перед употреблением должен быть объявлен. Имя типа любое уникальное.
Статические массивы
Массив называется статическим, когда в определение массива включена размерность массива. Попытка доступа к элементу массива с индексом, лежащим вне объявленного диапазона, приведет к ошибке времени выполнения при условии, что включён контроль границ.
Объявление | Значения |
type
<Имя>=array[<Индексы>] of <Тип компонент>; |
Набор из заданного количества компонент указанного типа. Каждый индекс задается диапазоном через горизонтальное двоеточие. |
type
MyArray=array[1..7,1..10] of real; // Объявление типа массива
var
Ar1:MyArray; // Явное объявление массива
Ar2:array[1..20,1..15] of real; // Неявное объявление массива
Доступ к элементу массива: Ar1 [2, 2]
Динамические массивы
Объявление | Значения |
type <Имя > = array of <Тип компонент>; var <Имя переменной> = array of <Имя типа>; Фактическая размерность массива задается с помощью функции SetLength(<Имя переменной>, <Размер индекса>); Для многомерного массива структура array of повторяется столько раз, сколько индексов имеет массив. |
Набор из заданного базовым типом количества компонент. Индекс нумеруется от 0. |
Пример
type
MyArray=array of byte; // Объявление типа массива. Размера нет
var
Ar1:MyArray; // Явное объявление массива
begin
SetLength(Ar1,10); // Фактическая размерность массива 10
end.
Записи (комбинированные типы)
Запись – это набор компонент разного типа, размещаемых в полях записи. Имена полей локальны в записи. Различают записи:
- Фиксированные.
- Вариантные. Никак не связаны с типом Variant – вариант.
Любой тип записи перед употреблением должен быть объявлен. Имя типа любое уникальное
Объявление | Значения |
type
<Имя типа>=record <Имя поля 1>:<Тип 1>; {…….} <Имя поля N>:<Тип N>; [вариантная часть] end; |
Точки с запятой в конце строки нет.
Вариантная часть содержит список вариантов. Для каждого варианта указывается ключ выбора и список его полей. |
Записи без вариантной части
Пример:
type
MyData=record // Мои данные
FirstName:string[15]; // Имя
LastName:string[20]; // Фамилия
BirthDay:byte; // День рождения
BirthMonth:byte; // Месяц рождения
BirthYear:word; // Год рождения
Phone:string[15]; // Телефон
Address:string[30]; // Адрес
end;
Записи с вариантной частью
Пример:
type
MyData=record // Персона
FirstName:string[15]; // Имя
LastName:string[20]; // Фамилия
BirthData:date; // Дата рождения
case Citezen:Boolean of // Гражданство (да или нет)
True:BirthPlace:String[40]; // Если да – место рождения,
False:(Country:String[20], // Если нет – страна гражданства,
EntryDate:Date, // Дата вьезда,
ExitDate:Date); // Дата выезда
end; // Конец вариантной части
end; // Конец записи
Множества
Множество – это набор компонент из заданного набора. В множестве компонент присутствует в единственном экземпляре. Например, множества [1, 2, 3] и [1, 2, 2, 3] эквивалентны. Любой тип множества перед употреблением должен быть объявлен. Имя типа любое уникальное.
Объявление | Значения |
type <Имя>=set of <Имя целевого типа>; var <Имя переменной>:<Имя типа>; |
Набор компонент из заданного перечня |
Целевой тип – порядковый тип с числом компонент не более 256. Возможны Byte, Char, интервальные и перечислимые типы. Значения множественного типа заключают в квадратные скобки.
Пример:
type
Set1=set of byte; // Целые числа 0..255
Set2=set of char; // Символы с № 0..255
Set3=set of 1..12; // Тип-поддиапазон
Svetofor=set of (‘Red’,’Green’,’Yellow’,’Dead’); // Перечисляемый тип
Файлы
Файл – это последовательность однотипных компонент на внешнем устройстве. В FPC определены файлы:
- типизированный, это последовательность однотипных компонент,
- текстовый, это последовательность строк символов,
- нетипизированный, это последовательность байтов.
Любой файловый тип перед употреблением должен быть объявлен. Имя типа любое уникальное.
type
<Имя типа>=file of <Имя типа компонент>;
Компоненты файла любые, кроме:
- файлов,
- структурированных с файлами.
Пример
type
MyFile1=file of real; // Типизированный файл
MyFile2=file of text; // Текстовый файл
MyFile3=file; // Нетипизированный файл