Присваивание значений множествам. Конструктор множества
Присваивание значений множественной переменной производится с помощью т.н. конструктора множеств и происходит в исполняемой части программы.
Конструктор множества |
s := [1,3] ;
В общем случае конструктор множества представляет из себя заключенный в квадратные скобки список констант, переменных или выражений определенного типа - базового типа множества. Вместо отдельных констант в этом списке могут использоваться диапазоны.
ПРИМЕР.
Одно и то же |
Это сокращенная запись следующего списка букв латинского алфавита: 'a', 'b', 'c', 'd', 'e',…..'z', 'A' ,'B', 'C', 'D', 'E',……..,'Z' s := ['a'.. 'Z'] ; - неправильная запись |
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 |
Определение 1. Пересечение множеств - новое множество, состоящее из элементов, принадлежащих одновременно множествам A и B.
Определение 2.Объединение множеств - новое множество, в которое входят элементы или из элементов множества А или из элементов множества В или из элементов, принадлежащих тому и другому одновременно.
Определение 3. Разность множеств - новое множество, в которое входят элементы уменьшаемого множества (A), не входящие в число элементов вычитаемого множества (B).
Примечание. Если при выполнении операции объединения (А + В) включаемые в А из В элементы уже присутствуют в множестве А и, если при выполнении операции разности (А - В) вычитаемые из А элементы отсутствуют в множестве А, то сообщения об ошибке не будет. Операции просто не будут выполняться.
Последние две операции используются для выполнения следующих действий:
1). (А+В) используются для включения в множество отдельных элементов.
2). (А-В) используется для исключения отдельных элементов из множества.
Var
s :set of [‘a’..’z’];
begin Пустое множество
s := [];
Ошибка: а не является ни конструктором, ни переменной множественного типа. |
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; {символ , вводимый с клавиатуры}
Подготовка цикла |
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; ....... |
Подготовка цикла |
s := [];
c := #0;
Здесь проверяется предыдущее,
а не текущее значение с
while c <> '.' do
begin
Вставка |
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.
Дата добавления: 2016-05-28; просмотров: 2542;