Created
September 30, 2021 20:04
-
-
Save Izay0i/faa4c8d628aa666418fc802af80eb23d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <vector> | |
#include <cmath> | |
class Polynomial { | |
private: | |
int base, var; | |
std::vector<int> constants; | |
char signature; | |
public: | |
Polynomial(char sig = 'f', int base = 0, int var = 1) { | |
this->base = base; | |
this->var = var; | |
signature = sig; | |
constants.resize(base + 1); | |
} | |
~Polynomial() {} | |
float calc() { | |
float sum = 0; | |
for (int i = base, j = 0; i >= 0, j < base + 1; i--, j++) { | |
if (i > 0) { | |
sum += static_cast<float>(constants.at(j) * pow(var, i)); | |
continue; | |
} | |
sum += constants.at(base); | |
} | |
return sum; | |
} | |
friend std::istream &operator>>(std::istream &in, Polynomial &poly) { | |
for (auto i = 0; i < poly.constants.size(); i++) | |
in >> poly.constants.at(i); | |
return in; | |
} | |
friend std::ostream &operator<<(std::ostream &out, const Polynomial &poly) { | |
out << poly.signature << "(x)="; | |
for (int i = poly.base, j = 0; i >= 0, j < poly.base + 1; i--, j++) { | |
if (i > 1) { | |
out << poly.constants.at(j) << "x^" << i << "+"; | |
continue; | |
} | |
else if (i == 1) { | |
out << poly.constants.at(poly.base - 1) << "x+"; | |
continue; | |
} | |
out << poly.constants.at(poly.base); | |
} | |
out << '\n'; | |
return out; | |
} | |
Polynomial operator+(const Polynomial &poly) { | |
Polynomial res; | |
int size; | |
if (this->constants.size() > poly.constants.size()) { | |
size = static_cast<int>(this->constants.size()); | |
res.base = this->base; | |
res.var = this->var; | |
res.constants.at(0) = this->constants.at(0); | |
} | |
else if (this->constants.size() < poly.constants.size()) { | |
size = static_cast<int>(poly.constants.size()); | |
res.base = poly.base; | |
res.var = poly.var; | |
res.constants.at(0) = poly.constants.at(0); | |
} | |
else { | |
size = static_cast<int>(poly.constants.size()); | |
res.base = poly.base; | |
res.var = poly.var; | |
} | |
res.constants.resize(size); | |
if (size > poly.constants.size()) | |
for (int i = 1; i < size; i++) | |
res.constants.at(i) = this->constants.at(i) + poly.constants.at(i - 1); | |
else if (size > this->constants.size()) | |
for (int i = 1; i < size; i++) | |
res.constants.at(i) = this->constants.at(i - 1) + poly.constants.at(i); | |
else | |
for (int i = 0; i < size; i++) | |
res.constants.at(i) = this->constants.at(i) + poly.constants.at(i); | |
return res; | |
} | |
Polynomial operator-(const Polynomial &poly) { | |
Polynomial res; | |
int size; | |
if (this->constants.size() > poly.constants.size()) { | |
size = static_cast<int>(this->constants.size()); | |
res.base = this->base; | |
res.var = this->var; | |
res.constants.at(0) = this->constants.at(0); | |
} | |
else if (this->constants.size() < poly.constants.size()) { | |
size = static_cast<int>(poly.constants.size()); | |
res.base = poly.base; | |
res.var = poly.var; | |
res.constants.at(0) = poly.constants.at(0); | |
} | |
else { | |
size = static_cast<int>(poly.constants.size()); | |
res.base = poly.base; | |
res.var = poly.var; | |
} | |
res.constants.resize(size); | |
if (size > poly.constants.size()) | |
for (int i = 1; i < size; i++) | |
res.constants.at(i) = this->constants.at(i) - poly.constants.at(i - 1); | |
else if (size > this->constants.size()) | |
for (int i = 1; i < size; i++) | |
res.constants.at(i) = this->constants.at(i - 1) - poly.constants.at(i); | |
else | |
for (int i = 0; i < size; i++) | |
res.constants.at(i) = this->constants.at(i) - poly.constants.at(i); | |
return res; | |
} | |
void operator=(const Polynomial &res) { | |
this->base = res.base; | |
this->var = res.var; | |
this->constants.resize(res.constants.size()); | |
for (auto i = 0; i < res.constants.size(); i++) | |
this->constants.at(i) = res.constants.at(i); | |
} | |
}; | |
int main() { | |
Polynomial f('f', 3, 1), g('g', 2, 1), h('h'); | |
std::cout << "Nhap f(x):\n"; | |
std::cin >> f; | |
std::cout << "Nhap g(x):\n"; | |
std::cin >> g; | |
std::cout << f; | |
std::cout << g; | |
h = f + g; | |
std::cout << h; | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Nhap f(x):
3 4 5 1
Nhap g(x):
3 4 2
f(x)=3x^3+4x^2+5x+1
g(x)=3x^2+4x+2
h(x)=3x^3+7x^2+9x+3