
Множини. Опис множин, операції над множинами
Поняття множнин в мові ПАСКАЛЬ ґрунтується на математичному уявленні про множини: це обмежена сукупність різних елементів. Для по¬бу¬до¬ви конкретного множинного типу використовується, перелічуваний чи ін¬тер¬вальний тип даних. Тип елементів, з яких складається множина, називається ба¬зо¬вим типом.
Множинний тип описується за допомогою службових слів Set of, наприклад:
type M= Set of B;
Тут М – множинний тип, B – базовий тип.
Приклад опису змінної множинного типу:
Type M= Set of 'A'..'D';
Var MS: M;
Приналежність змінних до множинного типу може бути визначена прямо в розділі опису змінних:
var C: Set of 0..7;
Константи множинного типу записуються у виді вкладеної в квадратні дужки по¬слі-дов¬ності елементів чи інтервалів базового типу, розділених комами, наприклад: ['A', 'C'], [0, 2, 7], [3, 7, 11..14].
Константа виду [ ] означає порожню підмножину.
Множина містить у собі набір елементів базового типу, усі підмножини даної множини, а також порожня підмножину. Якщо базовий тип, на якому будується множина, має K елементів, то число підмножин, що входять у цю множину, дорівнює 2k . Нехай є змінна Р інтервального типу: var P: 1..3;
Ця змінна може приймати три різних значення – або 1, 2, або 3.
Змінна Т множинного типу var T: Set of 1..3; може приймати вісьмох різних значень:
[ ] [1] [2][3][1,2][1,3][2,3] [1,2,3]
Порядок перерахування елементів базового типу в константах безладний.
Значення змінної множинного типу може бути задане конструкцією виду [T], де T – змін¬на базового типу.
До змінного і константам множинного типу застосовні операції присвоювання(:=), об'єд¬нання(+), перетин(*) і різниця (-):
['A','B'] + ['A','D'] дасть ['A','B','D']
['A'] * ['A','B','C'] дасть ['A']
['A','B','C'] - ['A','B'] дасть ['C'].
Результат виконання цих операцій є величина множинного типу.
До множинних величин застосовні операції: тотожність (=), нетотожність (<>), міс¬тить-ся в (<=), містить (>=). Результат виконання цих операцій має логічний тип, наприклад:
['А','В'] = ['А','С'] дасть FALSE
['А','В']<>['А','С'] дасть TRUE
['В']<=['В','С'] дасть TRUE
['С','D']>=['А'] дасть FALSE.
Крім цих операцій для роботи з величинами множинного типу в мові ПАСКАЛЬ ви¬ко-ри¬стовується операція in – приналежність елемента, що перевіряється, базового типу, стоїть лі¬во¬руч від знака операції, до множини, що стоїть праворуч від знака операції. Результат ви-ко¬нан¬ня цієї операції – булевий. Операція перевірки належності елемента множині часто ви-ко¬ристовується замість операцій відношень, наприклад:
A in ['А', 'В'] дасть TRUE,
2 in [1, 3, 6] дасть FALSE.
При використанні в програмах даних множинного типу виконання операцій відбувається над бітовими рядками даних. Кожному значенню множинного типу в пам'яті ЕОМ відповідає один двійковий розряд. Наприклад, множина
['А','В','С','D'] представлена в пам'яті ЕОМ бітовим рядком 1 1 1 1.
Підмножини цієї множини представлені рядками:
['A','B','D'] 1 1 0 1
['B','C'] 0 1 1 0
['D'] 0 0 0 1
Величини множинного типу не можуть бути елементами виведення.
У кожній конкретній реалізації транслятора з мови ПАСКАЛЬ кількість елементів ба-зо¬вого типу, на якому будується множина, обмежена. У TURBO PASCAL кількість базових еле¬ментів не повинна перевищувати 256.
Ініціалізація величин множинного типу виробляється за допомогою типізованих кон-стант:
const seLit: Set of 'A'..'D'= [];
Проілюструємо застосування даних множинного типу на прикладі.
Приклад. Скласти програму, що виконує і виводить на екран дисплея набори ви¬пад¬ко-вих чисел для гри в "Спортлото 5 з 36".
Для заповнення кожної картки спортлото необхідно одержати набір з п'яти випадкових ч謬сел. До цих чисел пред'являються дві вимоги:
– числа повинні знаходитися в діапазоні 1..36;
– числа не повинні повторюватися.
Program Lotto;
Var nb, k: Set of 1..36;
kol, l, i, n: Integer;
begin
Randomize;
WriteLn('Задайте kol');
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.
ЗАВДАННЯ ДО РОЗВ’ЯЗАННЯ
1. З рядка тексту вилучити символи r,m,d,w;
2. Визначити чи виграли картки „Спортлото”, якщо вони подані масивом
array [1..5,1..20] of integer;
3. З рядка тексту відібрати голосні літери.
4. З масиву цілих чисел відібрати прості сформувати з них множину.
5. З масиву дійсчних чисел відібрати цілі сформувати з них множину.