Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
2
Добавлен:
03.07.2024
Размер:
17.81 Кб
Скачать

Федеральное государственное автономное образовательное учреждение высшего образования

«ОМСКИЙ ГОСУДАРСТВЕННЫЙ

ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

Кафедра Информатика и вычислительная техника

Лабораторная работа ООП №4

по дисциплине «Программирование»

на тему:

«ПОЛИМОРФИЗМ. ПЕРЕГРУЗКА ОПЕРАЦИЙ И ФУНКЦИЙ»

Выполнил ст.гр. ИВТ-234

Шкутова А.В.

Проверила

Дорошенко М.С

Омск 2024

Ввести класс для работы с объектом " полином ". Реализовать операции:

а) вычитание двух полиномов (операция -);

б) деление двух полиномов (операция /).

#include <iostream>

#include <vector>

using namespace std;

class Polynomial {

private:

vector<int> coefficients;

public:

Polynomial(vector<int> coeffs) : coefficients(coeffs) {} // Конструктор класса, принимает вектор коэффициентов и инициализирует поле coefficients

Polynomial operator-(const Polynomial& other) { // Перегрузка оператора '-' для класса Polynomial

vector<int> resultCoeffs(max(coefficients.size(), other.coefficients.size())); // Создание вектора для хранения результата вычитания

for (int i = 0; i < resultCoeffs.size(); i++) { // Цикл по всем элементам вектора коэффициентов

int coeff1 = i < coefficients.size() ? coefficients[i] : 0; // Получение i-го коэффициента из первого полинома

int coeff2 = i < other.coefficients.size() ? other.coefficients[i] : 0; // Получение i-го коэффициента из второго полинома

resultCoeffs[i] = coeff1 - coeff2; // Вычитание коэффициентов и запись результат в вектор

}

return Polynomial(resultCoeffs); // Возврат нового полинома с результатом вычитания

}

Polynomial operator/(const int divisor) { // Перегрузка оператора '/' для деления полинома на число

vector<int> resultCoeffs(coefficients.size()); // Создание вектора для хранения результата деления

for (int i = 0; i < resultCoeffs.size(); i++) { // Цикл по всем элементам вектора коэффициентов

resultCoeffs[i] = coefficients[i] / divisor; // Деление каждого коэффициента на divisor

}

return Polynomial(resultCoeffs); // Возврат нового полинома с результатом деления

}

Polynomial operator/(const Polynomial& other) { // Перегрузка оператора '/' для деления полинома на полином

vector<int> resultCoeffs(coefficients.size() - other.coefficients.size() + 1); // Создание вектора для хранения частного

while (coefficients.size() >= other.coefficients.size()) { // Пока степень текущего полинома не меньше степени делителя

int ratio = coefficients.back() / other.coefficients.back(); // Вычисление коэффициента для деления старших членов

resultCoeffs[coefficients.size() - other.coefficients.size()] = ratio; // Запись коэффициента в вектор результата

for (int i = 0; i < other.coefficients.size(); i++) { // Цикл по всем коэффициентам делителя

coefficients[coefficients.size() - i - 1] -= ratio * other.coefficients[other.coefficients.size() - i - 1]; // Вычитание произведения коэффициента деления из текущих коэффициентов

}

coefficients.pop_back(); // Уменьшение степени текущего полинома

}

return Polynomial(resultCoeffs); // Возврат нового полинома с результатом деления

}

void printf() { // Метод для вывода полинома на экран

for (int i = 0; i < coefficients.size(); i++) { // Цикл по всем коэффициентам полинома

cout << coefficients[i] << "x^" << i + 1 << " "; // Вывод коэффициента и степени

if (i < coefficients.size() - 1) { // Если это не последний член, вывод знака "+"

cout << "+ ";

}

}

cout << endl;

}

};

int main() {

setlocale(LC_ALL, "RUS");

Polynomial p1({ 1, 2, 3 });

Polynomial p2({ 2, 3, 4, 5 });

cout << "операция (-)" << endl;

Polynomial p3 = p1 - p2;

p3.printf();

cout << "операция (/) (деление одного полинома на другой)" << endl;

Polynomial p4 = p2 / p1;

p4.printf();

return 0;

}

Соседние файлы в папке лабы ооп