Створення,реалызацыя та використання классу представлення матриць

Автор работы: Пользователь скрыл имя, 11 Декабря 2013 в 18:22, курсовая работа

Краткое описание

На сьогоднішній день математичне програмування - важлива складова всього програмування. Великі і складні обчислення завдяки простим програмам стають простими.
В даній курсовій роботі створювалася програма для обчислень над матрицями.
В якості середовища програмування обрана MS Visual Studio 2008 і мова програмування C + +.

Содержание

Вступ
1. Теоретична частина
1.1 Опис програми, матриці
1.2 C + +
1.3 Microsoft Visual Studio Express
1.4 Стандартна бібліотека шаблонів (STL)
1.5 Vector
1.6 Перевантаження операторів
2. Проектування та етапи розробки
2.1 Постановка завдання
2.2 Засоби розробки
2.3 Опис процесу компіляції і запуску програми
3. Реалізація
3.1 Структура програми
3.2 Структура класу
Висновок
Література

Прикрепленные файлы: 1 файл

Курсова робота.docx

— 33.32 Кб (Скачать документ)

Міністерство освіти і науки, молоді та спорту України

Приватний вищий навчальний заклад

Рівненький економіко-гуманітарний та інженерний коледж

 

 

 

 

 

 

 

 

Курсова робота

На  тему:

«Створення,реалызацыя та використання классу представлення матриць»

 

 

 

 

 

 

 

 

Виконав:

студент групи 35-КН спеціальності  5.05010301 ”Розробка програмного забезпечення”

Пузирко Д.Ю.

Перевірила:

Шевченко І.М.

 

Підпис:________________

Оцінка: ________________

 

 

 

Рівне 2013

 

Зміст

Вступ

1. Теоретична частина

1.1 Опис програми, матриці

1.2 C + +

1.3 Microsoft Visual Studio Express

1.4 Стандартна бібліотека шаблонів (STL)

1.5 Vector

1.6 Перевантаження операторів

2. Проектування та етапи розробки

2.1 Постановка завдання

2.2 Засоби розробки

2.3 Опис процесу компіляції і  запуску програми

3. Реалізація

3.1 Структура програми

3.2 Структура класу

Висновок

Література

 

 

 

 

 

 

 

 

 

 

 

Вступ

На сьогоднішній день математичне  програмування - важлива складова всього програмування. Великі і складні  обчислення завдяки простим програмам  стають простими.

В даній курсовій роботі створювалася програма для обчислень над матрицями.

В якості середовища програмування  обрана MS Visual Studio 2008 і мова програмування C + +.

1. Теоретична частина

Матриця - Математичний об'єкт, записується  у вигляді прямокутної таблиці  чисел (або елементів кільця) і  допускає алгебраїчні операції (додавання, віднімання, множення) між ним та іншими подібними об'єктами. Зазвичай матриці представляються двовимірними (прямокутними) таблицями. Іноді розглядають  багатовимірні матриці або матриці  непрямокутної форми.

1.1 Опис програми, матриці

Операції над матрицями

Нехай a ij - елементи матриці A, а b ij - елементи матриці B.

Лінійні операції:

Множення матриці A на число О» (позначення: О»A) полягає в побудові матриці B, елементи якої отримані шляхом множення кожного елемента матриці A на це число, тобто кожен елемент матриці B дорівнює

b ij = О»a ij

Додавання матриць A + B є операція знаходження  матриці C, всі елементи якої дорівнюють попарной сумі всіх відповідних елементів  матриць A і B, тобто кожен елемент  матриці C дорівнює

c ij = a ij + B ij

Віднімання матриць A - B визначається аналогічно додаванню, це операція знаходження  матриці C, елементи якої

c ij = a ij - B ij

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

Існує нульова матриця О˜ така, що її збільшення до іншої матриці A не змінює A, тобто

A + Θ = A

Всі елементи нульовий матриці дорівнюють нулю.

Множення матриць (позначення: AB, рідше  зі знаком множення) - Є операція обчислення матриці C, елементи якої дорівнюють сумі добутків елементів у відповідному рядку першого множника і стовпці  другого.

У першому множнику має бути стільки  ж стовпців, скільки рядків у другому. Якщо матриця A має розмірність, B -, то розмірність їх твори AB = C є.

Зводити в ступінь можна тільки квадратні матриці.

Транспонування матриці (позначення: A T ) - операція, при якій матриця відбивається відносно головної діагоналі, тобто

Якщо A - матриця розміру, то A T - матриця  розміру.

1.2 C + +

C + + (Сі + +) - компільований статично  типізований мова програмування  загального призначення. Підтримує  різні парадигми програмування,  але, в порівнянні з його  попередником - мовою Сі, - найбільшу  увагу приділено підтримці об'єктно-орієнтованого  і узагальненого програмування.

Назва В«C + +В» походить від Сі (C), в  якому унарний оператор + + позначає інкремент змінної.

У 1990-х роках мову став одним  з найбільш широко вживаних мов програмування  загального призначення.

При створенні C + + прагнули зберегти сумісність з мовою Сі. Більшість  програм на Сі будуть справно працювати  і з компілятором C + +. C + + має синтаксис, заснований на синтаксисі Сі.

1.3 Microsoft Visual Studio Express

Microsoft Visual Studio Express - лінійка безкоштовних  інтегрованих середовищ розробки, полегшена версія Microsoft Visual Studio, розробленої  компанією Microsoft. Згідно з твердженням  Microsoft, В«ExpressВ»-редакції пропонують  налагоджену, просту в навчанні  і використанні середовище розробки  користувачам, які не є професійними  розробниками ПЗ, - любителям та  студентам. Остання версія була  випущена 19 листопада 2007, пакет оновлення  SP1 - 11 серпня 2008. З квітня 2009 року Microsoft припинила підтримку всіх попередніх версій Visual Studio Express. У квітні 2010 випущена Visual Studio 2010 Express

1.4 Стандартна бібліотека  шаблонів (STL)

STL (англ. Standard Template Library) - набір узгоджених  узагальнених алгоритмів, контейнерів,  засобів доступу до їхнього  вмісту і різних допоміжних  функцій.

Стандартна бібліотека шаблонів до включення в стандарт C + + була сторонньою розробкою, в початку - фірми HP, а  потім SGI. Стандарт мови не називає її В«STLВ», оскільки ця бібліотека стала  невід'ємною частиною мови, проте  багато людей досі використовують цю назву, щоб відрізняти її від решти  частини стандартної бібліотеки (потоки введення/виводу (iostream), підрозділ  Сі та ін.)

Проект під назвою STLPort, заснований на SGI STL, здійснює постійне оновлення STL, iostream і строкових класів. Деякі  інші проекти також займаються розробкою  приватних застосувань стандартної  бібліотеки для різних конструкторських завдань. Кожен виробник компіляторів C + + обов'язково поставляє якусь  реалізацію цієї бібліотеки, оскільки вона є дуже важливою частиною стандарту  і широко використовується.

Архітектура STL була розроблена Олександром  Степановим і Менг Лі.

1.5 Vector

Вектор (vector) нагадує нам масив, тільки він здатний рости до довільного розміру, підтримує інформацію про  розмір. Як і масив до вектора  можна звернути скориставшись операцією  індексування []. Ось характеристики:

В· Доступ до даних з однаковою  швидкістю

В· Вставка призводить до переміщення  елементів

В· При розширенні дані копіюються в інший блок

Як бачите вектор оптимальний для  отримання інформації, але при  великій кількості вставок краще  скористатися іншими контейнерами, наприклад, списками. Проблема в тому, що фізично  вектор розташовується в безперервної пам'яті. На C це реалізовували функціями malloc.

Можливо ви вже стикалися з такою  проблемою, що масиви в с + + мають  обмежений розмір, а ми точно не знаємо кількість елементів, необхідне  в масиві. У таких випадках необхідно  використовувати динамічне програмування. Тобто виділяти пам'ять під елементи масиву при необхідності додати який-небудь елемент. В принципі, в з + + це можна реалізувати вручну, але навіщо? якщо є спеціальний клас - vector. Він дозволяє створювати нам масиви змінної довжини в залежності від ситуації.

Для роботи з вектором необхідно  підключити заголовний файл:

# include "Vector"

Оголосити робочу область:

Після цього вектор необхідно оголосити, це можна зробити двома способами.

vector vArray1; vector vArray2 (30);

У першому випадку вказується порожній вектор, а в другому початковий розмір.

Можна отримувати інформацію про параметри  вектора:

В· size () - Скільки даних зберігатися

В· capacity () - Скільки може зберігатися  до зміни розміру

В· max_size () - Максимальний розмір з...вичайно  дорівнює найбільш великим доступному блоку пам'яті

1.6 Перевантаження операторів

Перевантаження операторів - У програмуванні - один із способів реалізації поліморфізму, що полягає в можливості одночасного  існування в одній області  видимості декількох різних варіантів  застосування оператора, що мають одне і те ж ім'я, але розрізняються  типами параметрів, до яких вони застосовуються.

Реалізація

Перевантаження операцій припускає  введення в мову двох взаємопов'язаних особливостей: можливості оголошувати  в одній області видимості  кілька процедур або функцій з  однаковими іменами та можливості описувати  власні реалізації операцій (Тобто  знаків операцій, зазвичай записуваних  в інфіксной нотації, між операндами). Принципово реалізація їх досить проста:

Перевантаження операцій припускає  введення в мову двох взаємопов'язаних особливостей: можливості оголошувати  в одній області видимості  кілька процедур або функцій з  однаковими іменами та можливості описувати  власні реалізації операцій (то Тобто  знаків операцій, зазвичай записуваних  в інфіксной нотації, між операндами).

Іноді виникає потреба описувати  та застосовувати до створених програмістом типам даних операції, за змістом  еквівалентні вже наявним в мові. Класичний приклад - Бібліотека для  роботи з комплексними числами. Вони, як і звичайні числові типи, підтримують  арифметичні операції, і природним  було б створити для даного типу операції В«плюсВ», В«мінусВ», В«помножитиВ», В«розділитиВ», позначивши їх тими ж  самими знаками операцій, що і для  інших числових типів. Заборона на використання визначених у мові елементів змушує створювати безліч функцій з іменами  виду ComplexPlusComplex, IntegerPlusComplex, ComplexMinusFloat і  так далі.

Коли однакові за змістом операції застосовуються до операндів різних типів, їх вимушено доводиться називати по-різному. Неможливість застосовувати  для різних типів функції з  одним ім'ям призводить до необхідності вигадувати різні імена для одного і того ж, що створює плутанину, а  може і спричинить помилок. Наприклад, у класичному мові Сі існує два  варіанти стандартної бібліотечної функції знаходження модуля числа: abs () і fabs () - перший призначений для  цілого аргументу, другий - для речовинного. Таке положення, у поєднанні із слабким  контролем типів Сі, може привести до труднообнаружіваемой помилку: якщо програміст напише в обчисленні abs (x), де x - речова змінна, то деякі компілятори  без попереджень згенерують код, який перетворюватиме x до цілого шляхом відкидання дробової частини та обчислювати  модуль від отриманого цілого числа!

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

Засоби, дозволяють розширювати мову, доповнювати його новими операціями і синтаксичними конструкціями (а  перевантаження операцій є одним  з таких засобів, поряд з об'єктами, макрокомандами, функціоналами, замиканнями) перетворюють його вже в метамова - Засіб опису мов, орієнтованих на конкретні завдання. З його допомогою можна для кожної конкретної задачі побудувати мовне розширення, найбільш їй відповідне, яке дозволить описувати її рішення в найбільш природною, зрозумілою і простою формою. Наприклад, у додатку до перевантаження операцій: створення бібліотеки складних математичних типів (вектори, матриці) і опис операцій з ними в природній, В«математичноїВ» формі, створює В«мову для векторних операцій В», в якому складність обчислень прихована, і можливо описувати рішення задач у термінах векторних і матричних операцій, концентруючись на суті завдання, а не на техніці. Саме з цих міркувань подібні засоби були в Свого часу включені в мову Алгол-68.

Щоб дозволити існування декількох  однойменних операцій, достатньо  ввести в мову правило, згідно з яким операція (процедура, функція або  оператор) пізнаються компілятором не тільки по імені (позначенню), але і  за типами їх параметрів. Таким чином, abs (i), де i оголошено як ціле, і abs (x), де x оголошено як речовий - це дві різні  операції. Принципово в забезпеченні саме такого трактування немає жодних складнощів.

Щоб дати можливість визначати і  перевизначати операції, необхідно  ввести в мову відповідні синтаксичні  конструкції. Варіантів їх може бути досить багато, але по суті вони нічим  один від одного не відрізняються, досить пам'ятати, що запис виду В«<Операнд1> <знакОпераціі> <операнд2>В» принципово аналогічна викликом функції В«<ЗнакОпераціі> (<операнд1>, <операнд2>)В». Досить дозволити програмісту описувати  поведінку операторів у вигляді  функцій - і проблема опису вирішена.

2. Проектування та етапи  розробки

2.1 Постановка завдання

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

Читання матриць відбувається з  файлів в якому вони знаходяться, і після рішень всі отримані результати виводяться в інший файл.

 

 

 

 

Інтерфейс.

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

2.2 Засоби розробки

В Як засіб розробки обраний MS Visual Studio 2008 Express.

2.3 Опис процесу компіляції  і запуску програми

Для компіляції програми використовується IDE MS Visual Studio. У папці з проектом повинні бути присутніми файли: file1.txt, file2.txt, file3.txt

Скомпіллірованная програма складається  з наступних файлів:

1) папка cnf (Конфігураційні файли);

2) matrix.exe (виконуваний файл)

3. Реалізація

  1. matrix.h

# pragma once

# include

# include

# include

using std :: vector;

using std :: cout;

using std :: istream;

using std :: ostream;

class _matrix

{

private:

vector > vvf;

int stroka;

int stolbec;

public:

_matrix () {};

_matrix (int str, int stolb)

{

stroka = str;

stolbec = stolb;

vvf.resize (stroka, vector (stolbec));

}

_matrix (const _matrix & obj)

{

stroka = obj.stroka;

stolbec = obj.stolbec;

vvf = obj.vvf;

}

~ _matrix ()

{

vvf.clear ();

}

_matrix & operator + (_matrix & obj2)

{

_matrix * obj = new _matrix (* this);

for (int y = 0; y

for (int x = 0; x

(* obj) (y, x) = (* this) (y, x) + obj2 (y, x);

return * obj;

}

_matrix & operator-(_matrix & obj2)

{

_matrix * obj = new _matrix (* this);

for (int y = 0; y

for (int x = 0; x

(* obj) (y, x) = (* this) (y, x) - obj2 (y, x);

return * obj;

}

_matrix & operator * (_matrix & obj2)

{

_matrix * obj = new _matrix (* this);

for (int y = 0; y stroka; y + +)

for (int x = 0; x stolbec; x + +)

{

(* obj) (y, x) = 0;

for (int k = 0; k stroka; k + +)

(* obj) (y, x) + = obj2 (k, x) * (* this) (y, k);

Информация о работе Створення,реалызацыя та використання классу представлення матриць