Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методтичка по контрольной Частина 1.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
414 Кб
Скачать
☆

2.11 Множини

Поняття множини в мові ПАСКАЛЬ ґрунтується на математичному представленні про множини: - це обмежена сукупність різних елементів. Для побудови конкретного множинного типу використовується тип, що перелічується чи інтервальний тип даних. Тип елементів, що складають множину, називається базовим типом.

Множинний тип описується за допомогою службових слів Set of, наприклад:

type M= Set of 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].

Константа виду [ ] означає порожню підмножину.

Множина містить у собі набір елементів базового типу, усі підмножини даної множини, а також порожня підмножину. Якщо базовий тип, на якому будується множина, має К елементів, то число підмножин, що входять у цю безліч, дорівнює 2 у ступені К. Нехай мається змінна Р интервального типу:

var P: 1..3;

Ця змінна може приймати три різних значення - або 1, або 2, або 3. Змінна Т множинного типу

var T: Set of 1..3;

може приймати вісім різних значень:

[ ] [1,2]

[1] [1,3]

[2] [2,3]

[3] [1,2,3]

Порядок перерахування елементів базового типу в константах може бути будь-яким.

Значення змінної множинного типу може бути задано конструкцією виду [T], де T - змінна базового типу.

До змінних і констант множинного типу застосовують операції присвоювання (:=), об'єднання (+), перетинання (*) і різниці (-):

['A','B'] + ['A','D'] дасть ['A','B','D']

['A'] * ['A','B','C'] дасть ['A']

['A','B','C'] - ['A','B'] дасть ['C'].

Результат виконання цих операцій є величина множинного типу.

До множинних величин можуть застосовуватись операції: тотожність (=), нерівність (<>), міститься в (<=), містить (>=). Результат виконання цих операцій має логічний тип, наприклад:

['A','B'] = ['A','C'] дасть FALSE

['A','B'] <> ['A','C'] дасть TRUE ['B'] <= ['B','C'] дасть TRUE ['C','D'] >= ['A'] дасть FALSE.

Крім цих операцій для роботи з величинами множинного типу в мові ПАСКАЛЬ використовується операція

in,

яка перевіряє приналежність елемента базового типу, що стоїть ліворуч від знака операції, множини, що стоїть праворуч від знака операції. Результат виконання цієї операції – булевський. Операція перевірки належності елемента множини часто використовується замість операцій відношення, наприклад:

A in ['A', 'B'] дасть TRUE,

2 in [1, 3, 6] дасть FALSE.

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

['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

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

У кожній конкретній реалізації транслятора з мови ПАСКАЛЬ кількість елементів базового типу, на якому будується множина, обмежена. У 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.