Автор работы: Пользователь скрыл имя, 29 Апреля 2013 в 01:32, курсовая работа
Теорія перетворень в кільцях багаточленів знайшла широке застосування при вирішенні задач перешкодостійкого кодування, шифрування, передачі даних сигналами з великою базою (шумоподібних сигналів - ШПС) і т.п. В цих системах інформація передається блоками (кадрами, пакетами), в зв’язку з чим кожний блок може бути представлений багаточленом (вектором) фіксованої розмірності.
Метою даного курсового проекту є розробка класу для роботи в кільці многочленів над цілими числами. Для роботи з многоченами був розроблений програмний інтерфейс. Клас Zm дозволяє реалізувати функції додавання, віднімання та множення многочленів. Щоб представити результати операції в стандартному вигляді розроблена додаткова функція приведення подібних одночленів многочлена та сортування по збільшеню.
Реферат .....................................................................................................................................
Перелік умовних позначень,символів ,скорочень та термінів...............................................
Вступ…………............................................................................................................................
1. Аналіз предметної області....................................................................................................
1.1 Математичний опис задачі.............................................................................................
1.2 Обґрунтування вибору програмних засобів…………………………………………
1.2.1 Огляд особливостей мови програмування...........................................................
1.2.2 Огляд особливостей обраного компілятору …………………………………...
1.2.3Створення візуального інтерфейсу………………………………………………
1.3 Аналіз структури стандартної бібліотеки шаблонів STL...........................................
1.4 Висновки до розділу ………………………………………………………………...
2. Рішення шодо розробки програми…………………………………………………………..
2.1 Основні рішення щодо уявлення даних системи ….………………………………...
2.2 Опис розроблених алгоритмів.....................................................................................
2.3 Основні рішення щодо модульного уявлення системи..............................................
2.4 Результати тестування програмного забезпечення.....................................................
3. Посібник програміста............................................................................................................
4. Інструкція користувача.........................................................................................................
5. Інформаційний листок……………………………………………………………………..
6.Література...............................................................................................................................
Висновки……………………………………………
Розділення дозволяє зменшити кількість компонентів. Наприклад, замість написання окремої функції пошуку елементу для кожного типу контейнера забезпечується єдина версія, яка працює з кожним з них, поки дотримуються основні вимоги.
Контейнери
Контейнери бібліотеки STL можна розділити на чотири категорії: послідовні, асоціативні, контейнери-адаптери і псевдоконтейнери.
Контейнер |
Опис |
Послідовні контейнери | |
vector |
C-подібний динамічний масив довільного доступу з автоматичною зміною розміру при додаванні/видаленні елементу. Додавання-видалення елементу в кінець vector займає амортизоване O(1) час, та ж операція на початку або середині vector — O(n). Існує спеціалізація шаблону vector для типу bool, яка вимагає менше пам'яті за рахунок зберігання bool у вигляді бітів. |
list |
Двозв'язковий список, елементи якого зберігаються в довільних шматках пам'яті, на відміну від контейнера vector, де елементи зберігаються в безперервній області пам'яті. Повільний пошук і доступ за O(n), в будь-якому місці швидка вставка і видалення за O(1). |
deque |
Схожий на vector, але з можливістю швидкої вставки і видалення елементів на обох кінцях. |
Асоціативні контейнери | |
set |
Впорядкована множина унікальних елементів. При вставці/видаленні елементів множини ітератори, що вказують на елементи цієї множини, не стають недійсними. Забезпечує стандартні операції над множиною типу об'єднання, перетину, віднімання. Тип елементів множини повинен реалізовувати оператора порівняння operator< або потрібно надати функцию-компаратор. Реалізований на основі самобалансуючого дерева двійкового пошуку. |
multiset |
Те ж що і set, але дозволяє зберігати елементи, що повторюються. |
map |
Впорядкований асоціативний масив пар елементів, що складаються з ключів і відповідних ним значень. Ключі повинні бути унікальні. Порядок проходження елементів визначається ключами. При цьому тип ключа повинен реалізовувати оператора порівняння operator<, або потрібно надати функцию-компаратор. |
multimap |
Те ж що і map, але дозволяє зберігати ключі, що повторюються. |
Контейнери-адаптери | |
stack |
Стек — контейнер, в якому додавання і видалення елементів здійснюється з одного кінця. |
queue |
Черга — контейнер, з одного кінця якого можна додавати елементи, а з іншого — виймати. |
priority_queue |
Черга з пріоритетом, організована так, що найбільший елемент завжди стоїть на першому місці. |
Псевдоконтейнери | |
bitset |
Служить для зберігання бітових масок. Схожий на vector<bool> фіксованого розміру. Розмір фіксується тоді, коли оголошується об'єкт bitset. Ітераторів в bitset немає. Оптимізований за розміром пам'яті. |
basic_string |
Контейнер, призначений для зберігання і обробки рядків. Зберігає в пам'яті елементи підряд єдиним блоком, що дозволяє швидкий доступ до всієї послідовності. |
valarray |
Шаблон служить для зберігання числових масивів і оптимізований для досягнення підвищеної обчислювальної продуктивності. В деякій мірі схожий на vector, але в нім відсутня більшість стандартних для контейнерів операцій. Проте, в ньому реалізовані операції, які можна ефективно реалізувати як на векторних процесорах, так і на скалярних процесорах з блоками SIMD. |
У контейнерах для зберігання елементів використовується семантика передачі об'єктів за значенням. Іншими словами, при додаванні контейнер отримує копію елементу, і за запитом на витягання також повертає копію елементу. Присвоєння елементів реалізується за допомогою оператора присвоєння, а їхнє руйнування відбувається з використанням деструктора.
Висновки до розділу 1
Ознайомившись з найбільш відомими мовами програмування, їх можливостями та особистостями для виконання свого курсового проекту я обрала мову С#, тому що вона якнайбільш підходить до вимог мого завдання. Мова С# надає повний доступ до класів .NET Framework, за допомогою яких поставлена задача буде краще розв’язана.Також платформа .NET Framework надає можливість розробляти зручний для використання інтерефейс.
2 Рішення шодо розробки програми
2.1 Основні рішення щодо уявлення даних системи
Система складається з двох основних класів: клас Zm та клас головної форми Form1. Текст обох програми приведений в додатку А.
Структура Monominal містить об’єкт Pow та об’єкт Coeff, поле Mod типу byte. В об’єкт Coeff передається значення коефіцієнтів многочлена, а в об’єкт Pow значення степеней многочлена.
Клас Zm призначений для реалізації математичних операцій, містить об’єкти і методи класу з специфікаторами доступу public та private.
Таблиця 2.1 відображує усі методи класу, тип результату, вхідні параметри та призначення.
Таблиця 2.1 – Опис методів класу Zm
Прототип функції |
Назва |
Призначення |
Результат |
Параметри |
public Zm() |
public Zm |
Конструктор без параметрів класу Zm() |
Екземпляр класа Zm() |
- |
public Zm(List<Monominal> Polynom, byte Mod) |
public Zm |
Конструктор з параметрами |
Екземпляр класа Zm() |
Polynom, byte Mod |
public static Monominal operator+ (Monominal lhs, Monominal rhs) |
public static Monominal operator+ |
Додавання одночленів |
struct Monominal (Одночлен) |
(Monominal lhs, Monominal rhs) |
public static Monominal operator- (Monominal lhs, Monominal rhs) |
public static Monominal operator- |
Віднімання одночленів |
struct Monominal (Одночлен) |
(Monominal lhs, Monominal rhs) |
public static Monominal operator* (Monominal lhs, Monominal rhs) |
public static Monominal operator* |
Меоження одночленів |
struct Monominal (Одночлен) |
(Monominal lhs, Monominal rhs) |
public static bool operator > (Monominal lhs, Monominal rhs) |
public static bool operator > |
Порівняння одночленів «чи більше» |
bool |
(Monominal lhs, Monominal rhs) |
public static bool operator < (Monominal lhs, Monominal rhs) |
public static bool operator < |
Порівняння одночленів «чи меньше» |
bool |
(Monominal lhs, Monominal rhs) |
Продовження таблиці 2.1
private void SortPolynom (List<Monominal> Polynom) |
public static Zm operator+ |
Сортування одночленів в многочлені |
|
| |
public static Zm operator+ (Zm lhs, Zm rhs) |
public static Zm operator - |
Перегрузка операціі додавання |
(Zm lhs, Zm rhs) | ||
public static Zm operator - (Zm lhs, Zm rhs) |
public static Zm operator * |
Перегрузка операції віднімання |
(Zm lhs, Zm rhs) | ||
public static Zm operator * (Zm lhs, Zm rhs) |
перегрузка оператора множення |
(Zm lhs, Zm rhs) |
2.2 Опис розроблених алгоритмів
У данному курсовому проекті було розроьлено наступнв алгоритми :
- Додавання одночленів (Рисунок 2.1);
- Віднімання одночленів (Рсунок 2.2);
- Множення одночленів (Рисунок 2.3);
- Сортування многочленів (Рунок 2.4);
- Порівняння одночленів ;
- Перегрузка
операції додавання (Рисунок 2.
- Перегрузка операції віднімання.Перегзузка реператора віднімання виконана подібно,до перегрузки оператора додавання.
- Перегрузка операції множення(
Далі приведені блок-схеми
Рисунок 2.1 – Додавання одночленів
Рисунок 2.2 –Віднімання одночленів
Рисунок 2.3 – Множення одночленів
Рисунок 2.5 - Перегрузка операції додавання
Рисунок 2.6 - Перегрузка оператора множення
2.3 Основні рішення щодо модульного уявлення системи
Ісходні коди програмного продукту складаються з таких файлів:
Form1.cs – Основний вихідний файл програми.Код для відображення форми;
Form1.Designer.cs – Файл головної форми, містить інформацію про координати об’єктів, які знаходяться на формі, параметри доступи до них, данні про обробники їх подій;
CourseWork_OOP.exe – Готовий файл запуску програми проекта;
AssemblyInfo.cs - Атрибути для зміни метаданих збірки;
Zm.cs – містить у собі розроблений клас для реалізації арифметичних операцій;
Form1.resx – Файл ресурсів головної форми;
Program.cs – Точка входу у програму.
2.4 Результати тестування програмного забезпечення
Результати тестування системи на реалізацію операції віднімання многочленів приведені на рисунку 2.7
Рисунок 1.7 Тестування операції віднімання многочленів
Результати тестування системи на реалізацію операції складання многочленів приведені на рисунку 2.8
Рисунок 2.8 –Тестування операції складання многочленів
Результати тестування системи на реалізацію операції множення многочленів приведені на рисунку 2.9
Рисунок 2.9 – Тестувавння операації множення многочленів
3 Посібник програміста
3.1 Призначення і умови використання
Вимоги до апаратного забезпечення для експлуатації програми «Кольцо многочленов над Zm» не великі. Данне ПО розроблялася і випробовувалася на IBM PC Celeron 1,7 GHz, 256 Мб RAM, AGP 256 Мб ATI Radeon 9600 pro, HDD 40 Gb. Для нормальної працездатності програми цілком достатньо, щоб комп'ютер відповідав наступним вимогам:
- 128 Mb RAM
- Pentium 300 Мhz
- AGP 32X
- 2 Mb вільного місця на жорсткому диску
- Платформа .Net 2.0
- Наявність миші та клавіатури
Дана програма створена в середовищі швидкої розробки додатків Visual Studio 2008 (це середовище швидкої розробки, в якій в якості мови програмування використовується типізована об'єктно-орієнтована мова C#).
3.2 Характеристика програми
Щоб встановити програму «Кольцо многочленов над Zm» на комп'ютер достатньо скопіювати папку «CourseWork_OOP_5» в будь-яке місце на жорсткому диску. Папка «CourseWork_OOP_5» містить наступні файли:
AssemblyInfo.cs - Користувальницькі атрибути для зміни метаданих збірки;
Form1.cs – Основний вихідний файл програми.Код для відображення форми;
Form1.Designer.cs – Файл головної форми, містить інформацію про координати об’єктів, що знаходяться на формі, параметри доступи до них, данні про обробники їх подій;
CourseWork_OOP.exe – файл запуску програми;
Zm.cs – містить у собі розроблений клас для реалізації арифметичних операцій;
Form1.resx – Файл ресурсів головної форми;
Program.cs – Точка входу у програму.
3.3 Звертання до програми
Запуск програми здійснюється подвійним кліком миші по файлу «CourseWork_OOP.exe» або виділенням того ж файлу і натисканням клавіші Enter.
Вихідними і вихідними даними можуть бути цілі числа. Вихідними даними є результат виконання арифметичної операції. Вигляд програми з вхідними і вихідними даними приведений на рисунку 3.1
Рисунок 2.1 - Вигляд програми з вхідними та вихідними данними
Програма здійснює контроль данних які вводятся,при спробі внести в поле літеру або символ заміть цифр,або залишити поле пустим ,програма далі не виконує жодних дії.
Рисунок 3
4 Інструкція користувача
Програма «CourseWork_OOP» використовується для виконання наступних функцій: додавання многочленів,віднімання многочленів,знаходження добутку многочленів та ділення результату по модулю,та виводити результат вибраних операцій у відсортурованому вигляді.
Для виконання програми необхідна система з наступними характеристиками: процесор з тактовою частотою 300 МГц та вище, 2 вільних Мб на жорсткому диску для встановлення програми, 10 вільних мегабайт у оперативному запам’ятовуючому пристрої, операційна система Microsoft Windows 2000 /XP/Vista/Seven.
Робота програми можлива як у інтегрованому середовищі Visual Studio 2008, так і безпосередньо з операційної системи, запускаючи на виконання файл CourseWork_OOP.exe.
Щоб розпочати роботу з програмою потрібно: