Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*1. Конструктор
- 2. Конструктор копирования
- 3. Деструктор
- 4. Перегруженные арифм-ие операции
- 5. Перегруженные операции сравнения
- 6. Перегруженный оператор присваивания
- 7. Перегруженные операции << и >>
- Условие задачи: №3. n-мерный вектор. Вектор предcтавляется динамическим массивом размерности n
- Субочев Кирилл, 2 курс, 4 группа*/
- #include <Windows.h>
- #include <iostream>
- #include <conio.h>
- using namespace std;
- class Vect //создаю класс вектора
- {
- private:
- int* arr; //имя массива
- int n; //размерность массива
- void updateSize()
- {
- if (n == 0)
- {
- arr = new int[n + 1];
- }
- else
- {
- int* temp = new int[n + 1];
- for (size_t i = 0; i < n; i++)
- temp[i] = arr[i];
- temp[n] = 0;
- delete[] arr;
- arr = temp;
- }
- n++;
- }
- public:
- Vect()
- {
- n = 0;
- arr = nullptr;
- }
- Vect(const int& size) //конструктор
- {
- n = size; //говорю, что n равно size
- arr = new int[n]; //создаю массив размерности size
- for (size_t i = 0; i < n; i++)
- arr[i] = 0;
- };
- ~Vect() //деструктор
- {
- delete[] arr; //очистка памяти
- }
- Vect(const Vect& obj) //конструктор копирования
- {
- //здесь я копирую данные из одного объекта в другой для последующих операций
- n = obj.n;
- arr = new int[obj.n];
- for (int i = 0; i < obj.n; i++)
- {
- arr[i] = obj.arr[i];
- }
- }
- void pushBack(const int& value)
- {
- updateSize();
- arr[n - 1] = value;
- }
- Vect operator+(const Vect& obj) //перегрузка сложения
- {
- if (obj.n > n)
- {
- Vect A(obj.n); //создаю вектор размерности n
- for (int i = 0; i < n; i++)
- {
- A.arr[i] = arr[i] + obj.arr[i]; //записываю в этот вектор сумму
- }
- for (size_t i = n; i < obj.n; i++)
- A.arr[i] = obj.arr[i];
- return A;
- }
- else
- {
- Vect A(n); //создаю вектор размерности n
- for (int i = 0; i < obj.n; i++)
- {
- A.arr[i] = arr[i] + obj.arr[i]; //записываю в этот вектор сумму
- }
- for (size_t i = obj.n; i < n; i++)
- A.arr[i] = arr[i];
- return A;
- }
- }
- Vect operator-(const Vect obj) //перегрузка вычитания
- {
- if (obj.n > n)
- {
- Vect A(obj.n); //создаю вектор размерности n
- for (int i = 0; i < n; i++)
- {
- A.arr[i] = arr[i] - obj.arr[i]; //записываю в этот вектор сумму
- }
- for (size_t i = n; i < obj.n; i++)
- A.arr[i] = -obj.arr[i];
- return A;
- }
- else
- {
- Vect A(n); //создаю вектор размерности n
- for (int i = 0; i < obj.n; i++)
- {
- A.arr[i] = arr[i] - obj.arr[i]; //записываю в этот вектор сумму
- }
- for (size_t i = obj.n; i < n; i++)
- A.arr[i] = -arr[i];
- return A;
- }
- }
- Vect operator*(int obj) //перегрузка умножения
- {
- Vect A(n); //создаю вектор размерности n
- for (int i = 0; i < n; i++)
- {
- A.arr[i] = arr[i] * obj; //записываю в этот вектор произведение
- }
- return A; //возвращаю результат
- }
- Vect operator=(const Vect& obj) //перегрузка присваивания
- {
- for (int i = 0; i < n; i++)
- {
- arr[i] = obj.arr[i];
- }
- for (size_t i = n; i < obj.n; i++)
- pushBack(obj.arr[i]);
- return *this;
- }
- bool comparemore(const Vect& obj) //перегрузка знака больше
- {
- int length1 = 0, length2 = 0; //длины векторов
- for (int i = 0; i < n; i++)
- {
- length1 += arr[i] * arr[i]; //возвожу в квадрат все элементы первого вектора
- }
- length1 = sqrt(length1); //извлекаю корень и получаю результат
- for (int i = 0; i < n; i++)
- {
- length2 += obj.arr[i] * obj.arr[i]; //возвожу в квадрат все элементы второго вектора
- }
- length2 = sqrt(length2); //извлекаю корень и получаю результат
- return length1 > length2; //возвращаю результат и говорю, что первый больше второго
- }
- bool compareless(const Vect& obj) //перегрузка знака меньше
- {
- int length1 = 0, length2 = 0; //длины векторов
- for (int i = 0; i < n; i++)
- {
- length1 += arr[i] * arr[i]; //возвожу в квадрат все элементы первого вектора
- }
- length1 = sqrt(length1); //извлекаю корень и получаю результат
- for (int i = 0; i < n; i++)
- {
- length2 += obj.arr[i] * obj.arr[i]; //возвожу в квадрат все элементы второго вектора
- }
- length2 = sqrt(length2); //извлекаю корень и получаю результат
- return length1 < length2; //возвращаю результат и говорю, что первый меньше второго
- }
- bool operator==(const Vect& obj) //перегрузка равенства
- {
- int length1 = 0, length2 = 0; //длины векторов
- for (int i = 0; i < n; i++)
- {
- length1 += arr[i] * arr[i]; //возвожу в квадрат все элементы первого вектора
- }
- length1 = sqrt(length1); //извлекаю корень и получаю результат
- for (int i = 0; i < n; i++)
- {
- length2 += obj.arr[i] * obj.arr[i]; //возвожу в квадрат все элементы второго вектора
- }
- length2 = sqrt(length2); //извлекаю корень и получаю результат
- return length1 == length2; //возвращаю результат и говорю, что векторы равны
- }
- ostream& operator<<(ostream& out) //перегрузка вывода
- {
- cout << "Ваш вектор:\t";
- for (int i = 0; i < n; i++)
- {
- out << arr[i] << "\t"; //вывожу элементы вектора
- }
- cout << endl;
- return out; //возвращаем поток
- }
- friend ostream& operator<<(ostream& out, const Vect& obj) //дружественная функция для вывода
- {
- cout << "Ваш вектор:\t";
- for (int i = 0; i < obj.n; i++)
- {
- out << obj.arr[i] << "\t"; //чтобы нормально выводить (cout << c, а не c << cout)
- }
- cout << endl;
- return out; //возвращаем поток
- }
- istream& operator>>(istream& in) //перегрзука ввода
- {
- for (int i = 0; i < n; i++)
- {
- in >> arr[i]; //ввожу элементы вектора
- }
- return in; //возвращаем поток
- }
- friend istream& operator>>(istream& in, const Vect& obj) //дружественная функция для ввода
- {
- for (int i = 0; i < obj.n; i++)
- {
- in >> obj.arr[i]; //чтобы нормально вводить (cin << c, а не c << cin)
- }
- return in; //возвращаем поток
- }
- };
- int main()
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- //Vect a(4);
- //bool isRunning = true;
- //while (isRunning)
- //{
- // system("cls");
- // cout << "1) Вывести вектор" << endl;
- // cout << "2) Добавить элемент в вектор" << endl;
- // cout << "3) Выход" << endl;
- // char symbol;
- // if (!_kbhit())
- // {
- // symbol = _getch();
- // switch (symbol)
- // {
- // case '1':
- // {
- // system("cls");
- // cout << a;
- // _getch();
- // }break;
- // case '2':
- // {
- // system("cls");
- // int temp;
- // cout << "Введите число, которое хотите добавить = ";
- // cin >> temp;
- // a.pushBack(temp);
- // _getch();
- // }break;
- // case '3':
- // {
- // system("cls");
- // cout << "Работа программы завершена";
- // return 0;
- // }
- // }
- // }
- //}
- int n1, n2, choose, choose1; //n - размер, choose - выбор операции
- char end; //переменная для окончания цикла do while
- cout << "Размер 1'го: ";
- cin >> n1; //ввожу размер
- Vect a(n1); //создаю первый вектор
- cout << "Введите первый вектор: ";
- cin >> a; //ввожу вектор
- cout << "Размер 2'го: ";
- cin >> n2; //ввожу размер
- Vect b(n2); //создаю второй вектор
- cout << "Введите второй вектор: ";
- cin >> b; //ввожу вектор
- cout << a; //вывожу первый вектор
- cout << b; //вывожу второй вектор
- do //цикл do while, чтобы много раз выбирать операции
- {
- cout << "1. Сложение векторов \n";
- cout << "2. Вычитание векторов \n";
- cout << "3. Умножение векторов \n";
- cout << "4. Сравнение векторов \n";
- cout << "Ваш выбор: ";
- cin >> choose; //ввожу номер операции
- Vect c; //создаю третий вектор
- switch (choose)
- {
- case 1: //сложение
- c = a + b; //записываю сумму в вектор с
- cout << endl;
- cout << c; //вывожу вектор с
- break;
- case 2: //вычитание
- c = a - b; //записываю разность в вектор с
- cout << endl;
- cout << c; //вывожу вектор с
- break;
- case 3: //умножение
- {
- int d;
- cout << "Введите число: ";
- cin >> d;
- cout << "Выберите вектор: ";
- cin >> choose1;
- switch (choose1)
- {
- case 1:
- {
- c = a * d; //записываю произведение в вектор с
- cout << endl;
- cout << c; //вывожу вектор с
- }
- break;
- case 2:
- {
- c = b * d; //записываю произведение в вектор с
- cout << endl;
- cout << c; //вывожу вектор с
- }
- break;
- }
- }
- break;
- case 4: //сравнение
- if (a.comparemore(b)) //если первый вектор больше второго
- cout << "Первый вектор больше\n";
- if (a.compareless(b)) //если второй вектор больше первого
- cout << "Второй вектор больше\n";
- if (a == b) //если векторы равны
- cout << "Векторы равны\n";
- break;
- default: //если введено неверное значение (<4 и >0)
- cout << "Неверно выбрана операция\n";
- break;
- }
- cout << "\nНажмите Q чтобы выйти" << endl;
- end = _getch();
- } while (end != 'q' && end != 'Q' && end != 'Й' && end != 'й'); //выход из цикла do while
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement