Advertisement
Guest User

Untitled

a guest
May 27th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.60 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<math.h>
  3. #include<iostream>
  4. using namespace std;
  5.  
  6. struct Liczba_zespolona {
  7. float cz_rz;
  8. float cz_ur;
  9. };
  10.  
  11. void formatuj_liczbe_zesp(Liczba_zespolona l_zespolona) {
  12. if (l_zespolona.cz_ur == 0) {
  13. printf("%.3f \n", l_zespolona.cz_rz);
  14. }
  15. else if (l_zespolona.cz_ur > 0) {
  16. printf("%.3f + %.3fi \n", l_zespolona.cz_rz, l_zespolona.cz_ur);
  17. }
  18. else {
  19. printf("%.3f %.3fi \n", l_zespolona.cz_rz, l_zespolona.cz_ur);
  20. }
  21. }
  22.  
  23.  
  24.  
  25. class Dane {
  26.  
  27. protected:
  28. int a, b, c, d;
  29. Liczba_zespolona delta, pdelta;
  30. public:
  31. void wprowadz_dane() {
  32. printf("podaj a\n");
  33. scanf_s("%d", &a);
  34. printf("podaj b\n");
  35. scanf_s("%d", &b);
  36. printf("podaj c\n");
  37. scanf_s("%d", &c);
  38. printf("podaj d\n");
  39. scanf_s("%d", &d);
  40. }
  41.  
  42. Liczba_zespolona obl_delta() {
  43. delta.cz_rz = (b*b) - (4 * a*c);
  44. delta.cz_ur = -(4 * a*d);
  45. return delta;
  46. }
  47.  
  48. Liczba_zespolona oblicz_p_d_r() {
  49. pdelta.cz_rz = sqrt((sqrt((delta.cz_rz*delta.cz_rz) + (delta.cz_ur*delta.cz_ur)) + delta.cz_rz) / 2);
  50. return pdelta;
  51. }
  52.  
  53. Liczba_zespolona oblicz_p_d_u() {
  54. pdelta.cz_ur = sqrt((sqrt((delta.cz_rz*delta.cz_rz) + (delta.cz_ur*delta.cz_ur)) - delta.cz_rz) / 2);
  55. return pdelta;
  56. }
  57. };
  58.  
  59.  
  60. class Pierwiastki {
  61. protected:
  62. Liczba_zespolona pierwiastek[4];
  63. Liczba_zespolona x1, x2, x3, x4;
  64. public:
  65. Pierwiastki() {
  66. x1.cz_rz=0;
  67. x1.cz_ur=0;
  68. x2.cz_rz=0;
  69. x2.cz_ur=0;
  70. x3.cz_rz=0;
  71. x3.cz_ur=0;
  72. x4.cz_rz=0;
  73. x4.cz_ur=0;
  74. }
  75. };
  76.  
  77. class Bazowa : public Dane, public Pierwiastki {
  78.  
  79. public:
  80.  
  81. Bazowa() {
  82. wprowadz_dane();
  83. obl_delta();
  84. oblicz_p_d_r();
  85. oblicz_p_d_u();
  86. }
  87.  
  88. void formatuj_rownanie() {
  89. if (a > 0) {
  90. printf("%dxx", a);
  91. }
  92. else if (a<0) {
  93. printf("%dxx", a);
  94. }
  95. else {
  96. printf("");
  97. }
  98. if (b > 0 && a != 0) {
  99. printf("+%dx", b);
  100. }
  101. else if (b > 0 && a == 0) {
  102. printf("%dx", b);
  103. }
  104. else if (b<0) {
  105. printf("%dx", b);
  106. }
  107. else if (b == 0 && a != 0) {
  108. printf("");
  109. }
  110. else {
  111. printf("");
  112. }
  113. if (c > 0) {
  114. printf("+%d", c);
  115. }
  116. else if (c<0) {
  117. printf("%d", c);
  118. }
  119. else {
  120. printf("");
  121. }
  122. if (d > 0 && c == 0 && b == 0 && a == 0) {
  123. printf("%di=0", d);
  124. }
  125. else if (d > 0) {
  126. printf("+%di=0", d);
  127. }
  128. else if (d<0) {
  129. printf("%di=0", d);
  130. }
  131. else {
  132. printf("=0");
  133. }
  134. printf("\n");
  135. }
  136.  
  137. void oblicz_rownanie() {
  138. if (a != 0 && d == 0) {
  139. if (delta.cz_rz > 0) {
  140. x1.cz_rz = (-(float)b - pdelta.cz_rz) / (2 * a);
  141. x2.cz_rz = (-(float)b + pdelta.cz_rz) / (2 * a);
  142. }
  143. //1.2
  144. if (delta.cz_rz == 0) {
  145. x1.cz_rz = -(float)b / (2 * a);
  146. }
  147. //1.3
  148. if (delta.cz_rz < 0) {
  149. obl_delta();
  150. delta.cz_rz = -delta.cz_rz;
  151. oblicz_p_d_r();
  152. x1.cz_rz = (float)-b / (2 * a);
  153. x1.cz_ur = (float)-(pdelta.cz_rz / (2 * a));
  154. x2.cz_rz = x1.cz_rz;
  155. x2.cz_ur = -x1.cz_ur;
  156. obl_delta();
  157. }
  158. }
  159. //2.
  160. if (a == 0 && b != 0 && d == 0) {
  161. x1.cz_rz = -((float)c / b);
  162. }
  163. //3.
  164. if (a == 0 && b == 0 && (c != 0 || d != 0)) {
  165. printf("Rownanie sprzeczne \n");
  166. }
  167.  
  168. //4.
  169. if (a == 0 && b == 0 && c == 0 && d == 0) {
  170. printf("Rownanie tozsamosciowe \n");
  171. }
  172. //5.
  173. if (a == 0 && b != 0 && d != 0) {
  174. x1.cz_rz = -((float)c / b);
  175. x1.cz_ur = -((float)d / b);
  176. }
  177. //6.
  178. if (a != 0 && d != 0) {
  179. x1.cz_rz = (-b - pdelta.cz_rz) / (2 * a);
  180. x1.cz_ur = (-b - pdelta.cz_ur) / (2 * a);
  181. x2.cz_rz = (-b - pdelta.cz_rz) / (2 * a);
  182. x2.cz_ur = (-b + pdelta.cz_ur) / (2 * a);
  183. x3.cz_rz = (-b + pdelta.cz_rz) / (2 * a);
  184. x3.cz_ur = (-b + pdelta.cz_ur) / (2 * a);
  185. x4.cz_rz = (-b + pdelta.cz_rz) / (2 * a);
  186. x4.cz_ur = (-b - pdelta.cz_ur) / (2 * a);
  187. }
  188. }
  189.  
  190. void wyswietl_wynik() {
  191. if (a != 0 && d == 0) {
  192.  
  193. printf("Delta= %f \n", delta.cz_rz);
  194.  
  195. //1.1
  196. //deltar = 8.204060;
  197. if (delta.cz_rz > 0) {
  198. printf("x1dr = %f \n", x1.cz_rz);
  199. printf("x2r = %f \n", x2.cz_rz);
  200. printf("\n");
  201.  
  202. }
  203.  
  204. //1.2
  205. if (delta.cz_rz == 0) {
  206. printf("x1r = %f \n", x1.cz_rz);
  207. }
  208.  
  209. //1.3
  210. if (delta.cz_rz < 0) {
  211.  
  212. printf("x1 %f");
  213. formatuj_liczbe_zesp(x1);
  214. printf(" x2 ");
  215. formatuj_liczbe_zesp(x2);
  216. printf("\n");
  217. }
  218.  
  219. }
  220. //2.
  221. if (a == 0 && b != 0 && d == 0) {
  222. printf("x1r = %f \n", x1.cz_rz);
  223. }
  224.  
  225. //3.
  226. if (a == 0 && b == 0 && (c != 0 || d != 0)) {
  227. printf("Rownanie sprzeczne \n");
  228. }
  229.  
  230. //4.
  231. if (a == 0 && b == 0 && c == 0 && d == 0) {
  232. printf("Rownanie tozsamosciowe \n");
  233. }
  234.  
  235. //5.
  236. if (a == 0 && b != 0 && d != 0) {
  237. printf("x1");
  238. formatuj_liczbe_zesp(x1);
  239. }
  240.  
  241. //6.
  242. if (a != 0 && d != 0) {
  243. printf("Delta = %f ", delta.cz_rz);
  244. if (delta.cz_ur > 0)
  245. printf("+ ");
  246. printf("%fi\n", delta.cz_ur);
  247.  
  248. printf("x1 ");
  249. formatuj_liczbe_zesp(x1);
  250. printf("\n");
  251. printf("x2 ");
  252. formatuj_liczbe_zesp(x2);
  253. printf("\n");
  254. printf("x3 ");
  255. formatuj_liczbe_zesp(x3);
  256. printf("\n");
  257. printf("x4 ");
  258. formatuj_liczbe_zesp(x4);
  259. printf("\n");
  260. }
  261. }
  262.  
  263. Liczba_zespolona* getPierwiastki() {
  264. pierwiastek[0].cz_rz = x1.cz_rz;
  265. pierwiastek[0].cz_ur = x1.cz_ur;
  266. pierwiastek[1].cz_rz = x2.cz_rz;
  267. pierwiastek[1].cz_ur = x2.cz_ur;
  268. pierwiastek[2].cz_rz = x3.cz_rz;
  269. pierwiastek[2].cz_ur = x3.cz_ur;
  270. pierwiastek[3].cz_rz = x4.cz_rz;
  271. pierwiastek[3].cz_ur = x4.cz_ur;
  272. return pierwiastek;
  273. }
  274. };
  275.  
  276. class Operacje:public Dane {
  277. protected:
  278. Liczba_zespolona suma, roznica, iloczyn;
  279.  
  280. public:
  281. virtual void wykonaj_operacje(Liczba_zespolona delta) = 0;
  282. virtual void wyswietl_wynik() = 0;
  283. };
  284.  
  285. class Dodawanie : public Pierwiastki, public Operacje {
  286. public:
  287. Dodawanie(Liczba_zespolona *tab) {
  288. x1 = tab[0];
  289. x2 = tab[1];
  290. x3 = tab[2];
  291. x4 = tab[3];
  292. suma.cz_rz = 0.0;
  293. suma.cz_ur = 0.0;
  294. }
  295.  
  296. void wykonaj_operacje(Liczba_zespolona delta) {
  297. if (delta.cz_ur != 0) {
  298. suma.cz_rz = x1.cz_rz + x2.cz_rz + x3.cz_rz + x4.cz_rz;
  299. suma.cz_ur = x1.cz_ur + x2.cz_ur + x3.cz_ur + x4.cz_ur;
  300. }
  301. else if (delta.cz_rz > 0) {
  302. suma.cz_rz = x1.cz_rz + x2.cz_rz;
  303. }
  304. else if (delta.cz_rz < 0) {
  305. suma.cz_rz = x1.cz_rz + x2.cz_rz;
  306. suma.cz_ur = x1.cz_ur + x2.cz_ur;
  307. }
  308. }
  309.  
  310. void wyswietl_wynik() {
  311. if (a != 0 && d == 0) {
  312. //1.1
  313. if (delta.cz_rz > 0) {
  314. printf("sr = %f \n", suma.cz_rz);
  315. }
  316. //1.3
  317. if (delta.cz_rz < 0) {
  318. printf("suma ");
  319. formatuj_liczbe_zesp(suma);
  320. printf("\n");
  321. }
  322. }
  323. //6.
  324. if (a != 0 && d != 0) {
  325. printf("suma ");
  326. formatuj_liczbe_zesp(suma);
  327. printf("\n");
  328. }
  329. }
  330. };
  331.  
  332. class Odejmowanie :public Pierwiastki, public Operacje {
  333. public:
  334. Odejmowanie(Liczba_zespolona *tab) {
  335. x1 = tab[0];
  336. x2 = tab[1];
  337. x3 = tab[2];
  338. x4 = tab[3];
  339. roznica.cz_rz = 0.0;
  340. roznica.cz_ur = 0.0;
  341. }
  342.  
  343. void wykonaj_operacje(Liczba_zespolona delta) {
  344. if (delta.cz_ur != 0) {
  345. roznica.cz_rz = x1.cz_rz - x2.cz_rz - x3.cz_rz - x4.cz_rz;
  346. roznica.cz_ur = x1.cz_ur - x2.cz_ur - x3.cz_ur - x4.cz_ur;
  347. }
  348. else if (delta.cz_rz > 0) {
  349. roznica.cz_rz = x1.cz_rz - x2.cz_rz;
  350. }
  351. else if (delta.cz_rz < 0) {
  352. roznica.cz_rz = x1.cz_rz - x2.cz_rz;
  353. roznica.cz_ur = x1.cz_ur - x2.cz_ur;
  354. }
  355. }
  356. void wyswietl_wynik() {
  357. if (a != 0 && d == 0) {
  358. //1.1
  359. if (delta.cz_rz > 0) {
  360. printf("rr = %f \n", roznica.cz_rz);
  361. }
  362. //1.3
  363. if (delta.cz_rz < 0) {
  364. printf("roznica ");
  365. formatuj_liczbe_zesp(roznica);
  366. printf("\n");
  367. }
  368. }
  369. //6.
  370. if (a != 0 && d != 0) {
  371. printf("roznica ");
  372. formatuj_liczbe_zesp(roznica);
  373. printf("\n");
  374. }
  375. }
  376. };
  377.  
  378. class Mnozenie : public Pierwiastki, public Operacje {
  379. public:
  380. Mnozenie(Liczba_zespolona *tab) {
  381. x1 = tab[0];
  382. x2 = tab[1];
  383. x3 = tab[2];
  384. x4 = tab[3];
  385. iloczyn.cz_rz = 0.0;
  386. iloczyn.cz_ur = 0.0;
  387. }
  388.  
  389. void wykonaj_operacje(Liczba_zespolona delta) {
  390. if (delta.cz_ur != 0) {
  391. iloczyn.cz_rz = ((x1.cz_rz * x2.cz_rz - x1.cz_ur * x2.cz_ur) * (x3.cz_rz * x4.cz_rz - x3.cz_ur * x4.cz_ur)) - ((x1.cz_rz * x2.cz_ur + x2.cz_rz * x1.cz_ur) * (x3.cz_rz * x4.cz_ur + x4.cz_rz * x3.cz_ur));
  392. iloczyn.cz_ur = ((x1.cz_rz * x2.cz_rz - x1.cz_ur * x2.cz_ur) * (x3.cz_rz * x4.cz_ur + x4.cz_rz * x3.cz_ur)) + ((x1.cz_rz * x2.cz_ur + x2.cz_rz * x1.cz_ur) * (x3.cz_rz * x4.cz_rz - x3.cz_ur * x4.cz_ur));
  393. }
  394. else if (delta.cz_rz > 0) {
  395. iloczyn.cz_rz = x1.cz_rz * x2.cz_rz;
  396. }
  397. else if (delta.cz_rz < 0) {
  398. iloczyn.cz_rz = (x1.cz_rz * x2.cz_rz - x1.cz_ur * x2.cz_ur);
  399. iloczyn.cz_ur = (x1.cz_rz * x2.cz_ur + x2.cz_rz * x1.cz_ur);
  400. }
  401. }
  402.  
  403. void wyswietl_wynik() {
  404. if (a != 0 && d == 0) {
  405. //1.1
  406. if (delta.cz_rz > 0) {
  407. printf("ir = %f \n", iloczyn.cz_rz);
  408. }
  409. //1.3
  410. if (delta.cz_rz < 0) {
  411. printf("iloczyn ");
  412. formatuj_liczbe_zesp(iloczyn);
  413. printf("\n");
  414. }
  415. }
  416. //6.
  417. if (a != 0 && d != 0) {
  418. printf("iloczyn ");
  419. formatuj_liczbe_zesp(iloczyn);
  420. printf("\n");
  421. }
  422. }
  423.  
  424. };
  425.  
  426. int main() {
  427.  
  428. Bazowa obiekt;
  429. Operacje *operacje[3];
  430.  
  431.  
  432.  
  433. obiekt.oblicz_rownanie();
  434. obiekt.formatuj_rownanie();
  435. obiekt.wyswietl_wynik();
  436. //formatuj_liczbe_zesp(obiekt.obl_delta());
  437.  
  438. operacje[0] = new Dodawanie(obiekt.getPierwiastki());
  439. operacje[1] = new Odejmowanie(obiekt.getPierwiastki());
  440. operacje[2] = new Mnozenie(obiekt.getPierwiastki());
  441.  
  442. operacje[0]->wykonaj_operacje(obiekt.obl_delta());
  443. operacje[0]->wyswietl_wynik();
  444. operacje[1]->wykonaj_operacje(obiekt.obl_delta());
  445. operacje[1]->wyswietl_wynik();
  446. operacje[2]->wykonaj_operacje(obiekt.obl_delta());
  447. operacje[2]->wyswietl_wynik();
  448.  
  449.  
  450.  
  451.  
  452. system("pause");
  453. getchar();
  454. }
  455.  
  456. //jest klasa jest obiekt
  457. //na 4 dziedziczenie i polimorfizm
  458. // na 5 typy generyczne
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement