Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОП. Лаба №7.DOC
Скачиваний:
3
Добавлен:
04.11.2018
Размер:
75.78 Кб
Скачать

Операції над множинами

НАЗВА

ФОРМА

ПОЯСНЕННЯ, ПРИКЛАДИ ВИКОРИСТАННЯ

=

Перевірка на рівність

S1 = S2

Результатом є логічне значення, рівне TRUE, якщо S1 і S2 складаються з однакових елементів незалежно від порядку слідування, і FALSE у протилежному випадку.

[1,2,3] = [1,3,2]; [] = []; ['a'..'c'] = ['a','b','c']

<>

Перевірка на нерівність

S1<>S2

Результатом є логічне значення, рівне TRUE, якщо S1 і S2 відрізняються хоча б одним елементом, і FALSE у протилежному випадку.

[1,2] <> [1]; [] <> [3]; ['a'..'c'] <> ['a','c']

<=

Перевірка на підмножину

S1<=S2

Результатом є логічне значення, рівне TRUE, якщо всі елементи S1 містяться і в S2 незалежно від їх порядку слідування, і FALSE у протилежному випадку.

['a','b'] <= ['a'..'z']; [] <= [4]; [1,2] <= [1,2,3]

>=

Перевірка на надмножину

S1>=S2

Результатом є логічне значення, рівне TRUE, якщо всі елементи S2 містяться в S1, і FALSE у протилежному випадку.

['x'..'z'] >=['y']; [1..10] >=[1..5]; [5,7] >=[]

in

Перевірка входження

елемента у множину

E in […]

E in S1

Результатом є логічне значення, рівне TRUE, якщо значення Е належить базовому типу множини і входитьу множину […] (S1). Якщо множина не містить у собі значення К, то результатом є FALSE.

5 in [0..5]; 's' in ['a'..'z']; not (7 in [9..20])

+

Об’єднання множин

S1 + S2

Результатом об’єднання є множина, отримана злиттям елементів цих множин і виключенням елементів, що повторюються.

[1,2]+[2,3,4] = [1,2,3,4]; {[1..4]} ['s'] + [] = ['s']

Різниця множин

S1 – S2

Результатом операції отримання різниці S1 – S2 є множина, складена з елементів, які входять в S1, але не входять в S2.

[5,7,9] – [7] = [5,9]; ['1','2'] – ['8','9'] = ['1','2']

*

Перетин множин

S1 * S2

Результатом перетину є множина, що складається лише з тих елементів S1 і S2, які містяться одночасно і у S1, і у S2.

[3,4,5,6,7] * [4,5,8] = [4,5]; ['x'] * [] = []

Переваги типу множина: компактність подання – один елемент множини займає один біт пам’яті; відсутність необхідності заздалегідь вказувати кількість елементів множини – по ходу програми множина може розширятись або скорочуватись; покращення наочності програм і гнучкості мови програмування. Основним недоліком є те, що Турбо Паскаль не дозволяє виводити множини на екран і отримувати окремі елементи з множин. Введення множин можливе лише по елементам.

Розглянемо прості приклади використання типу даних множина при розв’язуванні задач засобами мови ТР.

Задача 1. В порядку спадання вивести всі цілі числа з діапазону 1..4900, які можна подати у вигляді n2 + 2k2, але не можна подати у вигляді 7ij + j + 3 (n, k, i, j ≥ 0).

Uses Crt;

Type S = 1..4900;

SS = Set of S;

Var p: S;

S1, S2: SS;

n, k : integer;

Begin

S1 :=[]; S2 :=[]; {Ініціалізація множин}

for n:= 0 to 70 do

for k:= n to 70 do

begin

S1 := S1 +[n*n +2*k*k];

S2 := S2 + [7*n*k + k + 3]

end;

for p := 4900 downto 1 do

if (p in S1) and (not (p in S2))

then writeln(p)

End.

Задача 2. Дана послідовність латинських літер, яка закінчується крапкою. Вивести перші входження літер у послідовність, зберігаючи їх початковий взаємний порядок. (Наприклад, вхідний текст – qqwerrtyy., вихідний текст – qwerty).

Uses Crt;

Var Let : Set of 'a'..'z';

ch : Char;

Begin

ClrScr;

Let := []; {Множина літер у розглянутій частині тексту}

Read(ch);

while ch <> '.' do

begin

if not (ch in Let) then {Перше входження літери}

begin

Write(ch);

Let := Let + [ch]

end;

Read(ch)

end

End.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]