Песни о Паскале | страница 144



Объявление множеств

Множества объявляются конструкцией вида

SET OF <диапазон или тип>

Вот примеры объявления переменных типа множество.


>      { объявление множества } { возможные элементы множества }

>var SN1 : set of 10..100;       { числа от 10 до 100 }

>      SN2 : set of byte;       { числа от 0 до 255 }

>      SC1 : set of ’a’..’z’;       { только малые латинские буквы }

>      SC2 : set of Char;       { все символы }


Поскольку мощность множеств в Паскале не превышает 256, множества SET OF BYTE и SET OF CHAR представляют множества предельной мощности.

Присвоение значений множествам

Переменным типа множество присваивают значения выражений того же типа, вот примеры таких операторов.


>      SN1:= [10, 20, 50];       { содержит три элемента }

>      SN2:= [11..20, 51..60];       { содержит 20 элементов }

>      SN2:= [0..255];       { содержит 256 элементов от 0 до 255 }

>      SN2:= SN1;       { копия другого множества }

>      SC1:= [’z’, ’y’, ’x’];       { содержит три элемента }

>      SC2:= [’0’..’9’];       { содержит 10 элементов }


Как видите, для записи множеств в Паскале используют квадратные скобки, а не фигурные. Что позволено в записи множеств, и что запрещено?

Подряд идущие элементы можно заменять диапазоном с указанием крайних значений. Допустимо перечислять элементы в произвольном порядке и даже вставлять дубликаты, – они все равно будут отброшены. Вот примеры трех совершенно одинаковых по результату операторов.


>SN1:= [5..8];       { множество задано диапазоном }

>SN1:= [8, 7, 6, 5]; { то же множество, но в другом порядке }

>SN1:= [5..8, 6, 6]; { трижды указано число 6, дубликаты будут отброшены }


Множеству любого типа можно присвоить пустое значение, например:


>SB1:= []; SN1:= [];       SC1:= [];


Пустое множество изображается парой квадратных скобок, между которыми ничего нет. Нельзя считать пустым множество [0], поскольку оно содержит один элемент – число ноль.

Элементами множеств могут быть только значения переменных и выражений соответствующего типа.


>var k, n : byte;       c: char;

>      ...

>      k:= 10; n:= 20;

>      SN1:= [1..k, n+5];       { 1..10, 25 }

>      c:= ’m’;

>      SC1:= [c, ’a’, ’b’];       { ’m’, ’a’, ’b’ }


Компилятор не позволит включать в множество элементы, не относящиеся к нему, а также смешивать элементы разных типов, вот примеры таких ошибок.


>SN1:= [5..200];       { в объявлении SN1 указан диапазон от 10 до 100 }

>SC1:= [’a’, ’b’, 5]; { вместо символа ’5’ указано число 5 }