Advertisement
Guest User

Untitled

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