Безліч b>
p>
Поняття
множини в Паскалі дуже близько до математичного визначення: безліч - це
сукупність однотипних неіндексірованних об'єктів. Безліч описуються в
вигляді: p>
SET OF тип, p>
де
тип - базовий для цього безлічі тип, тобто тип елементів множини. Базовий
тип повинен бути порядковим типом потужністю не більше 256 (тобто допускаються не
більше 256 різних значень), причому порядкові номери (згадаймо функцію ORD)
найменшого та найбільшого значень повинні лежати на відрізку [0,255]. Таким
чином, базовим типом для безлічі можуть бути: типи Char, Boolean, Byte і все
похідні від Byte інтервальні типи. Розмір об'єкту типу "багато" можна
визначити за формулою: розмір = (потужність-1) DIV 8 + 1, тобто множини --
досить компактні об'єкти, найбільше безліч має розмір 32 байти.
Неіменованние константи типу безліч записуються у вигляді: p>
[підмножина, підмножина, ... ], P>
де
підмножина - це або окреме значення, або діапазон. Діапазон
записується як початкове значення .. кінцеве значення. Будь-яке зі значень
може бути як константою, так і вираженням відповідного типу. Запишемо,
наприклад, константу-безліч, що містить числа 0, 1, 2, 3, 4, 8, 12, 13, 14,
15, 16, 22: p>
[0,1,2,3,4,6,12,13,14,15,16,22] p>
або p>
[0 .. 4,6,12 .. 16,22] p>
або p>
[0 .. 2,3 .. 4,6 .. 6,12,13 .. 16,22] p>
або p>
[22,13 .. 15,1 .. 6,0,12,16] p>
Всі
ці константи повністю еквівалентні, порядок запису елементів абсолютно
довільний. Допускаються порожні множини, вони записуються так: []. Опишемо
кілька змінних і типізованих констант: p>
TYPE MySet = SET OF 0 .. 111; p>
VAR a: SET OF Char; p>
b: MySet; p>
CONST c: MySet = []; p>
d: SET OF Char = [ 'А' .. 'Я']; p>
e: SET OF Boolean = [FALSE]; p>
До
множинам застосовні наступні операції: p>
--
безлічі можна привласнити безліч того ж типу; p>
--
операція об'єднання + p>
--
операція доповнення - p>
--
операція перетин * p>
--
операція еквівалентність = p>
--
операція не еквівалентність <> p>
--
операція включення <= і> = p>
Останні
три операції дають значення логічного типу - TRUE або FALSE. Нехай безліч A = [1 .. 20], B = [2 .. 9,15 .. 20], C = [3 .. 22], тоді A + B = [1 .. 20], A + C = [1 .. 22],
AC = [1,2], CA = [21,22], A * B = [1 .. 20], A * C = [3 .. 20], B * C = [3 .. 9,15. .20], A = B
= FALSE, A <> C = FALSE, B <= A = TRUE, A> = C = FALSE. P>
Існує
ще одна операція, пов'язана з множинами, - операція IN, вона застосовується до
скалярною величиною і безлічі: p>
вираз IN безліч p>
Тут
вираз - будь-який вираз базового для даної множини типу, результат
операції - TRUE, якщо такий елемент є в множині, і FALSE - в іншому
випадку. p>
Для
множин визначені дві стандартні процедури: p>
Include (безліч, вираз) p>
Exclude (безліч, вираз) p>
Процедура
Include додає елемент, що дорівнює значенню виразу в множина, а процедура
Exclude видаляє такий елемент з безлічі. P>
Тепер,
коли ми знаємо всі можливості множин, запишемо програму, що знаходить все
прості числа на відрізку [1,255]: p>
(програма використовує алгоритм "решето
Ератосфена ") p>
TYPE
NumSet = SET OF 1 .. 255; p>
CONST
N: NumSet = [2 .. 255]; (виключили 1 як що не є простим числом) p>
VAR MaxDivider, d: Byte; k: Word; p>
BEGIN MaxDivider: = Round (SQRT (255 )); p>
d: = 2; p>
WHILE d <= MaxDivider DO BEGIN p>
k: = 2 * d; p>
WHILE k <= 255 DO BEGIN
Exclude (N, k); INC (k, d); END; p>
INC (d); p>
END; p>
WRITELN ( 'Прості числа :'); p>
FOR k: = 1 TO 255 DO IF k IN N THEN
WRITE (k: 4); p>
END. p>
Вирішимо
ще одне завдання: ввести масив символів і підрахувати, скільки в ньому російських і
латинських літер. p>
TYPE Letters = SET OF Char; p>
CONST Lat = [ 'a' .. 'z', 'A' .. 'Z']; Rus
= [ 'А' .. 'п', 'р' .. 'я', 'А' .. 'Я']; p>
VAR
c: Char; p>
CONST RSum: Word = 0; LSum: Word = 0; p>
BEGIN
WRITE ( 'Введіть масив символів, потім натисніть Enter'); p>
REPEAT READ (c); p>
IF c IN Lat THEN INC (LSum) ELSE
IF c IN Rus THEN INC (RSum); p>
UNTIL c = # 10; p>
WRITELN ( 'латинських букв', LSum, 'російських букв', RSum); p>
END. p>
Зверніть
увагу, що в цьому завданні немає необхідності заздалегідь знати, скільки символів
міститься в масиві (більш того, у програмі ніякого масиву і немає!),
достатньо лише пам'ятати, що клавіша Enter генерує символ # 10. p>
Список літератури h2>
Для
підготовки даної роботи були використані матеріали з сайту http://elib.albertina.ru/
p>