Присваивание значений множествам. Конструктор множества

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

Конструктор множества
Begin

s := [1,3] ;

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

ПРИМЕР.

Одно и то же
S := [1, 2, 3, 4, 5];

Это сокращенная запись следующего списка букв латинского алфавита: 'a', 'b', 'c', 'd', 'e',…..'z', 'A' ,'B', 'C', 'D', 'E',……..,'Z'   s := ['a'.. 'Z'] ; - неправильная запись
s := [1..5];

var

s: set of char;

begin

s := ['a'..'z', 'A'..'Z'] ; S := ‘a’..’z’; -- неправильно (нет квадратных скобок)

Операции над множествами.

Над множествами возможны три операции. Все операции двухместные.

Операндами в этих операциях могут быть как переменные типа множеств, так и конструкторы множеств. Операнды должны принадлежать к одному и тому же множественному типу.

Var

a, b: set of char;

c: set of char;

a, b, c - множественные переменные. Set of char - множественный тип.

А В
В данном случае a и b принадлежат к одному и тому же множественному типу, а с - к другому, хотя переменные имеют формально один и тот же тип.

Таблица операций над множествами.

А В
Операция

Математика Паскаль
Пересечение a Ç b a * b
А В
Объединение

A È b a + b
Разность a \ b a - b

Определение 1. Пересечение множеств - новое множество, состоящее из элементов, принадлежащих одновременно множествам A и B.

Определение 2.Объединение множеств - новое множество, в которое входят элементы или из элементов множества А или из элементов множества В или из элементов, принадлежащих тому и другому одновременно.

Определение 3. Разность множеств - новое множество, в которое входят элементы уменьшаемого множества (A), не входящие в число элементов вычитаемого множества (B).

Примечание. Если при выполнении операции объединения (А + В) включаемые в А из В элементы уже присутствуют в множестве А и, если при выполнении операции разности (А - В) вычитаемые из А элементы отсутствуют в множестве А, то сообщения об ошибке не будет. Операции просто не будут выполняться.

Последние две операции используются для выполнения следующих действий:

1). (А+В) используются для включения в множество отдельных элементов.

2). (А-В) используется для исключения отдельных элементов из множества.

Var

s :set of [‘a’..’z’];

begin Пустое множество

s := [];

Ошибка: а не является ни конструктором, ни переменной множественного типа.
s := s+'a';

s := s+['a']; //- верно, включает элемент 'a' в множество s ≡ include(s, ‘a’).

s := s-['a']; //- верно, исключает элемент 'a' из множества s ≡ exclude(s, ‘a’).

Для ввода значения множества и вывода содержимого множества нельзя использовать операторы read и write.

ПРИМЕР. Рассмотрим программу, которая заполняет множество поэлементно.

Примечание. Пусть признаком завершения ввода является '.' (точка) во входном потоке:

1) Цикл с постусловием

var

s : set of char; {множество}

c : char; {символ , вводимый с клавиатуры}

Подготовка цикла
begin

s := [];

c := #0;

repeat

read (c);

if (c <> ’.’) then s := s+[c];

until (c=’.’);

end.

2) Цикл с предусловием

var

s : set of char; {множество}

Правильный вариант: ....... read(c); while c<> ‘.’ do begin s := s + [c]; read(c); end; .......
c : char; {символ , вводимый с клавиатуры}

Подготовка цикла
begin

s := [];

c := #0;

Здесь проверяется предыдущее,

а не текущее значение с

while c <> '.' do

begin

Вставка
read (c);

s := s+[c]; надо вставить

end;

s := s - ['.'];

end.

В данной программе не хватает одной строчки. Последним действием в цикле будет включение в число символов множества разделителя ('.'). Эту точку'.' из множества надо исключить (смотри вставку).

ПРИМЕР. Сформировать множество четных чисел в диапазоне от 1 до 100.

Схема решения:

1. Сначала надо сформировать множество чисел от 1 до 100, которое включает все четные и нечетные числа.

2. Исключить все нечетные числа.

Const

n = 100;

var

s : set of 1 .. n;

k : 1 .. n;

begin

В множество s включается совокупность чисел от 1 до 100
{начальное заполнение}

s := [1 .. n];

{исключение нечетных чисел}

for k := 1 to n do {odd - возвращает "истина", если число - нечетное}

if odd(k) then

s := s - [k];

end.