Друк множин - Алгоритмічна мова Паскаль
Друк множин
Працюючи з множинами важливим є питання роздруківки елементів множини. Зазначимо, що в більшості версій мови в операторах WRITE не можна називати змінні типу "множина". Наприклад, не можна роздрукувати безліч таким чином:
VAR A: SET OF 1..9;
Тут нічого дивного, т.к. навіть якщо А є масив, його теж не можна роздрукувати відразу за допомогою одного оператора WRITE(А). Для виведення елементів масиву організовуються цикли.
Для друку елементів множини також потрібно організувати цикл (одноразовий), всередину якого вводиться деяка змінна, що пробігає всі можливі значення цієї множини, а перед оператором WRITE в рамках конструкції IF перевіряється, чи входить цей елемент в конкретне безліч:
if K in SET1 буде завантажено(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]); б) PRINTSET ([2]); в) PRINTSET ([3..8]).
Звернення до процедури можна організувати також у вигляді:
var SET1, SET2: TS;
PRINTSET (SET1); PRINTSET (SET1+SET2); і т.д.
ПРИКЛАД 3.Насамкінець розглянемо приклад цілком, де продемонструємо всі ті дії, які визначені над множинами:
type KOST = 1..6; BROSOK = set of KOST;
procedure SRAWNENIE (D: BROSOK);
for K:= 1 to 6 do
if K in D the write(K:4); writeln;
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], та процедура виведення на друк елементів таких множин.
ПРИМІТКА 1. Якщо множина задано перерахованим типом, його елементи надрукувати не можна. На друк можна вивести лише елементи ординального типу: INTEGER, CHAR, BOOLEAN, інтервальний.
ПРИМІТКА 2. Один і той же набір даних можна організувати у вигляді лінійного масиву ARRAY, у вигляді безлічі SET і у вигляді рядка типу STRING. Який із цих видів кращий? Якщо над елементами (числами) виконуються дії, краще ARRAY. Якщо ж стоїть завдання про взаємозв'язок елементів кількох множин або питання про входження якихось об'єктів у безліч, то краще за SET.