DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

роботи

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут післядипломної освіти
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2014
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Об’єктно-орієнтоване програмування

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ Національний університет “Львівська політехніка” Інститут післядипломної освіти ЗВІТ Про виконання лабораторної роботи №2 «Перевизначення операторів. Використання дружніх функцій» з дисципліни «Об’єктно-орієнтоване програмування» Тема роботи: Перевизначення операторів. Використання дружніх функцій. 1. Завдання Написати програму алгоритмічною мовою С++ згідно із завданням, отриманим відвикладача за табл. 1. Реалізувати заданий класовий тип із заданими методами, використовуючи механізм перевантаження функцій та операцій, а також значення параметрів за замовчуванням. Написати фрагмент програми з використанням класового типу та заданих методів. Варіант 5. Класовий тип: Динамічний двомірний масив **p Методи класу: Конструктор повинен дозволяти створювати об'єкти з ініціалізацією і без неї. Визначити конструктор копій. Перевантажити операції -, =, виводу <<, вводу >> для об'єктів класу, а також дружні операції <тип>*, +=. 2. Блок-схеми алгоритмів функцій програми  Рис. 2.1. Перезавантаження оператора «=» Рис. 2.2. Унарний «-» Блок-схема перезавантаження функції віднімання двох матриць const Matrix operator-(const Matrix& left, const Matrix& right), зображена на рис. 2.3. На рис. 2.4. зображена функція множення двох матриць const Matrix operator*(const Matrix& left, const Matrix& right).  Рис. 2.3. Бінарний "-" (дві матриці) Рис. 2.4. Множення елементів двох матриць Блок-схема перезавантаження функції віднімання матриці та числа const Matrix operator-(const Matrix& left, int right), зображена на рис. 2.5. На рис. 2.6. зображена функція множення матриці на число const Matrix operator*(const Matrix& left, int right).  Рис. 2.5. Бінарний "-" (матриця - число) Рис. 2.6. Множення матриці на число Блок-схема перезавантаження оператора «+=» для двох матриць Matrix& operator+=(Matrix& left, const Matrix& right), зображена на рис. 2.7. На рис. 2.8. зображена функція перезавантаження оператора «+=» для матриці та числа Matrix& operator+=(Matrix& left, int right).  Рис. 2.7. Оператор матриця += матриця Рис. 2.8. Оператор матриця += число Блок-схема перезавантаження оператора виводу матриці на екран «<<» ostream& operator<<(ostream& output, const Matrix& matr), зображена на рис. 2.9. На рис. 2.10. зображена функція перезавантаження оператора вводу матриці з клавіатури «>>» istream& operator>>(istream& input, const Matrix& matr).  Рис. 2.9. Оператор виводу матриці «<<» Рис. 2.10. Оператор вводу матриці «>>» 3. Текст програми на мові програмування С++ #include <iostream> #include <conio.h> #include <math.h> using namespace std; class Matrix { public: int* data; int size; //конструктор з ініціалізацією початкових данних //першим числом повиинно бути розмір матриці зі знаком мінус //в протилежному випадку заповнення масиву початковими значеннями //не відбудеться Matrix(int matSize, ...) { size = matSize; if(size<0) size = -size; data = new int[size*size]; if(matSize < 0) { int *p = &matSize; for(int i = 0; i < size*size; i++) { p++; *(data+i) = *(p); } } } //конструктор без параметрів //створюється масив 2*2 Matrix() { size = 2; data = new int[4]; } //конструктор копій Matrix(const Matrix &p) { size = p.size; data = new int[size*size]; int* k = p.data; for(int i = 0; i < size*size; i++) *(data+i) = *(k+i); } //деструктор ~Matrix() { delete[] data; } //перезавантаження оператора [] int* operator[](int row) { return data+row*size; } //перезавантаження оператора = Matrix& operator=(const Matrix& right) { //перевірка на самоприсвоєння if (this == &right) { return *this; } size = right.size; int* k = right.data; for(int i = 0; i < size*size; i++) *(data+i) = *(k+i); return *this; } //Дружні функції //унарний "-" friend const Matrix operator-(const Matrix& right); //бінарний "-" (матриця3 = матриця1 - матриця2) friend const Matrix operator-(const Matrix& left, const Matrix& right); //бінарний "-" (матриця3 = матриця1 - число) friend const Matrix operator-(const Matrix& left, int right); //матриця1 += матриця2; friend Matrix& operator+=(Matrix& left, const Matrix& right); //матриця1 += число; friend Matrix& operator+=(Matrix& left, int right); //"*" (матриця3 = матриця1 * матриця2) friend const Matrix operator*(const Matrix& left, const Matrix& right); //"*" (матриця2 = матриця1 * число) friend const Matrix operator*(const Matrix& left, int right); //перезавантаження виводу масиву на екран friend ostream& operator<<(ostream&, const Matrix&); //перезавантаження вводу масиву з клавіатури friend istream& operator>>(istream&, const Matrix&); }; //унарний "-" const Matrix operator-(const Matrix& right) { Matrix left(right.size); int* k = right.data; for(int i = 0; i < right.size*right.size; i++) *(left.data+i) = -*(k+i); return left; } //бінарний "-" (матриця3 = матриця1 - матриця2) const Matrix operator-(const Matrix& left, const Matrix& right) { Matrix result(left.size); int* k = left.data; int* m = right.data; for(int i = 0; i < left.size*left.size; i++) *(result.data+i) = *(k+i) - *(m+i); return result; } //бінарний "-" (матриця3 = матриця1 - число) const Matrix operator-(const Matrix& left, int right) { Matrix result(left.size); int* k = left.data; for(int i = 0; i < left.size*left.size; i++) *(result.data+i) = *(k+i) - right; return result; } //"*" (матриця3 = матриця1 * матриця2) const Matrix operator*(const Matrix& left, const Matrix& right) { Matrix result(left.size); int* k = left.data; int* m = right.data; for(int i = 0; i < left.size*left.size; i++) *(result.data+i) = (*(k+i)) * (*(m+i)); return result; } //"*" (матриця2 = матриця1 * число) const Matrix operator*(const Matrix& left, int right) { Matrix result(left.size); int* k = left.data; for(int i = 0; i < left.size*left.size; i++) *(result.data+i) = (*(k+i)) * right; return result; } //матриця1 += матриця2; Matrix& operator+=(Matrix& left, const Matrix& right) { int* m = right.data; for(int i = 0; i < left.size*left.size; i++) *(left.data+i) += *(m+i); return left; } //матриця1 += число; Matrix& operator+=(Matrix& left, int right) { for(int i = 0; i < left.size*left.size; i++) *(left.data+i) += right; return left; } //перезавантаження виводу масиву на екран ostream& operator<<(ostream& output, const Matrix& matr) { int* m = matr.data; for(int i = 0, k = 0; i < matr.size; i++) { for(int j = 0; j < matr.size; j++, k++) { output<<(*(m+k))<<"\t"; } output<<"\n"; } return output; } //перезавантаження вводу масиву з клавіатури istream& operator>>(istream& input, const Matrix& matr) { int* m = matr.data; for(int i = 0, k = 0; i < matr.size; i++) for(int j = 0; j < matr.size; j++, k++) { cout<<"["<<i+1<<"]["<<j+1<<"]: "; input>>(*(m+k)); } return input; } void main() { const int N = 2; //з початковою ініціалізацією Matrix a(-2,1,2,3,4); cout<<"a = {1,2,3,4}:\n"<<a; //без параметрів - по замовчуванню 2*2 Matrix b; cout<<"\nInput b:\n"; cin>>b; cout<<"\nb:\n"<<b; //з вказаним розміром, без ініціалізації Matrix c(N); c = -b; cout<<"\nc = -b\n"<<c; //копіюванням Matrix d(c); cout<<"\nMatrix d(c)\n"<<d; d = b - 5; cout<<"\nd = b - 5\n"<<d; b = d - a; cout<<"\nb = d - a\n"<<b; c = a * 2; cout<<"\nc = a * 2\n"<<c; a = b * c; cout<<"\na = b * c\n"<<a; a += 3; cout<<"\na += 3\n"<<a; a += c; cout<<"\na += c\n"<<a; _getch(); } 4. Результат виконання програми Запустимо програму на виконання (рис. 4.1). Введемо значення елементів вхідної матриці. Отримаємо результати виконання операцій над матрицями на дисплеї. / Рис. 4.1. Результат виконання програми ВИСНОВКИ На даній лабораторній роботі я навчився створювати класи, перезавантажувати оператори та функції класів, реалізовувати конструктори класів з параметрами та без. Працювати з дружніми функціями класу.
Антиботан аватар за замовчуванням

03.03.2014 11:36

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!