Advertisement
Guest User

Untitled

a guest
Mar 30th, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.60 KB | None | 0 0
  1.  
  2. #include <iostream>
  3.  
  4.  
  5.  
  6.  
  7. class Wielomian
  8. {
  9. private:
  10. int n; // stopien wielomianu
  11. double *wsp; //wspolczynniki wielomianu
  12. public:
  13. Wielomian();
  14. Wielomian(int _n); // konstruktor
  15. Wielomian(const Wielomian& w); // konstruktor kopiujacy
  16. ~Wielomian(); // destruktor
  17. Wielomian& operator=(const Wielomian& _w); // operator przypisania
  18. friend Wielomian operator+ (const Wielomian& w1, const Wielomian& w2);
  19. friend std::istream& operator >> (std::istream &we, Wielomian &w);
  20. friend std::ostream& operator << (std::ostream &wy, Wielomian &w);
  21. friend Wielomian operator*(const Wielomian& w1,const Wielomian&w2);
  22. static int stopien_plus(const Wielomian &w1, const Wielomian &w2);
  23. };
  24. Wielomian::Wielomian()
  25. {
  26. n = 0;
  27. wsp = new double[1];
  28. }
  29. Wielomian::Wielomian(int _n) : n(_n) // konstruktor
  30. {
  31. n = _n+1;
  32. wsp = new double[n + 1];
  33. }
  34.  
  35. Wielomian::Wielomian (const Wielomian &w)
  36. {
  37. n=w.n;
  38. wsp = new double [n+1];
  39. for (int i=n; i>=0; i--)
  40. {
  41. wsp[i]=w.wsp[i];
  42. }
  43. }
  44.  
  45. Wielomian::~Wielomian() // destruktor
  46. {
  47. delete[] wsp;
  48. }
  49. int Wielomian::stopien_plus(const Wielomian &w1, const Wielomian &w2)
  50. {
  51. int st = std::max(w1.n, w2.n);
  52.  
  53. if (w1.n == w2.n)
  54. while (st >= 0 && (w1.wsp[st] + w2.wsp[st] == 0))
  55. st--;
  56. return st;
  57. }
  58. Wielomian& Wielomian::operator=(const Wielomian& w) // operator przypisania
  59. {
  60. n = w.n;
  61.  
  62. for (int i = 0; i <= n; i++)
  63. {
  64. wsp[i] = w.wsp[i];
  65. }
  66.  
  67. return *this;
  68. }
  69. // operator wejscia
  70. std::istream& operator >> (std::istream &we, Wielomian &w)
  71. {
  72. std::cout << std::endl << "Podaj " << w.n << " wspolczynnikow wielomianu zaczynajac od tego przy najwyzszym wykladniku" << std::endl;
  73. for (int i = 0; i<w.n; i++)
  74. {
  75. std::cout << "x^" << w.n - i - 1 << " : ";
  76. we >> w.wsp[i];
  77. }
  78. return we;
  79. }
  80. // operator wyjscia
  81. std::ostream& operator << (std::ostream &wy, Wielomian &w)
  82. {
  83. int i = 0;
  84. wy << std::endl << "Wielomian ma postac:" << std::endl;
  85. while (i<w.n)
  86. {
  87. if ((w.wsp[i]>0) && i != 0)
  88. wy << " + " << (w.wsp[i]) << "x^" << w.n - i - 1 << " ";
  89.  
  90. if ((((w.wsp) + i)>0) && i == 0)
  91. wy << (w.wsp[i]) << "x^" << w.n - i - 1 << " ";
  92.  
  93.  
  94. if ((w.wsp[i])<0)
  95. wy << w.wsp[i] << "x^" << w.n - i - 1 << " ";
  96.  
  97.  
  98. i++;
  99. }
  100. wy << std::endl;
  101. return wy;
  102. }
  103. Wielomian operator+(const Wielomian& w1, const Wielomian& w2)
  104. {
  105. int stp;
  106. stp=stopien_plus(w1,w2);
  107. int n;
  108. int i;
  109. Wielomian wynik(n);
  110. wynik.wsp = new double[wynik.n];
  111.  
  112. for (i = 0; i <= w1.n && i <= w2.n&& i <= stp;i++)
  113. wynik.wsp[i] = w1.wsp[i] + w2.wsp[i];
  114. if (w1.n > w2.n)
  115. for (;i <= w1.n&& i <= stp;i++)
  116. wynik.wsp[i] = w1.wsp[i];
  117. else if (w2.n > w1.n)
  118. for (;i <= w2.n&& i <= stp;i++)
  119. wynik.wsp[i] = w2.wsp[i];
  120.  
  121. return wynik;
  122. }
  123. Wielomian operator*(const Wielomian& w1, const Wielomian& w2)
  124. {
  125. Wielomian w(w1.n+w2.n);
  126.  
  127. for (int i=0; i<=w.n; i++)
  128. {
  129. w.wsp[i]=0;
  130. }
  131.  
  132. for (int i=0; i<=w1.n; i++)
  133. {
  134. for (int j=0; j<=w2.n; j++)
  135. {
  136. w.wsp[i+j]+= w1.wsp[i] * w2.wsp[j];
  137. }
  138. }
  139.  
  140. return w;
  141. }
  142. int main()
  143. {
  144. int n, k;
  145. Wielomian odej;
  146. std::cout<<"Podaj stopien pierwszego wielomianu"<<std::endl;
  147. std::cin>>n;
  148. Wielomian obiekt1(n);
  149. std::cin>>obiekt1;
  150.  
  151.  
  152. std::cout<<"Podaj stopien drugiego wielomianu"<<std::endl;
  153. std::cin>>k;
  154. Wielomian obiekt2(k);
  155. std::cin>>obiekt2;
  156.  
  157.  
  158. std::cout<<std::endl<<std::endl;
  159. std::cout<<obiekt1;
  160.  
  161.  
  162. std::cout<<std::endl<<std::endl;
  163. std::cout<<obiekt2;
  164. odej=obiekt1*obiekt2;
  165. std::cout<<odej;
  166.  
  167. return 0;
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement