- •1. Основні поняття Object Pascal
- •Label { Розділ опису міток } Const { Розділ опису констант }
- •Дійсні дані зображуються в експоненціальній формі
- •Введення і виведення даних. Для введення і виведення даних використовуються процедури
- •Лабораторна робота № 1 Лінійні програми з розгалуженнями
- •2. Оператори повторень
- •Оператор for з зарезервованим словом to виконується за алгоритмом:
- •Завершення виконання оператора for.
- •Лабораторна робота № 2 Циклічні програми. Обчислення з заданою точністю
- •3. Структуровані типи даних. Масиви
- •Лабораторна робота № 3 Алгоритми обробки масивів
- •4. Алгоритми обробки багатовимірних масивів
- •Лабораторна робота № 4 Алгоритми обробки багатовимірних масивів
- •5. Упорядкування і пошук даних
- •Лабораторна робота № 5 Упорядкування і пошук даних
- •6. Структуровані типи даних. Множини
- •Лабораторна робота № 6 Множини
- •7. Символьні рядки
- •Лабораторна робота № 7 Символьні рядки
- •8. Процедури і функції
- •Лабораторна робота № 8 Процедури і функції
- •9. Процедури і функції. Процедурні типи
- •Лабораторна робота № 9 Процедурні типи
- •Теоретичні відомості для виконання лабораторної роботи
- •1. Формула середніх прямокутників
- •2. Формула трапецій
- •3. Формула Сімпсона (формула парабол)
- •Розв’язування рівнянь. Розв’язування рівнянь виду
- •10. Рекурсивні процедури і функції Рекурсія – це такий спосіб організації обчислювального процесу, при якому підпрограма під час виконання звертається сама до себе.
- •Лабораторна робота № 10 Рекурсивні процедури і функції
- •11. Динамічні структури даних
- •Дані, які використовуються у програмі, поділяються на статичні й динамічні.
- •Вказівник може бути у трьох станах:
- •Вказівники
- •Лабораторна робота № 11 Динамічні структури даних
- •12. Файли
- •Лабораторна робота № 12 Текстові файли
- •Додаток Процедури і функції Object Pascal
- •Література
- •Практикум
- •58012, Чернівці, вул. Коцюбинського, 2
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;