Для мнoжecтв oпpeдeлeны cлeдyющиe oпepaции:
+ - oбъeдинeниe мнoжecтв;
– - paзнocть мнoжecтв;
* - пepeceчeниe мнoжecтв;
= - пpoвepкa эквивaлeнтнocти двyx мнoжecтв;
<> - пpoвepкa нeэквивaлeнтнocти двyx мнoжecтв;
<= - пpoвepкa тогo, являeтcя ли лeвoe мнoжecтвo пoдмнoжecтвoм пpaвoгo мнoжecтвa;
>= - пpoвepкa тoгo, являeтся ли пpaвoe мнoжecтвo пoдмнoжecтвoм лeвoгo мнoжecтвa;
in - пpoвepкa тoгo, вxoдит ли элeмeнт, yкaзaнный cлeвa, в мнoжecтвo, yкaзaннoe cпpaвa.
Peзyльтaтoм oпepaций oбъeдинeния, paзнocти или пepeceчeния являeтcя cooтвeтcтвyющee мнoжecтвo, ocтaльныe oпepaции дaют peзyльтaт лoгичeскoгo типa.
B кaждoe мнoжecтвo включaeтcя и тaк нaзывaeмoe пycтoe мнoжecтвo – [ ], нe coдepжaщee никaкиx элeмeнтoв.
1) Объединением двух множеств называется множество элементов, принадлежащих обоим множествам. Например:
[‘B’, ‘F’] + [‘B’.. ‘D’] = [‘B’, ‘C’, ‘D’, ‘F’]
2) Пересечением двух множеств называется множество тех элементов, которые принадлежат одновременно двум множествам. Например:
[0..4] * [5,6] = [ ], [МОСКВА, ЯЛТА] * [КИЕВ, МОСКВА] = [МОСКВА]
3) Разностью двух множеств называется множество, содержащее те элементы первого множества, которые не являются элементами второго. Например:
|
|
[1, 5, 9] – [2, 4, 8, 9] = [1, 5]
Для сравнения множеств используются операции отношения.
4) Выражение А=В истинно только тогда, когда сравниваемые множества содержат одни и те же элементы.
5) Выражение А<>В истинно только тогда, когда одно из сравниваемых множеств содержит хотя бы один элемент, не входящий в другое множество.
6) Выражение А<=В истинно только тогда, когда все элементы множества А одновременно являются и элементами множества В.
7) Выражение А>=В истинно только тогда, когда все элементы множества В одновременно являются и элементами множества А.
Следующие выражения истинны:
[‘C’..’E’] = [‘D’, ‘E’, ‘C’]
[7, 1, 3] <> [2, 4, 6, 8]
[TAMBOV] < = [MOSCOW, TAMBOV]
[‘A’..’F’] > = [‘A’, ‘B’]
Результат логического типа вырабатывает и специальная операция определения принадлежности элемента некоторому множеству. Эта операция обозначается служебным словом in. Например, выражение 5 in [3..7] имеет значение TRUE (истина), так как 5 является элементом множества [3, 4, 5, 6, 7], а выражение K+2 in [0..7]*[4, 6, 8] при K=1 имеет значение FALSE (ложь), так как 3 не входит в множество [4, 6], полученное в результате пересечения исходных множеств.
Расположение операций для работы с множествами в порядке убывания приоритета:
1) *
2) +, –
3) in, =, < >, < =, > =
В группы объединены операции равного приоритета. Последовательность выполнение операций одного приоритета определяется порядком их появления в выражении. Для изменения порядка выполнения используются круглые скобки.
Вычислить следующие выражения:
1) [5] < = [1..5]
|
|
2) [‘A’..’D’, ‘K’..’M’] + [‘D’..’K’]
3) [МОСКВА, САНКТ-ПЕТЕРБУРГ, СОЧИ, КИЕВ] * [КИЕВ, СОЧИ]
4) [7, 1, 3..6] = [1..7]
5) 15 IN [1..10]
6) [‘A’, ‘B’, ‘C’] = [‘B’, ‘C’, ‘A’]
7) [3, 4, 6] <= [2..8]
8) [ ] >= [1, 2]
9) SUCC (‘C’) IN [‘B’.. ‘D’]
10) [2] <> [2, 2, 2]
11) 16 IN [16]
12) [1..14] * [5, 12..60] + [4..7] – [2..16] * [6]
Пример 2. Вычисление выражений.
program mn;
type
m1=set of 'A'..'Z';
town = (Moscow, Sochy, StPeterburg, Kiev);
m2 = set of town;
m3 = set of 1..100;
var a: m1; i: char; b:m2; j: town;
c:m3; k:integer;
begin
write ('2 выражение ');
a:=['A'..'D','K'..'M']+['D'..'K'];
for i:='A' to 'Z' do
if i in a then write (i, ' ');
write ('3 выражение ');
b:=[Moscow, StPeterburg, Sochy, Kiev]*[Kiev, Sochy];
writeln;
for j:=Moscow to Kiev do
if j in b then
case j of
Moscow: write ('Moscow ');
Sochy: write ('Sochy ');
StPeterburg: write ('StPeterburg ');
Kiev: write ('Kiev ');
end;
writeln;
write ('12 выражение ');
c:=[1..14]*[5,12..60]+[4..7]-[2..16]*[6];
for k:=1 to 100 do
if k in c then write (k, ' ');
writeln;
write ('1 выражение ');
if [5] <= [1..5] then writeln ('истина') else writeln ('ложь');
write ('4 выражение ');
if [7,1,3..6] = [1..7] then writeln ('истина') else writeln ('ложь');
write ('5 выражение ');
if 15 in [1..10] then writeln ('истина') else writeln ('ложь');
write ('6 выражение ');
if ['A', 'B', 'C'] = ['B', 'C', 'A'] then writeln ('истина') else writeln ('ложь');
write ('7 выражение ');
if [3,4,6] <= [2..8] then writeln ('истина') else writeln ('ложь');
write ('8 выражение ');
if [] >= [1,2] then writeln ('истина') else writeln ('ложь');
write ('9 выражение ');
if SUCC ('C') in ['B'..'D'] then writeln ('истина') else writeln ('ложь');
write ('10 выражение ');
if [2] <> [2,2,2] then writeln ('истина') else writeln ('ложь');
write ('11 выражение ');
if 16 in [16] then writeln ('истина') else writeln ('ложь');
readln;
end.
Пример 3. Известен набор продуктов – хлеб, масло, сыр, молоко, имеющихся в ассортименте магазинов. В три магазина доставлены отдельные виды этих продуктов. Требуется построить множества А, В, С, которые содержат соответственно:
· продукты, имеющиеся одновременно во всех магазинах;
· продукты, имеющиеся, по крайней мере, в одном из магазинов;
· продукты, которых нет ни в одном из магазинов.
program tovar;
const n=3;
type product=(bread, butter, cheese, milk);
assort=set of product;
shop=array [1..3] of assort;
var m1: shop; x: product; a,b,c,xm1:assort;
i, j, iw, m: integer; d: char;
begin
writeln;
for i:=1 to n do
begin
xm1:=[];
write ('Введите номера продуктов ', i, '-го магазина =>');
repeat
read (iw);
case iw of
1: x:=bread;
2: x:=butter;
3: x:=cheese;
4: x:=milk;
end;
xm1:=xm1+[x];
until eoln;
m1[i]:=xm1;
end; {конец цикла по i}
a:=m1[1]; b:=[]; c:=[bread..milk];
for i:=1 to n do
begin b:=b+m1[i];
a:=a*m1[i];
c:=c-b;
end;
for i:=1 to 3 do
begin
case i of
1: writeln ('продукты, имеющиеся одновременно во всех магазинах');
2: writeln ('ассортимент продуктов');
3: writeln ('продукты, которых нет ни в одном магазине');
end;
for x:=bread to milk do
if x in a then
case x of
bread: write (' bread ');
butter: write (' butter ');
cheese: write (' cheese ');
milk: write (' milk ');
end;
if i=1 then a:=b else a:=c;
writeln;
end;
readln (d);
end.
Протокол работы программы tovar:
Введите номера продуктов 1-го магазина => 1 3
Введите номера продуктов 2-го магазина => 1 2 3
Введите номера продуктов 3-го магазина => 1
продукты, имеющиеся одновременно во всех магазинах
bread
ассортимент продуктов
bread butter cheese
продукты, которых нет ни в одном магазине
milk
Варианты задания
1. Задано множество программ, которыми могут быть обеспечены ЭВМ. Известен набор программ, имеющихся на каждой ЭВМ. Требуется построить множества, включающие в себя программы:
· которыми обеспечены все ЭВМ;
· которые имеет хотя бы одна ЭВМ;
· которых нет ни на одной машине.
2. В техникуме имеются секции по различным видам спорта. Известны виды спорта, которыми занимаются учащиеся каждой группы. Требуется построить множества, включающие в себя виды спорта:
· которыми занимаются во всех группах;
· которыми занимаются хотя бы в одной группе;
· которыми не занимаются ни в одной из групп.