Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
METOD_2.doc
Скачиваний:
10
Добавлен:
09.11.2019
Размер:
9.21 Mб
Скачать

6. Структуровані типи даних. Множини

Множина – це структурований тип даних, елементами якого є всі підмножини, побудовані на основі елементів базового типу.

Наприклад, множина, базовими для якої є елементи , складається з підмножин

,

де – порожня множина.

Всі підмножини множини різні й невпорядковані, тому підмножини і – еквівалентні. Кількість елементів базового типу, на основі якого конструюється множинний тип, називається потужністю і не може перевищувати .

У програмі опис множини має вигляд

<ім’я типу> = set of <базовий тип>;

де <ім’я типу> – ідентифікатор, set, of – зарезервовані слова (множина, із), <базовий тип> – будь-який порядковий тип крім Word, Integer, LongInt.

Множина будується конструктором. Конструктор – це список сталих, виразів, типів-діапазон базового типу, взятих у квадратні дужки. Наприклад,

Type Ts = set of char;

Var s: Ts;

s1: set of 0..9;

s:= [‘a’..’z’]; {множина всіх підмножин із малих латинських літер}

s1:= [1..3, 7, 9]; {множина всіх підмножин із цифр 1,2,3,7,9}

Над множинами визначені такі операції:

  • – перевірка еквівалентності; результат , якщо множини еквівалентні, інакше ;

  • – перевірка нееквівалентності; результат , якщо множини нееквівалентні, інакше ;

  • – перевірка входження; результат , якщо множина включає множину , інакше ;

  • – перевірка входження; результат , якщо множина включає множину , інакше ;

  • – перевірка належності; результат , якщо елемент міститься у множині , інакше ;

  • – перетин множин; результат – множина спільних елементів і ;

  • – об’єднання множин; результат – множина елементів доповнена тими елементами , яких немає в ;

  • – різниця множин; результат – множина елементів , яких немає в .

Окрім зазначених операцій можна використовувати процедуру – добавити елемент у множину S та процедуру – вилучити елемент із множини S.

Приклад. Задано натуральне число . Розробити програму, яка друкує у зростаючому порядку всі цифри, які входять в це число, які не входять в це число і які входять в це число більше одного разу.

Для побудови згаданих множин виділяємо цифри у заданому числі. Для цього послідовно ділимо це число за модулем 10 (операція mod) і ділимо націло на 10 (операція div). Остачі від ділення за модулем 10 є цифрами цього числа. Добавляємо ці цифри у множину s1. Якщо така цифра вже є в множині s1, то добавляємо її у множину s3 – цифр, що повторюються. Множину s2 – цифр, яких немає в числі, одержимо як різницю множини-сталої c – всіх цифр і множини s1.

Для реалізації описаного алгоритму командою File|New Application створимо новий проект.

Рис. 6.1 Форма Пошук цифр

Присвоїмо формі заголовок Пошук цифр (властивість Caption). Командою File|Save All запишемо програмний модуль у файл з іменем ULAB6_1.pas, а проект – PLAB6_1.dpr.

Розробимо форму для введення початкових даних і виведення результату Рис.6.1.

Для введення початкових даних і виведення результату розмістимо на формі чотири компоненти Edit.

Крім цього, розмістимо на формі дві керуючі кнопки (компонент Button) з написами Обчислити, Вихід.

Обробник кнопки Обчислити міститься у програмному модулі ULAB6_1 і має вигляд:

Unit ULAB6_1;

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

{Обробник кнопки Обчислити}

procedure TForm1.Button1Click(Sender: TObject);

Const c=[0..9];

Var n, i, k: integer;

s1, s2, s3: set of 0..9;

begin

{Введення початкових даних}

n:=StrToInt(Edit1.Text);

s1:=[]; {Множина цифр, які є в числі}

s2:=[]; {Множина цифр, яких немає в числі}

s3:=[]; {Множина цифр, які є в числі і повторюються}

i:=n;

while i<>0 do

begin

k:=i mod 10;

if k in s1 then s3:=s3+[k] else s1:=s1+[k];

i:=i div 10;

end;

s2:=c-s1;

{Виведення результату}

Edit2.Text:=''; Edit3.Text:=''; Edit4.Text:='';

{ Цифри, які є в числі }

for i:=0 to 9 do

if i in s1 then Edit2.Text:=Edit2.Text+IntToStr(i)+' ';

{ Цифр, яких немає в числі }

for i:=0 to 9 do

if i in s2 then Edit3.Text:=Edit3.Text+IntToStr(i)+' ';

{Цифри, що повторюються}

for i:=0 to 9 do

if i in s3 then Edit4.Text:=Edit4.Text+IntToStr(i)+' ';

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]