Skip to content

Instantly share code, notes, and snippets.

@Izay0i
Created September 30, 2021 20:04
Show Gist options
  • Save Izay0i/faa4c8d628aa666418fc802af80eb23d to your computer and use it in GitHub Desktop.
Save Izay0i/faa4c8d628aa666418fc802af80eb23d to your computer and use it in GitHub Desktop.
#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;
}
@Izay0i
Copy link
Author

Izay0i commented Sep 30, 2021

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment