
9.2. Приклади програмування задач з використанням множини.
Приклад 9.1. Існують три множини символьного типу A, B і C, які задані своїми конструкторами: ['А', 'В', 'D', 'R', 'H']; ['R', 'A', 'H', 'D']; ['А', 'R']. Сформувати нову множину – D = (А∩B)U(A\B), перевірити, чи належить множина С множині D.
Програма 9.1. Операції над множинами.
PROGRAM P91 (INPUT, OUTPUT);
VAR
A, B, C, D: SET OF CHAR; {МНОЖИНИ}
X: CHAR; {СИМВОЛ}
BEGIN
A:=['А', 'В', 'D', 'R', 'М'];
B:=['R', 'A', 'H', 'D'];
C:=['А', 'R'];
{РОЗРАХУНОК І ДРУК МНОЖИНИ D}
D:=(A*B)+(A-B);
WRITE('МНОЖИНА D = ');
FOR X:='A' TO 'R' DO
ІF X ІN D ТНЕN WRITE(X);
WRITELN;
{ПЕРЕВІРКА ВКЛЮЧЕННЯ МНОЖИНИ C ДО D}
ІF C<=D ТНЕN WRITE('МНОЖИНA C НАЛЕЖИТЬ ДО МНОЖИНИ D')
ЕLSE WRITE('МНОЖИНA C НЕ НАЛЕЖИТЬ ДО МНОЖИНИ D')
END.
----------------------------------------------------------------------
МНОЖИНА D = ABDMR
МНОЖИНA C НАЛЕЖИТЬ ДО МНОЖИНИ D
----------------------------------------------------------------------
Для виведення на екран дисплея елементів нової множини використовується оператор циклу FOR, параметром циклу є символьна змінна X, яка приймає значення кожного символу латинського алфавіту від А до R включно (див. впорядкованість літер латинського алфавіту в додатку). Зверніть увагу на те, що в операторі циклу використовується не весь латинський алфавіт від А до Z, а тільки частина його. Це пов’язано з тим, що задані множини A, B, C не містять символів після літери R, але помилкою не буде, якщо кінцевим значенням параметра циклу взяти символ Z.
Приклад 9.2. З множини цілих чисел від 1 до 20 виділити:
– множину чисел, що діляться на 6 без залишку;
– множину чисел що діляться без залишку або на 2, або на 3.
Введемо позначення для наведеної нижче програми 10.2: N – розмірність множини; N2 – множина чисел, що діляться на 2; N3 – множина чисел, що діляться на 3; N6 – множина чисел, що діляться на 6; N23 – множина чисел, що діляться на 2 або 3; К – параметр циклу.
Програма 9.2. Знаходження множин кратних чисел.
PROGRAM P92 (INPUT, OUTPUT);
СОNST N=20; {РОЗМІРНІСТЬ МНОЖИНИ}
VAR
N2, N3, N6, N23: SET OF INTEGER;
К: INTEGER; {ПАРАМЕТР ЦИКЛУ}
BEGIN
N2:=[ ]; {ПОЧАТКОВЕ ЗНАЧЕННЯ N2}
N3:=[ ]; {ПОЧАТКОВЕ ЗНАЧЕННЯ N3}
FOR К:=1 TO N DO
BEGIN
ІF К МОD 2=0 ТНЕN N2:=N2+[К];
ІF К МОD 3=0 ТНЕN N3:=N3+[К]
END;
N6:=N2*N3;
N23:=N2+N3;
WRITELN('НА 6 ДІЛЯТЬСЯ ЧИСЛА: ');
FOR К:=1 TO N DO
ІF К ІN N6 ТНЕN WRITE(К:3);
WRITELN;
WRITELN('НА 2 АБО НА 3 ДІЛЯТЬСЯ ЧИСЛА: ');
FOR К:=1 TO N DO
ІF К ІN N23 ТНЕN WRITE(К:3)
END.
----------------------------------------------------------------------
НА 6 ДІЛЯТЬСЯ ЧИСЛА:
6 12 18
НА 2 АБО НА 3 ДІЛЯТЬСЯ ЧИСЛА:
2 3 4 6 8 9 10 12 14 15 16 18 20
----------------------------------------------------------------------
10. Записи
У попередніх розділах розглядались впорядковані (масиви) або невпорядковані (множини) дані однакового типу. Проте в житті найчастіше зустрічаються неоднорідні дані, прикладами можуть бути: календарна дата – номер дня місяця, назва місяця, номер року; відомість складання заліку студентами – прізвище та ініціали студента, оцінка; адреса – назва країни, назва місцевості, назва населеного пункту, назва вулиці тощо, номер будинку, номер приміщення. При цьому з’являється необхідність об’єднувати дані різного типу в одну групу. Для роботи з групою даних в мові Паскаль введено поняття запису.