Основы программирования на C++, PASCAL
4 In M — true,
5 In М - false.
Рассмотрим несколько задач, для решения которых удобно использовать множества.
Пример 1. Дана символьная строка. Подсчитать в ней количество знаков препинания (. - , ; : ! * ?).
Program P1;
Var S: String; I,K: Byte;
Begin
ReadLn(S); K:=0;
For I:=1 To Length(S) Do
If S[I] In ['.','-',',',';',':', '!', '*','?']
Then K:=K+1;
WriteLn('Число знаков препинания равно',К)
End.
В этом примере использована множественная константа с символьным типом элементов. Эту задачу можно решить и без множества, записав в операторе If длинное логическое выражение: (S[l]='.') Or (S[l]='-') и т.д. Использование множества сокращает запись.
Пример 2. Даны две символьные строки, содержащие только строчные латинские буквы. Построить строку S3, в которую войдут только общие символы S1 и S2 в алфавитном порядке и без повторений.
Program Р2;
Type Mset=Set Of 'a'..'z';
Var S1,S2,S3: String;
MS1,MS2,MS3: Mset;
C: Char;
Procedure SM(S: String; Var MS: Mset);
{Процедура формирует множество MS, содержащее все символы строки S}
Var I: Byte;
Begin MS:=[] ;
For I:=1 To Length(S) Do
MS:=MS+[S[I]]
End;
Begin {Ввод исходных строк)
ReadLn(S1);ReadLn(S2);
{Формирование множеств MS1 и MS2 из символов строк S1 и S2)
SM(S1,MS1);SM(S2,MS2);
{Пересечение множеств - выделение общих элементов в множество MS3}
MS3:=MS1*MS2;
{Формирование результирующей строки S3)
S3:=";
For С: ='а' То 'z' Do
If С In MS3 Then S3:=S3+C;
WriteLn('Результат:',S3)
End.
Пример 3. Составить программу, по которой из последовательности натуральных чисел от 2 до N (1 < N ≤ 255) будут выбраны все простые числа.
Для решения задач такого типа существует алгоритм, известный под названием «Решето Эратосфена». Суть его в следующем:
1. Из числовой последовательности выбираем минимальное значение, это будет простое число.
2. Удаляем из последовательности все числа, кратные выбранному.
3. Если после удаления последовательность не стала пустой, то возвращаемся к выполнению пункта 1.
Вот пример работы такого алгоритма для N = 15 (подчеркнуты выбранные простые числа):
2 3 4 5 6 7 8 9 10 11 12 13 14 15
3 5 7 9 11 13 15
5 7 11 13
7 11 13
11 13
13
Решение этой задачи удобно программировать, используя множественный тип.
Program Eratosfen;
Const N=201;
{Возможно любое значение 1<N<256}