
Лабораторные работы / лабы ооп / ооп4
.docxФедеральное государственное автономное образовательное учреждение высшего образования
«ОМСКИЙ ГОСУДАРСТВЕННЫЙ
ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
Кафедра Информатика и вычислительная техника
Лабораторная работа ООП №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;
}