Множество относится к структурным типам данных. Тип «множество» задаёт интервал значений, который является множеством всех подмножеств базового типа. Базовый тип – это перечислимый тип, кроме word, integer, longint. Синтаксис определения типа множества:
<имя типа> = set of <базовый тип>;
Примеры:
Type
Tdigit = set of 0 .. 9;
Tsimv = set of 'A' .. 'Z' ;
Var
digit : Tdigit ;
simv : Tsimv;
Если переменная типа «множество» описана как set of 1 .. 3, то она может принимать следующие значения: (1, 2, 3), (1, 2), (1, 3), (2, 3), (1), (2), (3), ().
Размер множества равен числу компонент базового типа и может меняться от 0 до 256. Множество может быть пустым. В отличие от массивов, множества содержат переменное количество элементов, для которых порядок следования не важен.
Константы множественного типа записываются с помощью квадратных скобок и списка элементов в них.
Примеры:
Const
alpha = ['A' .. 'Z' , 'a' .. 'z' ];
empty = [] ;
digits = [ 0 .. 9] ;
Зарезервированное слово in для определения принадлежности элемента множеству:
if ch in alpha then …
В этом операторе выполняется проверка принадлежности элемента ch множеству alpha. Часто это гораздо проще, чем многократно сравнивать ch с некоторыми элементами.
Множества языка Object Pascal обладают свойствами математических множеств. Над ними можно выполнять те же операции. Если S1 и S2 – константы или переменные множественного типа, то S1+ S2 будет их объединением, S1*S2 - пересечением, S1-S2 – разностью. Операции отношений = (равенство), <> (неравенство), <= (первое является подмножеством второго), >= (второе является подмножеством первого) к множествам применяются, а отношения строго включения типа «<» или «>» - не применяются.
Чтобы добавить в множество какой-либо элемент, можно добавить множество, состоящее из единственного элемента. Либо использовать процедуру include(S,a) , где S – множество, в которое добавляем, a – добавляемый элемент. Имеется и обратная процедура – exclude(S , a) - для исключения элемента из множества. Здесь параметры S и a имеют тот же смысл.
Пример:
program p10_2;
var
S: set of 'A' .. 'Z' ;
ch: char;
Begin
S := [ ];
ch := 'A';
repeat
S := S+[ch] ;
Inc(ch);
Until ch >= 'Z' ;
……………………..
В этом примере в цикле заполняется множество S (изначально пустое) символами английского алфавита.
11 Пользовательские процедуры и функции
В лекции 5 мы уже говорили об использовании стандартных процедур и функций. Но язык Object Pascal позволяет программисту создавать собственные подпрограммы (функции и процедуры). Их описание располагается в описательной части программы и начинается с заголовка.