Множественный тип данных А*В А+В

advertisement
Множественный тип
данных
А*В
А+В
Множество



- конечная совокупность элементов,
принадлежащих некоторому базовому
типу.
Базовый тип –перечислимые типы
данных, символьный и байтовый типы
или диапазонные типы на их основе.
Каждый объект в множестве называется
элементом множества.
Множество


Количество элементов множества
называется его мощностью и не
превышает 256.
Элемент множества занимает в памяти
1 байт.
Описание множества
Type <имя типа> = Set of <тип
элементов>;
Var <имя множества>: <имя типа>;
или
 Var <имя множества>: Set of <тип
элементов>;

Пример описания
Type mnog_Char=Set of Char;
Var mn1: Set of Char;
mn2: mnog_Char;
mn3: Set of ‘A’..’Z’;
s1: Set of Byte;
s2: Set of (‘A’,’O’,’E’);
s3: Set of 100..200;
Пример описания
Type
digit = Set of 1..5;
Var s: digit;

Переменная s может принимать
значения,
состоящие
из
любой
совокупности целых чисел от 1 до 5.

Количество
различных
значений
переменной s – 32. Перечислим их:
Задание элемента
множества в программе
[] – пустое множество;
 [1],[2],[3],[4],[5] – одноэлементные
множества;
 [1,2],[1,3],[2,4][4,5] – двухэлементные
множества;
…………………………………………….
 [1,2,3,4,5] – множество всех
элементов базового типа

Операции над
множествами


1.
2.
Объединением двух данных множеств
называется множество элементов,
принадлежащих обоим этим множествам.
Знак операции объединения множеств в
Паскале — «+».
Примеры:
[‘A’, ‘F’]+[‘B’, ’D’]=[‘A’, ’B’, ’D’, ‘F’];
S1:=[1..5,9], S2:=[3..7,12],
S=S1+S2=[1..7,9,12]
Операции над
множествами


1.
2.
Пересечением двух множеств называется
множество элементов, принадлежащих
одновременно и первому, и второму
множеству. Знак операции пересечения
множеств в Паскале — «*».
Пример:
[‘A’, ‘F’]*[‘B’, ‘D’]=[ ]
[1..3, 5, 7, 11]*[3..8, 10, 12, 15..20]=[3, 5, 7];
Операции над
множествами


1.
2.
3.
Разностью двух множеств называется
множество, состоящее из тех элементов
первого множества, которые не являются
элементами второго. Знак операции
вычитания множеств — «-».
Пример:
[‘A’, ‘F’]- [‘B’, ‘D’]=[‘A’, ’F’]
[1..3, 5, 7, 11]-[3..8, 10, 12, 15..20]=[1..2, 11];
A1:=[‘A’..’Z’]; A1:=A1 – [‘A’]=[‘B’..’Z’].
Операции над
множествами


1.
2.
Операция определения принадлежности
элемента множеству. Эта логическая
операция обозначается служебным словом
in. Результат операции имеет значение
true, если элемент входит в множество, и
false в противном случае.
Пример:
5 in [3..7] имеет значение true;
‘a’ in [‘A’..’Z’] имеет значение false.
Операции над
множествами
Операцию проверки принадлежности
удобно использовать в подобных случаях:
Оператор вида
if (ch=‘a’) or (ch=‘b’) or (ch=‘x’) or (ch=‘y’)
then s;
с использованием множеств переписывается
в if ch in [‘a’, ’b’, ’x’, ’y’] then s;

Операции над
множествами
Для сравнения множеств используются
операции отношения:
 = проверка на равенство (совпадение) двух
множеств;
 <> проверка на неравенство двух множеств;
 <=, < проверка на вхождение первого
множества во второе;
 >=, > проверка на вхождение второго
множества в первое.
Пример1.
Подсчитать количество
цифр в тексте и вывести разные
цифры из текста.
var c,z:set of char; k,I,b:byte; s:string;
p;char;
begin
z:=[ ]; c:=[‘0’..’9’]; b:=0;
readln(s); k:=length(s);
for i:=1 to k do
if s[i] in c then begin z:=z+[s[i]]; inc(b); end;
writeln(‘кол цифр =‘,b);
writeln(‘разные цифры’);
for p:=‘0’ to ‘9’ do
if p in z then write(p:2);
end.
Пример2. Составить программу поиска
простых чисел в промежутке [1..N].
«Решето Эратосфена»
var m:set of byte;
i,k,n:integer;
begin readln(n);
m:=[2..n];
for k:=2 to n div 2 do
for i:=2 to n do
if (i mod k=0) and (i<>k) then m:=m-[i];
for i:=1 to n do
if i in m then write(i,’ ‘);
end.
Задания для
самостоятельного решения



Составить программу выделения следующих
множеств из множества целых чисел от 1 до 30:
множества чисел, кратных 2;
множества чисел, кратных 3;
Из первых двух множеств создать
 множество чисел, кратных 6;
 множество чисел, кратных 2 или 3;
 множество чисел, делящихся на 3, но
неделящихся на 2.
Download