Advertisement
Dzham

huinya

Dec 29th, 2017
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. template <typename T>
  8. class Polynomial {
  9. private:
  10. vector<T> polynom;
  11. int size_p = 0;
  12. public:
  13. void delete_zeros() {
  14. vector<T> result = polynom;
  15. for (int i = size_p - 1; i > -1; i--) {
  16. if (result[i] == 0) {
  17. result.pop_back();
  18. size_p--;
  19. } else {
  20. i = -1;
  21. }
  22. }
  23. polynom = result;
  24. }
  25.  
  26. template<typename Iter = typename vector<T>::iterator>
  27. Polynomal(vector<T> pol) {
  28. Iter it;
  29. for (it = pol.begin(); it != pol.end(); it++) {
  30. polynom.push_back(*it);
  31. }
  32. size_p = pol.size();
  33. this->delete_zeros();
  34. }
  35.  
  36. Polynomal(T object) {
  37. polynom.push_back(object);
  38. this->size_p = 1;
  39. }
  40.  
  41. template<typename Iter = typename vector<T>::iterator>
  42. Polynomal(Iter begin, Iter end) {
  43. Iter it;
  44. size_p = 0;
  45. for (it = begin; it != end; it++) {
  46. polynom.push_back(*it);
  47. size_p++;
  48. }
  49. this->delete_zeros();
  50. }
  51.  
  52. vector<T> get_polynom() {
  53. return polynom;
  54. }
  55.  
  56. vector<T> get_size() {
  57. return size_p;
  58. }
  59.  
  60. vector<T> multiply(vector<T> A, vector<T> B) {
  61. int m = A.size();
  62. int n = B.size();
  63. vector<T> prod;
  64. for (int i = 0; i < m + n - 1; i++) {
  65. prod.push_back(0);
  66. }
  67. for (int i = 0; i< m; i++) {
  68. for (int j = 0; j < n; j++) {
  69. prod[i + j] += A[i] * B[j];
  70. }
  71. }
  72. return prod;
  73. }
  74.  
  75. bool operator == (Polynomal<T> pol) {
  76. return polynom == pol.get_polynom();
  77. }
  78.  
  79. bool operator != (Polynomal<T> pol) {
  80. return polynom == pol.get_polynom();
  81. }
  82.  
  83. void operator += (Polynomal<T> pol) {
  84. for (int i = 0; i < size_p; i++) {
  85. polynom[i] += pol.get_polynom[i];
  86. }
  87. *this.delete_zeros();
  88. }
  89.  
  90. void operator -= (Polynomal<T> pol) {
  91. for (int i = 0; i < size_p; i++) {
  92. polynom[i] -= pol.get_polynom[i];
  93. }
  94. *this.delete_zeros();
  95. }
  96.  
  97. void operator *= (Polynomal<T> pol) {
  98. size_p = size_p + pol.get_size();
  99. vector<T> result_coeff = multiply(polynom, pol.get_polynom());
  100. polynom = result_coeff;
  101. }
  102.  
  103. Polynomal<T> operator + (Polynomal<T> pol) {
  104. Polynomal<T> result = *this;
  105. for (int i = 0; i < size_p; i++) {
  106. result.get_polynom[i] += pol.get_polynom[i];
  107. }
  108. return result;
  109. }
  110.  
  111. Polynomal<T> operator - (Polynomal<T> pol) {
  112. Polynomal<T> result = *this;
  113. for (int i = 0; i < size_p; i++) {
  114. result.get_polynom[i] -= pol.get_polynom[i];
  115. }
  116. return result;
  117. }
  118.  
  119. Polynomal<T> operator * (Polynomal<T> pol) {
  120. Polynomal<T> result = *this;
  121. result *= pol;
  122. return result;
  123. }
  124.  
  125. };
  126.  
  127. int main() {
  128. vector<int> result = { 1, 2, 3, 4 };
  129. Polynomial<int> polynom(5);
  130.  
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement