3) Пересечением двух множеств является множество, состоящее из элементов, которые входят одновременно в оба исходных. Знак операции пересечения *.
Пример.[’A’,’B’,’C’] * [’A’,’C’] = [’A’,’C’]
[’A’,’B’] * [’X’,’Y’] = [ ]
[ ]*[ ] = [ ]
4) Разностью двух множеств является множество, состоящее из элементов первого, которые не входят во второе. Знак операции вычитания: –.
Пример.[’A’,’B’,’C’] – [’A’,’C’] = [’B’]
[’A’,’B’] – [ ] = [’A’,’B’]
[’A’,’B’] – [’A’,’B’] = [ ].
Примеры программ с использованием множеств
При разработке алгоритмов и программ с множествами необходимо учесть, что Паскаль не обеспечивает ввод или вывод множеств непосредственно с помощью операторов Read или Write. Формирование множества, элементы которого вводятся с клавиатуры, можно выполнить, используя операцию присоединения, следующим образом.
Один из алгоритмов ввода множества
1. Множество :=[ ].
2. Повторять
2.1. Ввести элемент;
2.2. Множество:= Множество + [элемент].
Пока не надоест.
Вывод содержимого множества осуществляется путем тестирования. При этом в цикле перечисляются все возможные значения его элементов и те из них, которые входят в множество, выводятся на экран.
Один из алгоритмов вывода множества
1. Для Элемента от Первого_значения до Последнего_значения выполнить
Если Элемент принадлежит (In) Множеству, то
Вывести Элемент.
Рассмотрим примеры алгоритмов и программ, использующих множества.
Пример 1.Сформировать и вывести на экран множество из n символов латинского алфавита (n<20). Если вводимая буква уже есть в множестве, выдать соответствующее сообщение.
Program Mnog_Sim;
Const
N=20;
Var
S : Set Of Char;
B : Char;
I : Integer;
Begin
S := [];
For I:=1 To N Do
Begin
Writeln (’Введите букву’);
Readln(B);
If B In S Then
Writeln(’Буква ’,B,’ уже есть’)
Else
S:=S+[B];
End;
Writeln(’Буквы, входящие в множество’);
For B:=’A’ To ’z’ Do
If B In S Then
Write(B:2);
End.
Обратите внимание, что вводимые буквы могут быть и прописными, и строчными, поэтому при выводе в цикле For параметр цикла принимает все значения для букв латинского алфавита от A до z.
Пример 2.Используя множество гласных букв, подсчитать количество гласных в предложении. Предложение и множество гласных ввести с клавиатуры.
Program Glasn;
Var
P : String; {предложение}
Gl : Set Of Char; {множество гласных}
B : Char;
K,I,N : Integer;
Begin
Gl := [];
B := ’#’;
While B <> ’!’ do
Begin
Writeln (’Введите гласную, конец ввода – !’);
Readln(B);
If B <> ’!’ then
Gl := Gl+[B];
End;
Writeln (’Введите предложение’);
Readln(P);
K := 0;
N := Length(P);
For I := 1 To N Do
If P[I] In Gl Then
K := K+1;
Writeln (’Количество гласных в предложении - ’,K);
WriteLn(’Нажмите клавишу ENTER...’);
ReadLn;
End.
Пример 3.Составить программу продажи билетов на пароход. Пусть места на пароходе нумеруются (для простоты) от 1 до n (n < 250). Покупатель заказывает номера мест. Если они свободны, то ему выдаются билеты, и номера мест исключаются из числа свободных. В противном случае предлагаются номера свободных мест. Если все билеты проданы, то начинается путешествие.