Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.205.56.209] |
|
Сообщ.
#1
,
|
|
|
Прошу помощи - нужно доделать код, который я попытался написать. Доделать его нужно согласно заданию: "Разработать класс «Полином» от одной переменной.
Полином задается степенью и массивом коэффициентов. Реализовать методы для вычисления значения полинома, сложения, вычитания и умножения полиномов. Перегрузить операции сложения, вычитания, умножения, присваивания для данного класса. Полином от одной переменной есть конечная формальная сумма вида: C0 + C1 * (x^1) + ... + Cn * (x^n)" Вот код, собственно: #include <iostream> #include <cmath> #include <algorithm> #include <vector> using namespace std; class Polynom { public: Polynom (vector <double>& koefs); double operator() (double x) const { double otvet = 0; for (int i = 0; i < koefs.size(); i++) { otvet += koefs[i] * pow(x, i); } return otvet; } Polynom operator+ (const Polynom& drugie) const { int razmer = max(koefs.size(), drugie.koefs.size()); vector <double> otvet(razmer, 0); for (int i = 0; i < razmer; i++) { if (i < koefs.size()) { otvet[i] += koefs[i]; } if (i < drugie.koefs.size()) { otvet[i] += drugie.koefs[i]; } } return Polynom(otvet); } Polynom operator- (const Polynom& drugie) const { int razmer = max(koefs.size(), drugie.koefs.size()); vector <double> otvet(razmer, 0); for (int i = 0; i < razmer; i++) { if (i < koefs.size()) { otvet[i] += koefs[i]; } if (i < drugie.koefs.size()) { otvet[i] -= drugie.koefs[i]; } } return Polynom(otvet); } Polynom operator* (const Polynom& drugie) const { int razmer = koefs.size() + drugie.koefs.size() - 1; vector <double> otvet(razmer, 0); for (int i = 0; i < koefs.size(); i++) { for (int j = 0; j < drugie.koefs.size(); j++) { otvet[i + j] += koefs[i] * drugie.koefs[j]; } } return Polynom(otvet); } Polynom& operator+= (const Polynom& drugie) { *this = *this + drugie; return *this; } Polynom& operator-= (const Polynom& drugie) { *this = *this - drugie; return *this; } Polynom& operator*= (const Polynom& drugie) { *this = *this * drugie; return *this; } friend std::ostream& operator<< (ostream& stream, const Polynom& p) { for (int i = p.koefs.size() - 1; i >= 0; i--) { if (p.koefs[i] == 0) continue; if (i != p.koefs.size() - 1) { if (p.koefs[i] >= 0) { stream << "+" << p.koefs[i]; } else { stream << "-" << abs(p.koefs[i]); } } else { stream << p.koefs[i]; } if (i > 0) { stream << "x^" << i; } } return stream; } private: vector <double> koefs; }; int main() { return 0; } Ошибок нет, то есть прога запускается. Если как-то можно, то дружественный оператор "<<" сделать без std да и вообще код в общем без std сделать (проще код читается так). А в int main надо добавить вывод суммы, разности, умножения полиномов и вывод значения полинома. Сделать оператор присваивания и тоже вывести через main. Я просто пробовал в main это всё записывать (выводы значений), но компилятор тогда ругается, поэтому не могу догнать, что нужно подправить, чтобы заданию код соответствовал. Помогите, пожалуйста, люди добрые. Буду очень благодарен))). |
Сообщ.
#2
,
|
|
|
Ошибка заключается в том, что в классе Polynom объявлен только конструктор, но нет деструктора.
Это может привести к утечке памяти, если объекты класса будут создаваться динамически. Чтобы исправить это, нужно добавить деструктор, который освободит память, выделенную под массив koefs: ~Polynom() { koefs.clear(); } |
Сообщ.
#3
,
|
|
|
MaIron, а что, разве вектор, не должен сам самостоятельно очищаться в этом случае?
|
Сообщ.
#4
,
|
|
|
Цитата Majestio @ MaIron, а что, разве вектор, не должен сам самостоятельно очищаться в этом случае? Вообще да. Прогнал |
Сообщ.
#5
,
|
|
|
Qraizer, я обычно "залипаю" на вопросы, которые понимаю, что могут быть практически-востребованы. Щетай - вклад в "общественное достояние". Ваще не жалко. А тут я сильно сомневаюсь в практичности, похоже "сферический конь в вакууме от очередного младшего лейтенанта педагогического состава". Не вижу ценности ни вопроса, ни материала. |
Сообщ.
#6
,
|
|
|
В бусте реализован полиноминальная арифметика
|
Сообщ.
#7
,
|
|
|
А какие ошибки?
|