ОПЕРАЦИИ НАД МНОЖЕСТВАМИ

 

К множественным величинам применимы операции отношения: тождественность (=), нетождественность (<>), содержится в (<=), содержит (>=). Результат выполнения этих операций имеет логический тип, например true или false.

При работе с множествами допускается использование операций объединения(+), пересечения(*) и разности(-) и операции in

Операция "равно" (=). Два множества А и В считаются равными, если они состоят из одних и тех же элементов. Порядок следования элементов в сравнивае­мых множествах значения не имеет.

 

Например:

 

Значение А Значение В Выражение Результат
[1,2,3] ['a','b','c'] ['a'..'z' [1,2,3] ['c','a'] ['z'..'a'] A=B A=B A=B true false true

 

Операция "не равно" (<>).Два множества А и В считаются не равными, если они отличаются по мощности или по значению хотя бы одного элемента.

 

Например:

Значение А Значение В Выражение Результат
[1,2,3] ['a',..,'z'] ['a'..'z' [1,2,3,4] ['b','x'] ['z'..'a'] A<>B A<>B A<>B true true false

 

Операция "больше или равно"(>=). операция "больше или равно"используется для определения принадлежности множеств. Результат операции A>= В равен true, если все элементы множества В содержатся в множестве А. противном случае результат равен false.

Например:

Значение А Значение В Выражение Результат
[1,2,3,4] ['a',..,'z'] ['a','b','z' [1,2,3] ['b','t'] ['z'..'a'] A>=B A>=B A>=B true true true

 

Операция "меньше или равно" (<=). Результат выражения А <= В равен True, если все элементы множества А содержатся в множестве В.

В противном случае результат равен false.

 

Например:

Значение А Значение В Выражение Результат
[1,2,3] ['a',..,'c'] ['a','x'] [1,2,3,4] ['z',..,'a'] ['a','x','y'] A<=B A<=B A<=B true true true

 

Операция in. Операция in используется для проверки принадлежности кг либо значения указанному множеству. Обычно применяется в условных операторax.

 

Значение А Выражение Результат  
'y' z1 if a [1,2,3] then … if a in ['a','f'] then … ifain[x1,x2,y1,y2] theh true false true

 

При использовании операции in проверяемое на принадлежим значение и множество в квадратных скобках не обязательно предварительно описывать в деле описаний. Операция in позволяет эффективно и наглядно производить сложные проверки условий, заменяя иногда десятки других операций. Например, выражение

if (x=l) or (x=2) or (x=3) then...

можно заменить более коротким выражением

if x in [ 1. .3] then ...

Иногда операцию in пытаются записать с отрицанием:

X not in M.

Такая запись является ошибочной, так как две операции следуют подряд; пра­вильная инструкция имеет вид

not (X in M) .

Объединение множеств (+). Объединением двух множеств является ретье множество, содержащее элементы обоих множеств. Няппимеп"

Например:

Значение А Значение В Выражение Результат
[1,2,3,4] ['a',..,'c'] [] [4,5,6] ['d',..,'k'] [] A+B A+B A+B [1,2,3,4,5,6] ['a'..'k'] []

 

Пересечение множеств (*). Пересечением двух множеств является третье мно­жество, которое содержит элементы, входящие одновременно в оба множества.

Например:

Значение А Значение В Выражение Результат
[1,2,3] ['a',..,'c'] [] [1,3,4] ['b',..,'l'] [] A*B A*B A*B [1,3] [b] []

 

Разность множеств ( - ). Разностью двух множеств является третье множество, которое содержит элементы первого множества, не входящие во второе множество. - |

 

Например:

Значение А Значение В Выражение Результат
[1,2,3,4] ['a',..,'z'] [a1,a2,a3,a4] [4,2,1] ['e',..,'z'] [a3,a4] A-B A-B A-B [2] ['a'..'d'] [a1,a2]

 

Результат операций над двумя множествами можно наглядно представить с по­мощью закрашенных частей двух кругов.

 

 

Использование в программе данных множественного типа предоставляет ряд преимуществ:

упрощаются сложные операторы if,

увеличивается наглядность про­граммы и алгоритма решения задачи,

экономятся память, время компиляции и выполнения.

Отрицательным моментом является то что в языке Pascal отсутствуют средства ввода-вывода элементов множества, поэтому программист сам должен писать соответствующие процедуры.

При использовании в программах данных множественного типа выполнение операций происходит над битовыми строками данных. Каждому значению множественного типа в памяти ЭВМ соответствует один двоичный разряд. Например, множество

['A','B','C','D']

представлено в памяти ЭВМ битовой строкой

1 1 1 1.

Подмножества этого множества представлены строками:

['A','B','D'] 1 1 0 1

['B','C'] 0 1 1 0

['D'] 0 0 0 1

Величины множественного типа не могут быть элементами списка ввода - вывода.

В языке Pascal количество элементов базового типа, на котором строится множество, ограничено и не превышает 256.

Инициализация величин множественного типа производится с помощью типизированных констант:

Const

ret: set of 'a'..'z'= [];

.

 

 

Проиллюстрируем применение данных множественного типа на примерах.

Пример .Программа описания множестви операций над ними, в которой описаны множества чисел D, Dl, D2, D3. Затем они заполнены следующим образом: множество Dl — четными числами 2,4,6,8; множество D2 — числами 0,1,2,3,5; множество D3 — нечетными числами 1,3,5,7,9. После этого над мно­жествами выполнены операции объединения, разности и пересечения.

program Pr ; {Демонстрация операций над множествами}

Type

Digits = set of 0..9;

var

Dl, D2, D3, D : Digits;

begin

D1:=[2,4,6,8]; {Заполнение множеств}

D2:=[0..3,5];

D3:=[1,3,5,7,9];

D:=D1 + D2; {Объединение множеств Dl и D2}

D:=D -D2; {Разность множеств D и D2}

D:==D *Dl; {Пересечение множеств D и Dl}

{Вывод элементов множества}

f or i:=1 to 9 do

Begin

if i in D then write (i,' ');

End;

End.

В программе сначала описан тип Digits = set of 0..9, затем описаны переменные D1,D2,D3,D этого типа. В первой части программы осуществляется заполнение множеств, а затем над множествами выполняются операции объединения, пересечения, раз­ности.

ПримерПрограмма заполнения множества.

Опишите множество М (1..50). Сделайте его пустым, вводя целые чис­ла с клавиатуры. Заполните множество 10 элементами.

В разделе описания опишем множество целых чисел от 1 до 50, перемен­ную Х целого типа будем использовать для считывания числа-кандидата в множество, це­лую переменную I используем для подсчета количества введенных чисел. В начале программы применим операцию инициализации множества М:= [], так как оно не имеет элементов и является пустым.

Заполнение множества элементами произведем с использованием оператора цикла for, параметр которого будет указывать порядковый номер вводимого элемента. Операцию заполнения множества запишем оператором присваивания М:=М+[Х]. Контроль заполнения множества запишем с использованием операции проверки принадлежности. Если условия Х in M выполняется, выведем сообщение о том, что число Х помещено в множество.

program Pr;

Uses WinCrt;

var

M: set of1. . 50;

x, i : integer;

Begin

M:= []; {M - пустое множество}

fori:= 1to10do

Begin

Write ('Введите ',i,' -й элемент множества:');

Readin(x);

if not (xinM) then {Если число не входит в множество М}

Begin

Writeln(x, ' помещен в множество 1..50');

М:= М+[x];

end;

End;

Writeln;

{Вывод элементов множества}

f or i:=1 to 50 do

Begin

if i in M then write (i,' ');

End;

End.

 

Пример . Программа и вывода на экран дисплея наборов случайных чисел для игры в "Спортлото 5 из 36". Для заполнения каждой карточки спортлото необходимо получить набор из пяти псевдослучайных чисел. К этим числам предъявляются два требования:

- числа должны находиться в диапазоне 1..36;

- числа не должны повторяться.

ProgramLotto;

UsesWinCrt;

Var

nb, k: set of 1..36;

kol, l, i, n: Integer;

Begin

Randomize;

WriteLn('Введите число наборов');

ReadLn(kol);

nb:=[1..36];

for i:=1 to kol do

Begin

k:=[];

for l:=1 to 5 do

Begin

Repeat

n:=Random(36)

until (n in nb) and not (n in k);

k:=k+[n];

Write(n:4)

End;

WriteLn

End;

End.

 

Пример . Программа ввода фамилии, имени отчества на русском языке.

В разделе описания переменных опишем множество Lit, включающее в себя всевозможные символы, переменную Name для хранения Ф.И.0., Ch для посимвольного ввода.

 

 

Переменная логического типа Rus будет указывать, принадлежит ли очередной вводимый символ множеству букв русского языка. Для ввода символов используется стандартная функции ReadKey чтения кода нажатой клавиши. Текст программы имеет следующий вид:

programFIORus;{Ввод Ф.И.0. только на русском языке)

uses Crt;

var

Lit : set of char;

Name : string ;

Ch : char ;

Rus : boolean;

begin

Lit:=[' ','А' .. 'п','р' .. 'я'];

Write('Введите фамилию, имя, отчество ');

repeat{Считать всю строку Name}

repeat(Считать один символ}

Ch:=ReadKey; {Считать код нажатой клавиши}

if Ch<>#13 then

Begin

Rus:=Ch in Lit;

if rus {Если символ входит в множество Lit} Then

Begin

Name:=Name+Ch;{Добавление символа к Name}

Write (Ch); {Вывод символа в строке ввода} ;

End;

else {Код клавиши не входит в множество Lit}

Begin

Writeln('Переключитесь в русский регистр');

Write('и введите Ваше имя ');

end;

end;

until Rus;{Завершить ввод символа на русском языке}

until Ch=#13; {Завершить ввод строки нажатием клавиши Enter}

Writein;

Writeln('Здравствуйте, ',Name) ;

End.

 

Вопросы для самопроверки

1. Тип данных множество. Элементы множества.

2. Как задается множественный тип данных.

3. Что такое пустое множество и как оно обозначается?

 

4. Какие операции допустимы над множествами?

6. Какие множества считаются равными, неравными?

7. Для чего применяются операции отношения ">=", "<=".

8. Для чего применяется операция in? Особенности ее применения.

9. Что называется объединением, пересечением и разностью множеств?








Дата добавления: 2015-01-13; просмотров: 2532;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.042 сек.