Advertisement
szmelu

zaj4

Nov 15th, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.59 KB | None | 0 0
  1. //Header.h
  2. #pragma once
  3. #include <iostream>
  4. #include <cstdlib>
  5. #include <cmath>
  6. #include <ctime>
  7. using namespace std;
  8. class Wielomian {
  9. friend void wypisz(Wielomian&);
  10. unsigned int stopien;
  11. double* wspolczynniki;
  12.  
  13.  
  14. public:
  15. Wielomian friend operator+(Wielomian&, Wielomian&);
  16. Wielomian friend operator-(Wielomian&, Wielomian&);
  17. Wielomian friend operator*(Wielomian&, int);
  18. Wielomian friend operator*(Wielomian&, Wielomian&);
  19. void setStopien(int);
  20. bool wspolczynnik(int, Wielomian &);
  21. bool wspolczynnik2(int, Wielomian &);
  22. friend istream& operator >> (istream &in, Wielomian &);
  23. friend ostream& operator<<(ostream &out, Wielomian &);
  24. Wielomian operator=(Wielomian);
  25. Wielomian();
  26. Wielomian(int);
  27. Wielomian(const Wielomian&);
  28. };
  29. //Wielomian.cpp
  30. #include <iostream>
  31. #include <cstdlib>
  32. #include <cmath>
  33. #include <ctime>
  34. #include "Header.h"
  35. using namespace std;
  36. void Wielomian::setStopien(int x)
  37. {
  38. stopien = x;
  39. wspolczynniki = new double[stopien];
  40. }
  41. bool Wielomian::wspolczynnik(int x,Wielomian &A)
  42. {
  43. int z = 0;
  44. for (int i = x-1; i >= 0; i--)
  45. {
  46. if (A.wspolczynniki[i] > 0)
  47. {
  48. return true;
  49. }
  50. }
  51. return false;
  52. }bool Wielomian::wspolczynnik2(int x, Wielomian &A)
  53. {
  54. int z = 0;
  55. for (int i = x - 1; i >= 0; i--)
  56. {
  57. if (A.wspolczynniki[i] != 0)
  58. {
  59. return true;
  60. }
  61. }
  62. return false;
  63. }
  64. Wielomian::Wielomian()
  65. {
  66. wspolczynniki = NULL;
  67. stopien = 0;
  68. }
  69. Wielomian::Wielomian(int x)
  70. {
  71. stopien = x + 1;
  72. wspolczynniki = new double[stopien];
  73. for (int i = 0; i < stopien; i++)
  74. {
  75. wspolczynniki[i] = rand() % 10;
  76. }
  77.  
  78. }
  79. Wielomian::Wielomian(const Wielomian &kWielomian)
  80. {
  81. stopien = kWielomian.stopien;
  82. wspolczynniki = new double[stopien];
  83. for (int i = 0; i < stopien; i++)
  84. {
  85. wspolczynniki[i] = kWielomian.wspolczynniki[i];
  86. }
  87.  
  88. }
  89. Wielomian Wielomian::operator=(Wielomian v)
  90. {
  91. this->stopien = v.stopien;
  92. this->wspolczynniki = new double[v.stopien];
  93. for (int i = 0; i < this->stopien; i++)
  94. {
  95. this->wspolczynniki[i] = v.wspolczynniki[i];
  96. }
  97. return *this;
  98. }
  99. Wielomian operator+(Wielomian& A, Wielomian& B)
  100. {
  101. Wielomian C;
  102. if (A.stopien >= B.stopien)
  103. {
  104. C.stopien = A.stopien;
  105. C.wspolczynniki = new double[C.stopien];
  106. for (int i = 0; i <= A.stopien; i++)
  107. {
  108. if (i <= B.stopien)
  109. C.wspolczynniki[i] = A.wspolczynniki[i] + B.wspolczynniki[i];
  110. else
  111. C.wspolczynniki[i] = A.wspolczynniki[i];
  112. }
  113. }
  114. else
  115. {
  116. C.stopien = B.stopien;
  117. C.wspolczynniki = new double[C.stopien];
  118. for (int i = 0; i <=B.stopien; i++)
  119. {
  120. if (i < A.stopien)
  121. C.wspolczynniki[i] = A.wspolczynniki[i] + B.wspolczynniki[i];
  122. else
  123. C.wspolczynniki[i] = B.wspolczynniki[i];
  124. }
  125. }
  126. return C;
  127. }
  128. Wielomian operator-(Wielomian& A, Wielomian& B)
  129. {
  130. Wielomian C;
  131. if (A.stopien >= B.stopien)
  132. {
  133. C.stopien = A.stopien;
  134. C.wspolczynniki = new double[C.stopien];
  135. for (int i = 0; i <= A.stopien; i++)
  136. {
  137. if (i <= B.stopien)
  138. C.wspolczynniki[i] = A.wspolczynniki[i] - B.wspolczynniki[i];
  139. else
  140. C.wspolczynniki[i] = A.wspolczynniki[i];
  141. }
  142. }
  143. else
  144. {
  145. C.stopien = B.stopien;
  146. C.wspolczynniki = new double[C.stopien];
  147. for (int i = 0; i <= B.stopien; i++)
  148. {
  149. if (i < A.stopien)
  150. C.wspolczynniki[i] = A.wspolczynniki[i] - B.wspolczynniki[i];
  151. else
  152. C.wspolczynniki[i] = 0 - B.wspolczynniki[i];
  153. }
  154. }
  155. return C;
  156. }
  157. Wielomian operator*(Wielomian&A, int x)
  158. {
  159. Wielomian C;
  160. C.stopien = A.stopien;
  161. C.wspolczynniki = new double[C.stopien];
  162. for (int i = 0; i < A.stopien; i++)
  163. C.wspolczynniki[i] = A.wspolczynniki[i] * x;
  164. return C;
  165. }
  166. Wielomian operator*(Wielomian &A, Wielomian &B)
  167. {
  168. Wielomian C;
  169. C.stopien = A.stopien + B.stopien;
  170. C.wspolczynniki = new double[C.stopien];
  171. for (int i = 0; i < C.stopien; i++)
  172. C.wspolczynniki[i] = 0;
  173. for (int i = 0; i < A.stopien; i++)
  174. {
  175. for (int j = 0; j < B.stopien; j++)
  176. {
  177. C.wspolczynniki[i+j] += A.wspolczynniki[i] * B.wspolczynniki[j];
  178. }
  179. }
  180. return C;
  181.  
  182. }
  183. ostream& operator<<(ostream &out, Wielomian &A)
  184. {
  185. for (int i = (A.stopien - 1); i >= 0; i--)
  186. {
  187. if (A.wspolczynniki[i] == 0)
  188. continue;
  189. if (A.wspolczynniki[i] == 1 && i!=0)
  190. {
  191. out << "x^" << i<<"+";
  192. continue;
  193. }
  194. if (i == 0)
  195. {
  196. out << A.wspolczynniki[i] << endl;
  197. break;
  198. }
  199. cout << A.wspolczynniki[i] << "x^" << i;
  200. if (A.wspolczynnik2(i, A) == false)
  201. {
  202. out << endl;
  203. break;
  204. }
  205. if (A.wspolczynnik(i, A) == true)
  206. out << "+";
  207. }
  208. return out;
  209. }
  210. istream& operator >> (istream &in, Wielomian &A)
  211. {
  212. cout << "Podaj wspolczynniki od najmniejszego stopnia wielomianu " << endl;
  213. for (int i = 0; i < A.stopien; i++)
  214. {
  215. in >> A.wspolczynniki[i];
  216. }
  217. return in;
  218. }
  219. //Source.cpp
  220. #include <iostream>
  221. #include <cstdlib>
  222. #include <cmath>
  223. #include <ctime>
  224. #include "Header.h"
  225. using namespace std;
  226. void wypisz(Wielomian& A)
  227. {
  228. for (int i = (A.stopien - 1); i >= 0; i--)
  229. {
  230. if (A.wspolczynniki[i] == 0)
  231. continue;
  232. if (A.wspolczynniki[i] == 1 && i != 0)
  233. {
  234. cout << "x^" << i << "+";
  235. continue;
  236. }
  237. if (i == 0)
  238. {
  239. cout << A.wspolczynniki[i] << endl;
  240. break;
  241. }
  242. cout << A.wspolczynniki[i] << "x^" << i;
  243. if (A.wspolczynnik2(i,A)==false)
  244. {
  245. cout << endl;
  246. break;
  247. }
  248. if (A.wspolczynnik(i,A)==true)
  249. cout << "+";
  250. }
  251. }
  252. int main()
  253. {
  254. Wielomian C, A, B;
  255. int a, b, x, y, z;
  256. while (1)
  257. {
  258. cout << "1.Stworz wielomian A i B" << endl;
  259. cout << "2.Dodawanie" << endl;
  260. cout << "3.Odejmowanie" << endl;
  261. cout << "4.Mnozenie wielomianow przez liczbe" << endl;
  262. cout << "5.Mnozenie wielomianow przez siebie" << endl;
  263. cout << "6.Wyswietl wielomiany" << endl;
  264. cout << "7.Zakoncz" << endl;
  265. cout << "Co chcesz zrobic?" << endl;
  266. cin >> x;
  267. switch (x)
  268. {
  269. case 1:
  270. cout << "Podaj stopien wielomianu A: ";
  271. cin >> a;
  272. A.setStopien(a);
  273. cin >> A;
  274. cout << "Podaj stopien wielomianu B: ";
  275. cin >> b;
  276. B.setStopien(b);
  277. cin >> B;
  278. break;
  279. case 2:
  280. C = A + B;
  281. cout << C;
  282. wypisz(C);
  283. break;
  284. case 3:
  285. C = A - B;
  286. cout << C;
  287. wypisz(C);
  288. break;
  289. case 4:
  290. cout << "Podaj liczbe: ";
  291. cin >> y;
  292. C = A*y;
  293. cout << C;
  294. wypisz(C);
  295. break;
  296. case 5:
  297. C = A*B;
  298. cout << C;
  299. wypisz(C);
  300. break;
  301. case 6:
  302. cout << A << B;
  303. wypisz(A);
  304. wypisz(B);
  305. break;
  306. case 7:
  307. exit(0);
  308. break;
  309. default:
  310. cout << "Error" << endl;
  311. break;
  312. }
  313. cout << "Zakonczyc dzialanie?" << endl;
  314. cout << "1.TAK 2.NIE" << endl;
  315. cin >> z;
  316. switch (z)
  317. {
  318. case 1:
  319. exit(0);
  320. break;
  321. case 2:
  322. break;
  323. default:
  324. cout << "Error" << endl;
  325. break;
  326. }
  327. }
  328. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement