Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.25 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 & lewy, const Wielomian & prawy );
  19. Wielomian operator- (Wielomian & liczba);
  20. friend Wielomian operator*(const Wielomian& w1, const Wielomian& w2);
  21. friend std::istream& operator >> (std::istream &we, Wielomian &w);
  22. friend std::ostream& operator << (std::ostream &wy, Wielomian &w);
  23. void stopien();
  24.  
  25. };
  26. Wielomian::Wielomian()
  27. {
  28. n = 0;
  29. wsp = new double[1];
  30. *wsp=4;
  31. }
  32. Wielomian::Wielomian(int _n) : n(_n) // konstruktor
  33. {
  34. n = _n + 1;
  35. wsp = new double[n + 1];
  36. }
  37.  
  38. Wielomian::Wielomian (const Wielomian &w)
  39. {
  40. n=w.n;
  41. wsp = new double [n];
  42. memcpy(wsp, w.wsp, (n*sizeof(double)));
  43. }
  44.  
  45. Wielomian::~Wielomian() // destruktor
  46. {
  47. delete[] wsp;
  48. }
  49. Wielomian& Wielomian::operator=(const Wielomian& w) // operator przypisania
  50. {
  51. n = w.n;
  52.  
  53. for (int i = 0; i <= n; i++)
  54. {
  55. wsp[i] = w.wsp[i];
  56. }
  57.  
  58. return *this;
  59. }
  60.  
  61. // iloczyn 2 wielomianow
  62. Wielomian operator*(const Wielomian& w1, const Wielomian& w2)
  63. {
  64. Wielomian w(w1.n + w2.n);
  65.  
  66. for (int i = 0; i <= w.n; i++)
  67. {
  68. w.wsp[i] = 0;
  69. }
  70.  
  71. for (int i = 0; i <= w1.n; i++)
  72. {
  73. for (int j = 0; j <= w2.n; i++)
  74. {
  75. w.wsp[i + j] += w1.wsp[i] * w2.wsp[j];
  76. }
  77. }
  78.  
  79. return w;
  80. }
  81. // operator wejscia
  82. std::istream& operator >> (std::istream &we, Wielomian &w)
  83. {
  84. std::cout << std::endl << "Podaj " << w.n << " wspolczynnikow wielomianu zaczynajac od tego przy najwyzszym wykladniku" << std::endl;
  85. for (int i = 0; i<w.n; i++)
  86. {
  87. std::cout << "x^" << w.n - i - 1 << " : ";
  88. we >> *((w.wsp) + i);
  89. }
  90. return we;
  91. }
  92. // operator wyjscia
  93. std::ostream& operator << (std::ostream &wy, Wielomian &w)
  94. {
  95. int i = 0;
  96. wy << std::endl << "Wielomian ma postac:" << std::endl;
  97. while (i<w.n)
  98. {
  99. if (((*((w.wsp) + i))>0) && i != 0)
  100. wy << " + " << (*((w.wsp) + i)) << "x^" << w.n - i - 1 << " ";
  101.  
  102. if (((*((w.wsp) + i))>0) && i == 0)
  103. wy << (*((w.wsp) + i)) << "x^" << w.n - i - 1 << " ";
  104.  
  105.  
  106. if ((*((w.wsp) + i))<0)
  107. wy << (*((w.wsp) + i)) << "x^" << w.n - i - 1 << " ";
  108.  
  109.  
  110. i++;
  111. }
  112. wy << std::endl;
  113. return wy;
  114. }
  115. Wielomian operator+(const Wielomian & lewy, const Wielomian & prawy )
  116. {
  117. int l = lewy.n;
  118. int p = prawy.n;
  119. int stopien;
  120. double suma;
  121. if ( l > p )
  122. stopien = l;
  123. else
  124. stopien = p;
  125. Wielomian wynik;
  126. for ( int i=stopien; i >= 0; i-- )
  127. {
  128. suma = lewy.wsp[i] + prawy.wsp[i];
  129. if (suma!=0.0)
  130. wynik.wsp[i]=suma;
  131. }
  132.  
  133. return wynik;
  134. }
  135. Wielomian Wielomian::operator- (Wielomian & liczba)
  136. {
  137. int i=liczba.n;
  138. if(n>=liczba.n)
  139. {
  140. for(i=liczba.n; i>0; i--)
  141. {
  142. *(wsp+n - i)=(*(wsp+ n -i)) - (*((liczba.wsp)+liczba.n -i) );
  143.  
  144. }
  145.  
  146. }
  147. else
  148. {
  149. Wielomian temp(liczba.n); //pomocniczy obiekt, aby nie stracic danych
  150. for(int i=liczba.n; i>=0; i--)
  151. {
  152. if(i>n)
  153. {
  154. (*((temp.wsp)+liczba.n - i))=(*((liczba.wsp)+liczba.n -i) );
  155. }
  156. else
  157. {
  158. (*((temp.wsp)+liczba.n - i))=(*(wsp+ n -i)) - (*((liczba.wsp)+liczba.n -i) );
  159. }
  160. }
  161. delete [] wsp;
  162. n=liczba.n;
  163. wsp = new double [liczba.n];
  164. memcpy(wsp, temp.wsp, (liczba.n*sizeof(double)));
  165. }
  166.  
  167.  
  168. return *this;
  169. }
  170. int main()
  171. {
  172. int n, k;
  173. Wielomian *odej;
  174. odej= new Wielomian();
  175. std::cout<<"Podaj stopien pierwszego wielomianu"<<std::endl;
  176. std::cin>>n;
  177. Wielomian obiekt1(n);
  178. std::cin>>obiekt1;
  179.  
  180.  
  181. std::cout<<"Podaj stopien drugiego wielomianu"<<std::endl;
  182. std::cin>>k;
  183. Wielomian obiekt2(k);
  184. std::cin>>obiekt2;
  185.  
  186.  
  187. std::cout<<std::endl<<std::endl;
  188. std::cout<<obiekt1;
  189.  
  190.  
  191. std::cout<<std::endl<<std::endl;
  192. std::cout<<obiekt2;
  193. *odej=obiekt1+obiekt2;
  194. std::cout<<odej;
  195.  
  196.  
  197. return 0;
  198. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement