Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОП Конспект лекций - Паскаль.doc
Скачиваний:
20
Добавлен:
30.11.2018
Размер:
1.46 Mб
Скачать

Тема 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.

Питання для контролю

  1. Поняття безлічі у Pascal.

  2. Максимальна кількість елементів у безлічі. Чи можуть повторюватися елементи в одній безлічі? А в двох і більш безлічей?

  3. Зображення безлічі у Pascal. Порожня безліч.

  4. Як у Pascal задають значення безлічей? Чи можна організувати введення – виведення елементів за допомогою процедур Read і Write?

  5. Опис безлічей у програмі.

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

  7. Перелічте операції над безлічами.

  8. Операції об'єднання безлічей.

  9. Операції перетинання безлічей.

  10. Операція вирахування безлічей.

  11. Операція перевірки безлічей на рівність і на нерівність.

  12. Операція перевірки безлічей на включення “міститься в”.

  13. Операція перевірки безлічей на включення “містить”.

  14. Операція перевірки на приналежність якого-небудь значення безлічі.