Полиномы
Алиас: Полиномы.
Задание
Написать программу ввода и оперирования полиномами, состоящими из термов. Для этого разработать классы Term и Polynomial, описание которых представлено ниже.
В работе запрещено использование контейнеров STL (vector, list и др.).
В данной работе можно использовать самостоятельно разработанный вектор из предыдущей работы. Перед этим настоятельно рекомендуется изучить статью о линковке шаблонного класса и его специализации.
Ввод полинома
- Термы полинома могут вводиться в любом порядке.
- Во вводимом терме может присутствовать отрицательные коэффициенты, например,
-1. - Терм (член полинома одного порядка) может складываться с другим термом. Например:
3x^2 – x^2,-3x^2 + x^2. - Пробелы при вводе могут появляться где угодно.
Обратите внимание, что по заданию вы должны уметь работать со строками такого вида:
3x^2 - x^2 - 3x^2 + x ^2 + 5x^5 - 4x^3 +x^2 - 7
Пробелы расставлены в случайном порядке.
Результат разбора такой строки - полином. Этот разбор вы можете сделать в перегрузке ввода у полинома. В рамках данной перегрузки строку можно сначала разобрать на термы, потом термы сложить, и получить полином. При сложе нии вы можете вызывать перегрузку сложения полинома с термом.
Для разбора на термы можно использовать самостоятельно разработанный вектор из предыдущей работы или динамический массив.
В работе запрещено осуществлять парсинг конкретного терма в рамках полинома. Парсинг конкретного терма необходимо делегировать классу Term. Иными словами, полином должен только детектировать термы в строке.
Класс Term
- Целые члены-данные для коэффициента и показателя степени.
- Три конструктора (можно обойтись одним):
- Без параметров для представления .
- С одним параметром, например
3, для представления . - С двумя параметрами, например
3и2, для представления .
- Перегруженный
operator+, который получает 2 терма как параметры и возвращает терм-результат. - Перегруженную операцию
istream>>для поддержки вводна полинома в виде, определенном выше в разделе "Ввод полинома". - Перегруженную операцию
ostream<<для печати терма в виде:- как
3, - как
3x, - как
x^3, - как
-3x^2.
- как
- Дружественный класс
Polynomial.
Продемонстрируйте работу с классом Term в функции main() отдельно от Polynomial.
Класс Polynomial
- Члены-данные
poly(динамический массив или сортированный список), и целоеdegree(степень) - Три конструктора:
- Без параметров для представления полинома .
- С одним целым параметром, например
3, для представления полинома . - С одним параметром-термом, например
Term(3, 2), для представления полинома .
- Конструктор копирования и операторы присваивания
=,+=,*=. - Скрытый член
order_для указания с пособа хранения термов:- по возрастанию степени;
- по убыванию степени.
- Друзья класса:
operator*,operator+, каждый из которых получает 2 полинома как параметры и возвращает полином-результат. - Перегруженную операцию
istream>>для ввода полинома в виде, определенном выше в разделе "Ввод полинома". - Друг класса
ostream<<для печати полинома в виде:5x^5 - 4x^3 +x^2 - 7.
Продемонстрируйте работу с классом Polynomial в функции main().
Класс Term и Polynomial должны быть упакованы в отдельную статическую библиотеку.
Режимы выполнения программы
В демонстрационном режиме вы самостоятельно придумываете примеры для демонстрации выполнения методов работы с полиномами. В интерактивном режиме данные примеры вводятся вводятся с клавиатуры пользователем. В интерактивном режиме меню можно не делать. Достаточно повторить демо-режим, только вместо заранее заданных значений нужно использовать данные консольного ввода.