висновок множин

При роботі з множинами важливим є питання виведення на екран елементів множини. Відзначимо, що в більшості версій мови в операторах WRITE можна називати змінні типу ARRAY. Наприклад, не можна вивести безліч таким чином:

VAR A. SET OF 1..9;

Тут немає нічого дивного, так як навіть якщо А є масив, то його теж не можна роздрукувати відразу за допомогою одного оператора WRITE (А). Для виведення елементів масиву організовуються цикли.

Для виведення елементів множини також потрібно організувати цикл (одноразовий), всередину якого вводиться деяка змінна, що пробігає всі можливі значення цієї множини, а перед оператором WRITE в рамках конструкції IF перевіряється, чи входить цей елемент в конкретне безліч:

if K in SET1 then write (K).

Як правило, для цілей роздруківки елементів множин організовуються свої процедури. Нехай ми маємо справу з множинами, що складаються з цілих чисел в межах NIZ і VERH. Задамо множинний тип TS для цих кордонів:

type INT = NIZ..VERH; TS = set оf INT.

Тоді можна написати процедуру, яка містить в якості параметра безліч:

procedure PRINTSET (OS. TS);

| For M: = NIZ to VERH do

| If M in OS then writeln (M);

Тепер можна звертатися до цієї процедури для друку множин, якщо тільки вони складаються з елементів, що не виходять з інтервалу NIZ ... VERH. Нехай в розділі констант було описано:

const NIZ = 0; VERH = 10.

Тоді можна вивести на екран елементи безлічі, звернувшись до процедури:

а) PRINTSET ([5, 6, 7]);

Звернення до процедури можна організувати також у вигляді:

var SET1, SET2. TS;

PRINTSET (SET1); PRINTSET (SET1 + SET2); і т.д.

П р и м і р. На закінчення розглянемо приклад цілком, де продемонструємо все ті дії, які визначені над множинами.

type KOST = 1..6; BROSOK = set of KOST;

var A, B, C. BROSOK;

procedure SRAWNENIE (D. BROSOK);

| For K: = 1 to 6 do

| If K in D then write (K: 4); writeln;

| A: = [1, 3, 4]; B: = [2, 4, 6];

| Write ( '[1, 3, 4] + [2, 4, 6] ='); SRAWNENIE (C);

| Write ( '[1, 3, 4] - [2, 4, 6] ='); SRAWNENIE (C);

| Write ( '[1, 3, 4] * [2, 4, 6] ='); SRAWNENIE (C);

Примітка. У програмі визначаються безлічі A, B, C типу BROSOK, елементами яких є цілі числа з діапазону [1..6], і процедура виведення на екран елементів таких множин.

Потім задаються безлічі A і B, знаходяться різні значення безлічі C і виводяться його елементи.

Зауваження 1. Якщо безліч задано перелічуваних типом, то його елементи надрукувати не можна. На друк можна вивести елементи тільки ординальне типу: INTEGER, CHAR, BOOLEAN, інтервальний.

Зауваження 2. Один і той же набір даних можна організувати у вигляді лінійного масиву ARRAY, у вигляді безлічі SET і у вигляді рядка типу STRING. Який з цих видів краще? Якщо над елементами (числами) виробляються дії, то краще ARRAY. Якщо ж стоїть завдання про взаємозв'язок елементів декількох множин або питання про входження якихось об'єктів в безліч, то краще SET.

Наприклад, перевірити, чи входить деяка буква в заданий текст, можна двома способами:

var TX. set of 'a' .. 'z';

1-й з п о с о б 2-й з п о с о б

for k: = 1 to 20 do if BW in TX then writeln ( "так").

if BW = TX [k] then OTWET: = 'так';

З наведених фрагментів програм видно, що 2-й спосіб в даному випадку краще, так як тут для визначення входження літери в текст досить однократного використання оператора IF, тоді як в першому випадку для цього використовується багаторазове застосування того ж оператора IF в операторі циклу FOR.

1. Величини яких типів даних можна об'єднувати в безліч?

2. Чим відрізняється об'єднання елементів безлічі від масиву?

4. Які операції можливі над множинами?

5. Як визначити приналежність елемента безлічі?

6. Як можна додавати нові елементи до безлічі?

7. Як видалити з безлічі A елементи, що містяться в іншій безлічі B?

8. Яка операція і який оператор використовуються для виведення елементів множини?

Схожі статті