
Pascal. Множества
Под множеством в Паскале понимается совокупность взаимосвязанных элементов одного типа. Его элементы должны быть порядкового типа данных и описываться перечислением и/или интервалом. Служебные слова Set Of говорят, что объявлен множественный тип:
Type <имя типа> = Set Of <базовый тип>;
Размер множества может меняться, но количество элементов в нем, как правило, не должно превышать 256. Поэтому если нужно определить множество, состоящее из чисел, то следует указывать значения входящие в тип byte (от 0 до 255).
В Паскале для обозначения элементов множества используют квадратные скобки, в которых последние, как уже было сказано ранее, записываются интервалом и/или перечислением, например:
['A', 'B', 'C'] [0, 1, 2, 5, 9] [1..9] [1, 2, 3, 10..20]
Элементы множества в отличие от массивов не имеют индексов (номеров), и поэтому порядок не важен. Возьмем, к примеру, два множества: [2, 3, 5] и [3, 5, 2], не смотря на расположение элементов, они тождественны.
С помощью конструктора множеств можно присвоить множественной переменной, какие-либо значения:
I:=[1, 2, 3, 5, 8]; C:=['b', 'd', 'f']; B: = [True, False];
В ЯП Pascal над множествами предусмотрены следующие операции.
Объединение (+)
Объединением множеств A и B является множество C, которое содержит общие или хотя бы одного из них элементы.
Пример:
[1, 2, 3, 4] + [3, 4, 5] = [1, 2, 3, 4, 5] ['A', 'B', 'C', 'D'] + ['B', 'E', 'G'] = ['A', 'B', 'C', 'D', 'E', 'G']
Пересечение (*)
Пересечением множеств A и B является множество C, которое содержит элементы обоих множеств.
Пример:
[1, 2, 3, 4] * [3, 4, 5] = [3, 4] ['A', 'B', 'C', 'D'] * ['B', 'E', 'G'] = ['B']
Разность (-)
Разностью множеств A и B является множество C, которое содержит элементы множества A, не вошедшие в множество B.
Пример:
[1, 2, 3, 4] — [3, 4, 5] = [1, 2] ['A', 'B', 'C', 'D'] — ['B', 'E', 'G'] = ['A', 'C', 'D']
Тождественность (=)
Два множества считаются равными, если они состоят из одних и тех же элементов.
Пример:[1, 2, 3, 4] = [2, 1, 4, 3] => True ['A', 'B', 'C', 'D'] = ['B', 'E', 'G'] => False
Нетождественность (<>)
Два множества считаются неравными, если они состоят из разных элементов.
Пример:
[1, 2, 3, 4] <> [2, 1, 4, 3] => False ['A', 'B', 'C', 'D'] <> ['B', 'E', 'G'] => True
Содержит (>=)
Выражение возвращает истину, если второе множество является подмножеством первого множества.
Пример:
[1, 2, 3, 4] >= [2, 1] => True ['A', 'B', 'C', 'D'] >= ['B', 'E', 'G'] => False
Содержится (<=)
Выражение возвращает истину, если первое множество является подмножеством второго множества.
Пример:
[1, 2, 3, 4] >= [2, 1] => False ['A', 'B'] >= ['B', 'A', 'G'] => True
Операция in
Проверяет наличие определенного элемента в заданном множестве:
Пример:
1 In [1, 2, 3, 4] => True B In ['A', 'G'] => False
Множества Pascal-Паскаль
Еще одним фундаментальным классом данных являются данные, структурированные в виде множеств.
О перечисляемых типах
Мы уже рассматривали три скалярных типа, которые, в принципе, являются перечисляемыми типами, – это boolean, char и integer. В самом деле, ведь каждый из этих типов можно задать следующим образом:
type
Boolean= (false, true);
char= #0..#255;
integer= -32768..32767;
(Представление #xxx означает, что должен быть взят символ, чей код в таблице ASCII равен xxx).
Это базовые типы, которые не требуется задавать каждый раз, уже определены в системе именно таким образом. Кроме них имеется еще несколько интервальных типов, с некоторыми из которых мы знакомы:
shortint>= -128..127;
longint= -2147483648..247483647;
byte= 0..255;
word= 0..65535;
Переменные, имеющие эти типы, могут принимать значения, лежащие в границах соответствующих интервалов.
Для работы с перечисляемыми типами существуют следующие функции, которые хранятся в библиотеке системных функций, и программист имеет к ним доступ:
ord(N) – возвращает номер элемента N в множестве;
succ(N) – возвращает следующее значение для N;
pred(N) – возвращает предыдущее значение для N.
Пользователь имеет возможность описать собственный перечисляемый тип данных. В общем виде это описание выглядит так:
type
<имя_типа>=(<идентификатор1>,<идентификатор2>, ..,<идентификаторN>);
В скобках перечисляются все возможные значения, которые может принимать переменная данного типа. Следует запомнить, что названия значений нельзя давать по-русски(это важно!).
Например, мы можем описать тип данных color и перечислить семь основных цветов:
type
color=(red, orange, yellow, green, blue, magenta);
При этом значения получают номера в порядке их перечисления, начиная с 0. Поэтому для данного типа справедливыми будут отношения элементов:
red< orange< yellow< green< blue< magenta;
ord(red)=0;
succ(blue)= magenta;
pred(green)=yellow;