Advertisement
Dzham

dsgsdgsd

Dec 30th, 2017
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.87 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <iterator>
  6.  
  7. using namespace std;
  8.  
  9. template <typename T>
  10. class Polynomial {
  11. private:
  12. vector<T> polynom;
  13. int size_p = 0;
  14. public:
  15. Polynomial(vector<T> pol) {
  16. this->polynom = pol;
  17. this->size_p = pol.size();
  18. this->delete_zeros();
  19. }
  20.  
  21. Polynomial(T object = T()) {
  22. polynom.push_back(object);
  23. this->size_p = 1;
  24. }
  25.  
  26. template<typename Iter = typename vector<T>::iterator>
  27. Polynomial(Iter begin, Iter end) {
  28. Iter it;
  29. size_p = 0;
  30. for (it = begin; it != end; it++) {
  31. polynom.push_back(*it);
  32. size_p++;
  33. }
  34. this->delete_zeros();
  35. }
  36.  
  37. void delete_zeros() {
  38. vector<T> result = polynom;
  39. for (int i = size_p - 1; i > 0; i--) {
  40. if (result[i] == T(0)) {
  41. result.pop_back();
  42. size_p--;
  43. } else {
  44. i = -1;
  45. }
  46. }
  47. polynom = result;
  48. }
  49.  
  50. vector<T> get_polynom() const {
  51. return polynom;
  52. }
  53.  
  54. int get_size() const {
  55. return size_p;
  56. }
  57.  
  58. vector<T> multiply(vector<T> A, vector<T> B) {
  59. int m = A.size();
  60. int n = B.size();
  61. vector<T> prod;
  62. for (int i = 0; i < m + n - 1; i++) {
  63. prod.push_back(T(0));
  64. }
  65. for (int i = 0; i< m; i++) {
  66. for (int j = 0; j < n; j++) {
  67. prod[i + j] += A[i] * B[j];
  68. }
  69. }
  70. return prod;
  71. }
  72.  
  73. bool operator == (Polynomial<T> pol) const {
  74. return polynom == pol.get_polynom();
  75. }
  76.  
  77. bool operator != (Polynomial<T> pol) const {
  78. return polynom != pol.get_polynom();
  79. }
  80.  
  81. void operator += (Polynomial<T> pol) {
  82. vector<T> preres;
  83. if (pol.get_size() >= this->get_size()) {
  84. preres = pol.get_polynom();
  85. for (int i = 0; i < size_p; i++) {
  86. preres[i] += this->get_polynom()[i];
  87. }
  88. } else {
  89. preres = this->get_polynom();
  90. for (int i = 0; i < pol.get_size(); i++) {
  91. preres[i] += pol.get_polynom()[i];
  92. }
  93. }
  94. Polynomial<T> result(preres);
  95. this->polynom = result.get_polynom();
  96. this->size_p = result.get_size();
  97. }
  98.  
  99. void operator += (T pol) {
  100. for (int i = 0; i < size_p; i++) {
  101. polynom[i] += pol;
  102. }
  103. this->delete_zeros();
  104. }
  105.  
  106. void operator -= (Polynomial<T> pol) {
  107. vector<T> preres;
  108. if (pol.get_size() >= this->get_size()) {
  109. preres = pol.get_polynom();
  110. for (int i = 0; i < size_p; i++) {
  111. preres[i] = this->get_polynom()[i] - preres[i];
  112. }
  113. } else {
  114. preres = this->get_polynom();
  115. for (int i = 0; i < pol.get_size(); i++) {
  116. preres[i] -= pol.get_polynom()[i];
  117. }
  118. }
  119. Polynomial<T> result(preres);
  120. result.delete_zeros();
  121. this->polynom = result.get_polynom();
  122. this->size_p = result.get_size();
  123. }
  124.  
  125. void operator -= (T pol) {
  126. for (int i = 0; i < size_p; i++) {
  127. polynom[i] -= pol;
  128. }
  129. this->delete_zeros();
  130. }
  131.  
  132. /*void operator *= (Polynomial<T> pol) {
  133. size_p = size_p + pol.get_size();
  134. vector<T> result_coeff = multiply(polynom, pol.get_polynom());
  135. polynom = result_coeff;
  136. size_p = result_coeff.size();
  137. this->delete_zeros();
  138. }*/
  139.  
  140. /*void operator *= (T pol) {
  141. for (int i = 0; i < size_p; i++) {
  142. polynom[i] *= pol;
  143. }
  144. this->delete_zeros();
  145. }*/
  146.  
  147. Polynomial<T> operator + (Polynomial<T> pol) const {
  148. Polynomial<T> result = *this;
  149. result += pol;
  150. return result;
  151. }
  152.  
  153. Polynomial<T> operator + (T pol) const {
  154. vector<T> preres = this->get_polynom();
  155. for (int i = 0; i < size_p; i++) {
  156. preres[i] += pol;
  157. }
  158. Polynomial<T> result(preres);
  159. return result;
  160. }
  161.  
  162. Polynomial<T> operator - (Polynomial<T> pol) const {
  163. Polynomial<T> result = *this;
  164. result -= pol;
  165. return result;
  166. }
  167.  
  168. Polynomial<T> operator - (T pol) const {
  169. vector<T> preres = this->get_polynom();
  170. for (int i = 0; i < size_p; i++) {
  171. preres[i] -= pol;
  172. }
  173. Polynomial<T> result(preres);
  174. return result;
  175. }
  176.  
  177. /*Polynomial<T> operator * (Polynomial<T> pol) const {
  178. vector<T> preres = this->get_polynom();
  179. Polynomial<T> result(preres);
  180. result *= pol;
  181. return result;
  182. }*/
  183.  
  184. /*Polynomial<T> operator * (T pol) const {
  185. vector<T> preres = this->get_polynom();
  186. for (int i = 0; i < size_p; i++) {
  187. preres[i] *= pol;
  188. }
  189. Polynomial<T> result(preres);
  190. return result;
  191. }*/
  192.  
  193. T operator [](int id) const {
  194. if (id >= size_p) {
  195. return T(0);
  196. } else {
  197. return polynom[id];
  198. }
  199. }
  200.  
  201. /*T operator ()(T id) const {
  202. if (id == T(0)) {
  203. return polynom[0];
  204. } else {
  205. T x = T(1);
  206. T result = T(0);
  207. for (int i = 0; i < size_p; i++) {
  208. result += x * polynom[i];
  209. x *= id;
  210. }
  211. return result;
  212. }
  213. }*/
  214.  
  215. int Degree() const {
  216. if (size_p == 1 && polynom[0] == 0) {
  217. return -1;
  218. } else {
  219. return size_p - 1;
  220. }
  221. }
  222.  
  223. template<typename Iter = typename vector<T>::const_iterator>
  224. Iter begin() const {
  225. return polynom.begin();
  226. }
  227.  
  228. template<typename Iter = typename vector<T>::const_iterator>
  229. Iter end() const {
  230. return polynom.end();
  231. }
  232.  
  233. };
  234.  
  235. template <typename T>
  236. Polynomial<T> operator * (T t, Polynomial<T> pol) {
  237. return pol * t;
  238. }
  239.  
  240. template <typename T>
  241. Polynomial<T> operator - (T t, Polynomial<T> pol) {
  242. return pol - t;
  243. }
  244.  
  245. template <typename T>
  246. Polynomial<T> operator + (T t, Polynomial<T> pol) {
  247. return pol + t;
  248. }
  249.  
  250. class int2 {
  251. private:
  252. int int1;
  253. public:
  254. int2(int i) {
  255. this->int1 = i;
  256. }
  257.  
  258. int2() {
  259. this->int1 = 1;
  260. }
  261.  
  262. bool operator == (const int2& i) const {
  263. return int1 == i.get();
  264. }
  265.  
  266. bool operator != (const int2& i) const {
  267. return int1 != i.get();
  268. }
  269.  
  270. int get() const {
  271. return this->int1;
  272. }
  273.  
  274. int2 operator + (int2 i1) const {
  275. int res = this->int1 + i1.get();
  276. return int2(res);
  277. }
  278.  
  279. void operator += (int2 i1) {
  280. int1 += i1.get();
  281. }
  282.  
  283. int2 operator - (int2 i1) const {
  284. int res = this->int1 - i1.get();
  285. return int2(res);
  286. }
  287.  
  288. void operator -= (int2 i1) {
  289. int1 -= i1.get();
  290. }
  291.  
  292. int2 operator * (int2 i1) const {
  293. int res = this->int1 * i1.get();
  294. return int2(res);
  295. }
  296.  
  297. void operator *= (int2 i1) {
  298. int1 *= i1.get();
  299. }
  300.  
  301. operator int() {
  302. return this->int1;
  303. }
  304.  
  305.  
  306. };
  307.  
  308. void coutVector(vector<int2> re) {
  309. for (int2 i : re) {
  310. cout << i.get() << " ";
  311. }
  312. cout << endl;
  313. }
  314.  
  315. int main() {
  316. vector<int2> res = { int2(1), int2(1), int2(1), int2(1) };
  317. vector<int2> res2 = { int2(2), int2(3), int2(4), int2(5) };
  318. Polynomial<int2> p(res);
  319. Polynomial<int2> p1(res2);
  320. coutVector((p - p1).get_polynom());
  321. Polynomial<int2> p3(res.begin() + 1, res.end());
  322. coutVector(p3.get_polynom());
  323. /*coutVector((p * p1).get_polynom());
  324. coutVector((p * int2()).get_polynom());
  325. cout << p1(int2(0));*/
  326. /*vector<int> result = { 1, 2, 3, 4 };
  327. Polynomial<int> polynom(result);
  328. vector<int> result2 = { 3, 4, 5, 6 };
  329. Polynomial<int> polynom2(result2);
  330. vector<int> r = (polynom * polynom2).get_polynom();
  331. coutVector(r);
  332. vector<int> r1 = (polynom + polynom2).get_polynom();
  333. coutVector(r1);
  334. vector<int> r2 = (polynom - polynom2).get_polynom();
  335. coutVector(r2);
  336. polynom += polynom2;
  337. coutVector(polynom.get_polynom());
  338. polynom -= polynom2;
  339. coutVector(polynom.get_polynom());
  340. polynom *= polynom2;
  341. coutVector(polynom.get_polynom());
  342. polynom += 1;
  343. coutVector(polynom.get_polynom());
  344. polynom -= 1;
  345. coutVector(polynom.get_polynom());
  346. polynom *= 2;
  347. coutVector(polynom.get_polynom());
  348. coutVector((polynom + 2).get_polynom());
  349. coutVector((polynom - 2).get_polynom());
  350. coutVector((polynom * 2).get_polynom());
  351. coutVector((2 + polynom).get_polynom());
  352. coutVector((2 - polynom).get_polynom());
  353. coutVector((2 * polynom).get_polynom());
  354. cout << (polynom != polynom2);*/
  355. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement