Операции над множествами. Для мнoжecтв oпpeдeлeны cлeдyющиe oпepaции

Для мн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. В техникуме имеются секции по различным видам спорта. Известны виды спорта, которыми занимаются учащиеся каждой группы. Требуется построить множества, включающие в себя виды спорта:

· которыми занимаются во всех группах;

· которыми занимаются хотя бы в одной группе;

· которыми не занимаются ни в одной из групп.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: