В случае, если одно из полей записи само является записью (и снова содержит поля-записи), можно распространить оператор присоединения на несколько полей вглубь, перечислив их через запятую. Но в этом случае внутри тела оператора можно обращаться только к последним полям:

WITH ИмяЗаписи, Поле_3апись Do

BEGIN

Обращения к именам полей Поля_3аписи,

т.е. к тем, которым предшествовала конструкция

ИмяЗаписи.Поле_3апись.

END; {with}

- 142 -

Так как записи естественным образом отражают табличную форму хранения данных, они очень удобны для различных приложений — от бухгалтерских задач до системного программирования.

<p>7.3. Тип «множество» (Set). Операции с множествами</p>

Турбо Паскаль поддерживает все основные операции с множествами. Множество, если оно не является пустым, всегда содержит что-то, и говоря «множество», необходимо указывать — «чего?». В Паскале множества определяются как наборы значений из некоего скалярного (перечислимого) типа. Скалярные типы — Byte и Char вводятся языком, они — перечислимые (их элементы можно поштучно назвать) и могут служить основой для построения множеств. Если же их станет мало, то всегда можно ввести свой скалярный тип, например:

TYPE

VideoAdapterType = (MDA, Hercules, AGA, CGA, MCGA, EGA, VGA, Other, NotDetected);

и использовать переменную

VAR

VideoAdapter : VideoAdapterType;

которая может иметь только перечисленные в задании типа значения. А далее можно ввести переменную — множество из тех же значений.

В описании множества как типа используется конструкция Set of и следующее за ней указание базового типа, т.е. того скалярного типа, из элементов которого составлено множество. Способов задания множеств несколько:

TYPE

SetOfChar = Set of Char; { множество из символов }

SetOfByte = Set of Byte; { множество из чисел }

SetOfVideo = Set of VideoAdapterType;

{ множество из названий видеоадаптеров }

SetOfDigit = Set of 0..9;

{ множество из чисел от 0 до 9 }

SetOfDChar = Set of '0'..'9';

{ множество из символов '0','1',...,'9'}

SetOfVA = Set of CGA..VGA;

{ подмножество названий видеоадаптеров }

- 143 -

Как видно из примеров, можно в задании типа множества «урезать» базовый тип, задавая поддиапазон его значений. В итоге множество сможет состоять только из элементов, вошедших в диапазон.

Если перечислимый тип вводится только для подстановки его имени в Set of, то можно на нем сэкономить и перечислить значения сразу в конструкции Set of. Не забудьте круглые скобки!

TYPE

SetOfVideo = Set of (MDA, Hercules, AGA, CGA, MCGA,

EGA, VGA, Other, NоtDetected);

SetOfGlasn = Set of ('А', 'И', 'О', 'У', 'Э');

Можно опустить фазу описания типа в разделе TYPE и сразу задавать его в разделе описания переменных:

VAR

V1 : Set of ...

В Турбо Паскале разрешено определять множества, состоящие не более чем из 256 элементов. Столько же элементов содержат типы Byte и Char, и это же число является ограничением количества элементов в любом другом перечислимом базовом типе множества, задаваемом программистом. Каждый элемент множества имеет сопоставимый номер. Для типа Byte номер равен значению числа, в типе Char номером символа является его ASCII-код. Всегда нумерация идет от 0 до 255. По этой причине не являются базовыми для множеств типы ShortInt, Word, Integer, LongInt.

Множества имеют весьма компактное машинное представление: 1 — элемент расходует 1 бит. Поэтому для хранения 256 элементов достаточно 32 байт (для меньшего диапазона значений множеств цифра будет еще меньше).

Переменная, описанная как множество, подчиняется специальному синтаксису. Элементы множества должны заключаться в квадратные скобки:

SByte := [1, 2, 3, 4, 10, 20, 30, 40];

SChar := ['а', 'б','в'];

SChar := ['г'];

SVideo = [ CGA, AGA, MCGA];

SDiap := [1..4]; {то же, что [1, 2, 3, 4]}

SComp := [1..4, 5, 7, 10..20];

SCharS := ['а..п', 'р..я']; Empty := [];

Пустое множество записывается как [].

- 144 -

Порядок следования элементов внутри скобок не имеет значения так же, как не имеет значения число повторений. Например, многократное включение элемента в множество

SetVar := ['а', 'б', 'а', 'а'];

эквивалентно однократному его упоминанию.

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

VAR

X : Byte; S : Set of Byte;

...

X := 3;

S := [ 1, 2, X ];

S := S + [ X+1 ]; {и т.п. }

Операции, применимые к множествам, сведены в табл. 7.2.

Таблица 7.2

Перейти на страницу:

Поиск

Похожие книги