Множини: Математичні операції з множинами (стр. 1 из 3)

Зміст

Зміст

1 Завдання

2 Аналіз предметної області та визначення функціональності модуля

3 Проектування інтерфейсу модуля

4 Проектування внутрішньої структури модуля

5 Приклад використання модуля

6 Текст програми


1 Завдання

„Множини: Математичні операції з множинами. Елементами множини можуть бути цілі числа або інші об’єкти за смаком. ”

Завдання полягає в тому, що потрібно створити програмний модуль – „Множина” та організувати його правильну структуру, визначити методи та властивості цього модуля (елементами множини є цілі числа). Також потрібно реалізувати математичні операції з множинами. Набір операцій має бути таким, щоб забезпечити використання класу на деякому початковому етапі, тому обмежимось такими операціями, як: об’єднання, перетин, різниця множин, симетричної різниці, перевірка належності заданого елемента множині. Після опису класу та реалізації всіх операцій потрібно створити об’єкти даного класу та показати роботу математичних операцій над об’єктами – множинами на практиці.

2 Аналіз предметної області та визначення функціональності модуля

Предметна область – це частина реального світу, що підлягає вивченню з метою автоматизації.

Предметною областю даного завдання є розділ математики, який займається вивченням множин. Цей розділ називається „Множини”. Автоматизування даної предметної області заключається в створенні програмного модуля, який б міг виконувати різні математичні операції над множинами. Така автоматизація має полегшити роботу користувачів при виконанні операцій над множинами.

Відповідно до предметної області даний програмний модуль повинен виконувати такий базовий набір функцій:

– заповнення множини цілими числами;

– виведення множини;

– виконання математичних операцій.

Для повноцінного функціонування модуля можна реалізувати такі математичні операції:

– об’єднання множин;

– перетин множин;

– різниця множин;

– симетрична різниця множин;

– перевірка належності елемента множині.

Об’єднання множин: результатом цієї операції є множина, яка містить усі елементи з першої та другої множини.

Перетин множин: результатом даної операції є множина, яка містить спільні для першої та другої множини елементи.

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

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

3 Проектування інтерфейсу модуля

Інтерфейс модуля – це всі методи та поля, що будуть доступними користувачеві в процесі роботи з цим модулем. Щодо методів, то користувачу будуть доступними тільки сигнатури цих методів, тому, що реалізація методів є внутрішньою частиною модуля.

До інтерфейсу даного модуля можна віднести:

– конструктор класу;

– функція заповнення множини;

– індексатор;

– функція виводу множини;

– функції – оператори над множинами.

Конструктор класу викликається автоматично при створенні об’єкта класу. Даному конструктору як параметр передається число цілочисельного значення.

Для заповнення множини цілими числами використовується функція „Input”. Цій функції передаються два параметри. Перший параметр – це множина, яку пізніше функція буде заповнювати елементами, а другий – це назва множини.

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

Для виводу множини на екран була перевизначена функція „ToString”.

Функції – оператори над множинами:

– оператор об’єднання „+”. Так як оператор „+” є бінарним, то функція отримує два параметри. Перший параметр – це множина, другий – це також множина. Функція повертає значення – результат виконання операції теж типу множини. Дана функція виконує об’єднання двох переданих множин.

– оператор перетину „*”. „*” – бінарна операція, функції передається два параметри, дві множини. Функція повертає значення – результат виконання операції теж типу множини. Дана функція виконує перетин двох переданих множин.

– оператор різниці „–”. Ця функція отримує два параметри. Перший параметр – це множина, другий – це також множина. Функція повертає значення – результат виконання операції теж типу множини. Дана функція виконує різницю двох переданих множин.

– оператор симетричної різниці „^”. Так як „^” – бінарна операція, то функції передається два параметри, дві множини. Дана функція виконує симетричну різницю двох переданих множин. Функція повертає значення – результат виконання операції теж типу множини.

– оператор перевірки належності елемента множині „/”. Так як „/” – бінарна операція, то функції передається два параметри – множина та ціле число. Дана функція виконує перевірку належності заданого елемента множині. Функція повертає значення – результат виконання операції булеву змінну.

Всі оператори є статичними функціями, так як в С# оператор зобов’язаний бути статичним.

4 Проектування внутрішньої структури модуля

Внутрішня частина модуля складається з методів та полів, що є не доступними для користувача в процесі роботи з цим модулем.

До внутрішньої частини даного модуля належить, по-перше, поле „Х” типу масив. Це поле відіграє роль множини. Дане поле має модифікатор доступу „privаtе”, тобто поле є приховане від користувача для того, щоб користувач не міг змінювати значення елементів масиву, а тільки через індексатор множини, який описаний вище. По-друге, це реалізація функцій – введення множини, операторів над множинами.

Конструктору, який викликається автоматично при створенні об’єкта, передається ціле число, яке є кількістю елементів множини. Потім конструктор створює масив з цією кількістю елементів, який фактично і буде множиною.

Спочатку множину елементів потрібно ввести. Для цього використовується функція „Input”. Дана функція отримує два параметри: множину і назву цієї множини. Множина заповняється двома способами: автоматичне заповнення та заповнення вручну. Якщо вибраний перший варіант, то множина заповнюється автоматично випадковими цілими числами. Якщо ж – другий, то користувач в циклі задає кожному елементу окреме значення. Дана функція не повертає значення, так як використовується для задання значень.

Для виводу множини на екран була перевизначена функція „ToString”. Ця функція не отримує ніяких параметрів, а тільки повертає символьну змінну, в яку передають саму множину.

Оператор об’єднання „+”. Оператору передається, як параметри дві множини. Алгоритм об’єднання цих множин наступний. В новий динамічний масив додаються всі елементи з першої множини. Потім по черзі беруться елементи з другої множини і перевіряються з динамічним масивом, якщо такого елемента в масиві не має, то він додається в цей масив. Потім створюється нова множина, в яку поміщаються всі елементи з динамічного масиву. Оператор як результат операції повертає цю нову множину.

Оператор перетину „*”. Оператор працює з двома переданими множинами наступним чином. Спочатку по черзі беруться елементи з першої множини та перевіряються з елементами другої множини, якщо такі елементи співпадають, то вони додаються в створений динамічний масив. Потім створюється нова множина, в яку поміщаються всі елементи з динамічного масиву. Оператор як результат операції повертає цю нову множину.

Оператор різниці „–”. Оператору передається, як параметри дві множини. Алгоритм різниці цих множин наступний. Спочатку по черзі беруться елементи з першої множини та перевіряються з елементами другої множини, якщо такі елементи не співпадають, то вони додаються в створений динамічний масив. Потім створюється нова множина, в яку поміщаються всі елементи з динамічного масиву. Оператор як результат операції повертає цю нову множину.

Оператор симетричної різниці „^”. Оператор працює з двома переданими множинами наступним чином. Спочатку по черзі беруться елементи з першої множини та перевіряються з елементами другої множини, якщо такі елементи не співпадають, то вони додаються в новий динамічний масив. Потім по черзі беруться елементи з другої множини та перевіряються з елементами першої множини, якщо такі елементи не співпадають, то вони додаються в створений динамічний масив. Потім створюється нова множина, в яку поміщаються всі елементи з динамічного масиву. Оператор як результат операції повертає цю нову множину.

Оператор належності елемента множині „/”. Оператору передається, як параметри множина та цілочисельний елемент. Алгоритм оператора наступний. Береться заданий елемент і перевіряється з елементами множини, якщо такий елемент існує в множині, то як результат повертається булева змінна зі значенням „truе”, якщо ні – „fаlsе”.

Діаграма класів.

Взаємодію класів даного модуля привожу на Рисунку 1.

Рисунок 1 – діаграма класів

З діаграми класів видно, що клас Clаss 1 (головна програма) використовує клас Consolе для виводу своїх результатів роботи. Також Clаss 1 створює об’єкт класу Sеt і його використовує. Так як на діаграмі класів показується тільки один зв’язок між двома класами, то було показано тільки створення класу Sеt. Клас Аrrаy агрегативно входить в клас Sеt, тобто клас Аrrаy входить до класу Sеt як окреме поле. Крім цього конструктор класу Sеt створює об’єкт типу масив. Але знову ж таки на діаграмі класів показано тільки зв’язок агрегації між цими класами.

5 Приклад використання модуля

В даному розділі наведені приклади коду, які демонструють використання модуля.