- •Передмова
- •Тема 1: Правила техніки безпеки при роботі з комп’ютером
- •Тема 2: Алфавіт. Ідентифікатори. Константи. Вирази
- •Тема 3: Загальна структура і розділи Pascal-програми
- •Тема 4: Введення і виведення у Pascal-і. Форматоване виведення
- •Тема 5: Прості (скалярні) типи данних
- •Тема 6: Завантаження середовища Турбо Паскаль. Функціональні клавіші
- •Тема 7: Меню опції
- •Тема 8: Вираження і пріоритет операцій. Стандартні математичні функції та процедури
- •Тема 9: Умовний оператор. Вкладений умовний оператор
- •Тема 10: Оператор вибору
- •Тема 11: Оператори циклу. Оператор циклу з параметром
- •Тема 12: Оператор циклу з перед- і з постумовою
- •Тема 13: Складні типи. Масиви
- •Тема 14: Багатомірні масиви
- •Тема 15: Пошук і сортування елементів масиву. Класи алгоритмів сортування
- •Тема 16: Динамічна пам'ять. Адреси і покажчики
- •Тема 17: Оголошення покажчиків, виділення та звільнення динамічної пам’яті
- •Тема 18: Процедури та функції для роботи з динамічною пам’яттю
- •Тема 19: Символьний тип даних. Упаковані масиви
- •Тема 20: Процедури та функції для обробки рядків
- •Тема 21: Структурований тип даних - безліч
- •Тема 22: Структурований тип даних – записи
- •Тема 23: Опис файлових змінних. Обробка типізованих файлів
- •Тема 24: Послідовний та прямий доступ до файлів
- •Тема 25: Обробка не типізованих файлів
- •Тема 26: Робота з текстовими файлами
- •Тема 27: Типізовані константи
- •Тема 28: Поняття та робота з процедурами та функціями
- •Тема 29: Використання модуля crt. Програмування клавіатури
- •Тема 30: Використання модуля crt. Текстове виведення на екран. Програмування звукового генератора
- •Тема 31: Графічні можливості tp 7.0. Використання бібліотеки Graph
- •Тема 32: Бібліотечні модулі користувача
- •Тема 33: Основні принципи ооп. Створення об’єктів. Використання об’єктів
- •Список літератури
- •Додаток а (довідковий) Основні алгоритми обробки масивів
- •Додаток б (довідковий) Питання перевірки знань з теорії
- •Додаток в (довідковий) Поширені коди клавіш
- •Додаток д (довідковий) Коди сканування клавіатури
Тема 21: Структурований тип даних - безліч
Безліч – це структурований тип даних, що представляє обмежений, неупорядкований набір різних елементів однакового типу.
Кількість елементів в одній безлічі не повинна перевищувати 256.
У Pascal-і елементи безлічі задаються в квадратних дужках:
['а', 'd', 's', 'р'] чи [12, 10, 6, 17].
Елементи в одній безлічі не можуть повторюватися.
Безліч, що не містить елементів, називається порожньою і позначається так: [ ].
Елементи безлічі не можна вводити і виводити за допомогою процедур Read і Write. Значення безлічей задають в операторі присвоювання, наприклад:
x1 := [‘а', ‘d’, ‘s’, ‘р']; x2 := [ 12,10,6,17]
Для опису безлічі використовується слово Set Of (безліч з…). Опис повинен знаходитися або в розділі Type:
type ім'я типу = set of t;
var ім'я безлічі : ім'я типу;
або безпосередньо в розділі Var:
var ім'я безлічі : set of t;
де t базовий тип елементів безлічі. В якості базового типу можуть бути стандартні типи Byte і Char, а також перелічувальні та обмежені типи, утворені з них. Інші типи неприпустимі. Це по'язано з обмеженням безлічі в 256 елементів.
Приклад опису.
type a = set of 1..100;
var x1, x2, x3 : a;
тут елементами безлічі x1, x2, x3 можуть бути будь-як цілі числа від 1 до 100, наприклад:
x1 := [1,23,45,17,21,3]; x2 := [1,15,10,33]; x3 := [100];
Опис цих безлічей безпосередньо в розділі Var має вигляд:
var x1,x2,x3 : set of 1..100;
Нижче представлені операції, які можна виконувати над безлічами :
+ * - = <> <= >= in |
об'єднання безлічей; перетинання безлічей; вирахування безлічей; перевірка безлічей на рівність; перевірка безлічей на нерівність; перевірка безлічі на включення “міститься в”; перевірка безлічі на включення “містить”; перевірка на приналежність елемента безлічі. |
Розглянемо операції на прикладах. Нехай дані безлічі:
a := [5,8,10,3]; b =: [2,8,3,17];
Об'єднанням безлічей А+В є нова безліч, кожен елемент якої належить або безлічі А або В, наприклад:
var a,b,c : set of byte;
x: byte;
begin
a := [5,8,10,3]; b:=[2,8,3,17]; c := a+b;
write(‘безліч з = ’);
write(‘[ ’);
for x := 2 to 17 do
if x in c then write(x,’,’);
write(‘]’);
end.
Перетинанням безлічей А*В є нова безліч, що містить елементи, які належать безлічам А та В, наприклад:
var a,b,c : set of byte;
x : byte;
begin
a := [5,8,10,3]; b := [2,8,3,17]; c := a*b;
write(‘безліч з = ’);
write(‘[ ’);
for x := 2 to 17 do
if x in c then write(x,’,’);
write(‘]’);
end.
Вирахуванням безлічей А-В є нова безліч, складена з елементів безлічі А, не приналежніх безлічі В, наприклад:
var a,b,c: set of byte;
x: byte;
begin
a := [5,8,10,3]; b := [2,8,3,17]; c := a - b;
write(‘безліч з = ’);
write(‘[ ’);
for x := 3 to 10 do
if x in c then write(x,’,’);
write(‘]’);
end.
Безліч А=В, якщо елементи безлічі А та В однакові. Результат операцій логічного типу, True чи False, наприклад:
var a,b : set of byte;
res : boolean;
begin
a := [5,8,10,3]; b := [2,8,3,17];
if a = b then res := true else
res := false;
writeln(res);
end.
Перевірка безлічі на включення “міститься в“. Безліч А міститься в безлічі В, якщо всі елементи безлічі А маються в безлічі В. Результат операції А<=B логічного типу, True чи False, наприклад:
var a,b : set of byte;
res : boolean;
begin
a := [5,8,10,3]; b := [2,8,3,17];
if a <= b then res := true else
res := false;
writeln(res);
end.
Перевірка безлічі на включення “містить”. Безліч А містить безліч В якщо всі елементи безлічі В маються в безлічі А. Результат операції А>=В логічного типу, True чи False, наприклад:
var a,b : set of byte;
res : boolean;
begin
a := [5,8,10,3]; b := [2,8,3,17];
if a >= b then res := true else
res := false;
writeln(res);
end.
Перевірка на приналежність елемента безлічі. Операція Х in А служить для перевірки приналежності елемента базового типу Х безлічі А. Результат операції логічного типу, True, якщо належить, чи False, якщо не належить. Наприклад:
var a,b : set of byte;
res : boolean;
begin
writeln(‘уведіть ціле число n :’);
readln(n);
a := [5,8,10,3];
if n in a then res := true else
res := false;
writeln(res);
end.
Питання для контролю
-
Поняття безлічі у Pascal.
-
Максимальна кількість елементів у безлічі. Чи можуть повторюватися елементи в одній безлічі? А в двох і більш безлічей?
-
Зображення безлічі у Pascal. Порожня безліч.
-
Як у Pascal задають значення безлічей? Чи можна організувати введення – виведення елементів за допомогою процедур Read і Write?
-
Опис безлічей у програмі.
-
Яким типом може бути базовий тип елементів безлічі?
-
Перелічте операції над безлічами.
-
Операції об'єднання безлічей.
-
Операції перетинання безлічей.
-
Операція вирахування безлічей.
-
Операція перевірки безлічей на рівність і на нерівність.
-
Операція перевірки безлічей на включення “міститься в”.
-
Операція перевірки безлічей на включення “містить”.
-
Операція перевірки на приналежність якого-небудь значення безлічі.