Program UsingEnumerateds; Type
TColor = (Black, White, Red);
{Описание перечислимого типа TColors. Диапазоном значений переменных этого типа являются три константы — Black, White, Red; значения этих констант не известны, но их можно использовать по именам}
Var
Color: TColor;{Описание перечислимого типа данных} Begin
Color := White;{Присвоение переменной Color значение White}
End.
Перечислимые типы данных используются, в основном, для повышения читабельности программы и привлечения внимания к возможным значениям какого-либо параметра программы. Обратим внимание на то, что в стандартных компонентах и подпрограммах Delphi крайне широко используются перечислимые типы.
2.3.3. Множества
Типы данных «множества» аналогичны перечислимым и интервальным типам данных, однако переменные множественных типов могут иметь несколько значений из описанного перечисления в каждый момент времени работы программы, причем каждое значение не может присутствовать в множестве дважды в одно и то же время. Описание переменной множественного типа выглядит следующим образом:
<Переменная>: SetOf <Перечислимый тип>;
Аналогично можно описать множество на основе интервального типа: <Переменная>: SetOf <Интервальный тип>;
Для присвоения значения переменной множественного типа используется специальный оператор — конструктор множества [ ]:
<Переменная> := [Оначение 1>, . . . , Оначение п>] ;
В качестве Значенийможет быть использовано любое значение из множества, на основе которого создан данный тип.
Рассмотрим пример описания и использования переменной-множества, основанной на перечислимом типе данных (см. листинг 2.4).
Листинг 2.4. Пример описания и использования переменной-множества
Program UsingSets; Type
TColors = Set Of (Black, White, Red);
{описание множественного типа данных TCoiors. В качестве значений переменных данного типа в любой момент времени выполнения программы может быть любое сочетание констант Black, White и Red}
Var
Colors: TColors;
{описание переменной множественного гиг.а данных TColors}
Begin
Colors:= [Black, Red]; {присвоение переменной Colors
множества, состоящего из двух
элементов — Black и Red}
Colors := []; {присвоение переменной Colors пустого
множества}
Colors:= [White];{присвоение переменной Colors
множества, состоящего из одного
элемент.а — White}
End.
При работе с множествами используются следующие понятия:
♦ Объединениемдвух множеств называется множество, содержащее элементы, как первого, так и второго множеств. Для объединения множеств используется оператор «+». Например, после выполнения команды Colors := [Black] + [Red], В переменной Colors будет содержаться множество [Black, Red].
♦ Пересечениемдвух множеств называется множество, содержащее элементы, включенные в оба множества. Для пересечения множеств используется оператор «*». Например, после выполнения команды Colors := [Black, Red] * [Black, White], В переменной Colors будет содержаться множество из одного элемента Black.
♦ Разностьюдвух множеств называется множество, содержащее элементы первого множества (уменьшаемого), не содержащиеся во втором множестве. Для определения разности множеств используется оператор «-». Например, после выполнения команды Colors : = [Black, Red] - [Black, White], в переменной Colors будет содержаться множество из одного элемента Red.
♦ Пустыммножеством называется множество, не содержащее элементов. Для присвоения переменной множественного типа пустого множества может использоваться обычный конструктор множества. Например, после выполнения команды Colors := [] в переменной Colors не будет содержаться ни одного элемента. Множество станет пустым, если вычесть из него множество, содержащее все возможные элементы. Например, после выполнения команды Colors := Colors - [Black, White, Red] множество Colors будет пустым вне зависимости от своего начального состояния. 2.3.4. Записи
Запись является типом данных5 и описывается в разделе описания типов данных Туре. После описания типа данных его можно использовать для создания переменных этого типа в обычном порядке. Описание записей как типов данных имеет следующий вид:
Туре{начало раздела описания типов данных} <Имя типа>=Record{заголовок описания записи} <Имя переменной 1>: <Тип>;
{описание "поля» записи}
<Имя переменной п>: <Тип>;
{описание "поля» записи} end;{окончание описания типа}
Таким образом, запись, как переменная, состоит из набора разнородных переменных, называемых полямизаписи, каждая из которых имеет свое уникальное имя в пределах записи. В качестве Типов переменных, описываемых внутри записи, могут использоваться любые типы данных, встроенные в Delphi или описанные в программе до описания данной записи, в том числе массивы и другие записи.
Описание переменных-записей, или, как их принято называть, экземпляров записей,осуществляется по обычным правилам в разделе описания переменных Var.
Обращаться к экземплярам записей в программе можно двумя способами — как к совокупностям полей, то есть к записям в целом, так и к отдельным полям конкретной записи. Для работы с записями в целом определена всего одна операция — присвоение. При этом поля одной записи присваиваются полям другой записи, то есть копируются в них.
Для обращения к какому-либо конкретному полю записи используется имя этой записи и имя поля в его составе, разделенные точкой:
<Имя переменной-экземпляра записи>.<Имя поля>
С полями экземпляров записей можно производить любые операции, допустимые для типа данных этого поля, то есть указывать в качестве параметров процедур и функций, использовать как операнды для арифметических и логических операторов, и так далее. Приведем небольшой пример (листинг 2.5).
Листинг 2.5. Работа с записями
Program UsingRecords;
Type {начало раздела описания типов данных}
Thuman= Record {заголовок описания записи)
FirstName: String;{описание поля записи
с именем FirstName} {описание поля записи с именем LastName} {описание поля записи с именем Age} {окончание описания типа}
Lastame: String; Age: Integer; end;
Var Human1:Thuman; Human2: Thuman;
{Описание переменной — записи типа THuman с именем Human1} {Описание переменной — записи типа THuman с именем Human2}
Begin
Humanl.FirstName
= 'Michael';{Изменение поля FirstName
переменной Humanl}
Human2 := Humanl;{Копирование значений всех полей записи Humanl в поля записи Human2. Таким образом поле FirstName записи Human2 станет иметь значение 'Michael'}
End.
2.3.5. Массивы
Массив— это поименованная область памяти, доступ к отдельным частям которой осуществляется по общему имени и индексу соответствующей части. Все части (элементы) массива имеют один и тот же тип, в качестве которого может выступать любой из стандартных или нестандартных типов, описанных к моменту объявления массива. В частности, элементы массива также могут являться массивами. Такие структуры называются многомерными.
Описание массива производится в разделе описания типов данных (после ключевого слова Туре) и выглядит следующим образом:
<Наззание массива> = Array [<Нижнийиндекс>..<Верхний индекс>]
Of <Тип элементов>;
Program DeclareArrayTypesl;
Type
MyArray
Begin End.
{Начало раздела описания типов данных) Array [5..150] Of Integer;
{Описание типа данных — массива с именем MуАrrау, состоящего из 14 6-ти элементов, пронумерованных от 5-ти до 150-ти, каждый из которых имеет тип Integer}
С момента такого описания тип MyArray может использоваться наравне с остальными типами данных, известными компилятору, например, для описания двухмерного массива:
Program DeclareArrayTypes2;
Туре{Начало раздела описания типов данных) MyArray = Array [5..150] Of Integer;
{Описание типа данных — массива с именем MyArray, состоящего из 146-ти элементов, пронумерованных от 5-ти до 150-ти, каждый из которых имеет тип Integer) MyArray2D = Array [1..10] Of MyArray;
{Описание типа данных — массива с именем MyArray2D, состоящего из 10-ти элементов, пронумерованных от 1 до 10-ти, каждый из которых представляет собой массив типа MyArray}
Begin
End.
Многомерный массив можно также описать без использования вспомогательных типов, просто указав в квадратных скобках через запятую пределы изменения индексов для каждого измерения массива:
Туре
MyArray2D = Array [1..10, 5..150] Of Integer;
{Описание двухмерного массива)
Описание переменной, представляющей собой массив, происходит по обычным правилам описания переменных:
Туре
MyArray2D = Array [1..10, 5..150] Of Integer;
{Описание двухмерного массива) Var
Array2D: MyArray2D; {Описание переменной-массива}
Для обращения к элементу массива-переменной, ее индекс (индексы в случае многомерных массивов) указываются в квадратных скобках после имени переменной: