Advertisement
czlowiekzgon

Untitled

May 5th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.15 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. /* run this program using the console pauser or add your own getch, system("pause") or input loop */
  5. void wyswietl_row(int *tab){
  6.  
  7. if(tab[0] == 0){
  8. if(tab[1] > 0){
  9. if(tab[2] == 0){
  10. printf("%dxx = 0\n",tab[1] );
  11. }else if(tab[2] > 0){
  12. printf("%dxx + %d = 0\n",tab[1],tab[2] );
  13. }else if(tab[2] < 0){
  14. printf("%dxx + (%d) = 0\n",tab[1],tab[2] );
  15. }
  16.  
  17. }else if(tab[1] < 0){
  18. if(tab[2] == 0){
  19. printf("%dxx = 0\n",tab[1] );
  20. }else if(tab[2] > 0){
  21. printf("%dxx + %d = 0\n",tab[1],tab[2] );
  22. }else if(tab[2] < 0){
  23. printf("%dxx + (%d) = 0\n",tab[1],tab[2] );
  24. }
  25. }else if(tab[1] == 0){
  26. if(tab[2] != 0){
  27.  
  28. printf("Rownanie sprzeczne \n");
  29. exit(0);
  30. }else{
  31. printf("rownanie tozsamosciowe \n" );
  32. exit(0);
  33. }
  34. }
  35. }else{
  36. if(tab[1] > 0){
  37. if(tab[2] > 0){
  38. printf("%dxxxx + %dxx + %d = 0 \n",tab[0],tab[1],tab[2] );
  39. }else if(tab[2] < 0){
  40. printf("%dxxxx + %dxx + (%d) = 0 \n",tab[0],tab[1],tab[2] );
  41. }else if(tab[2] == 0){
  42. printf("%dxxxx + %dxx = 0 \n",tab[0],tab[1] );
  43. }
  44. }else if(tab[1] < 0){
  45. if(tab[2]> 0){
  46. printf("%dxxxx + (%dxx) + %d = 0 \n",tab[0],tab[1],tab[2] );
  47. }else if(tab[2] < 0){
  48. printf("%dxxxx + (%dxx) + (%d) = 0 \n",tab[0],tab[1],tab[2] );
  49. }else if(tab[2] == 0){
  50. printf("%dxxxx + %dxx = 0 \n",tab[0],tab[1] );
  51. }
  52. }else if(tab[1] == 0){
  53. if(tab[2] > 0){
  54. printf("%dxxxx + %d = 0 \n",tab[0],tab[2] );
  55. }else if(tab[2] < 0){
  56. printf("%dxxxx + (%d) = 0 \n",tab[0],tab[2] );
  57. }else if(tab[2] == 0){
  58. printf("%dxxxx = 0 \n",tab[0] );
  59. }
  60. }
  61. }
  62.  
  63. }
  64. double oblicz_delte(int *tab){
  65.  
  66. int temp = 1.0 * (pow(tab[1],2)) - (4*tab[0]*tab[2]);
  67.  
  68. return temp;
  69. }
  70. double sqrt_heron(double delta,double err){
  71. if(delta < 0){
  72. delta = -1.0 * delta;
  73. }
  74. double temp = 1.0 * (delta / 2);
  75. double temp2 = 1.0 * (delta / temp);
  76.  
  77. for(;;){
  78. if(fabs(temp - temp2) < err || pow(temp,2) == delta){
  79. break;
  80. }else{
  81. temp = (1.0*temp+temp2) / 2;
  82. temp2 = (1.0*delta) / (1.0*temp);
  83. }
  84. }
  85. if(delta < 0 ){
  86. return -1 * temp;
  87. }
  88. return temp;
  89. }
  90. double sqrt_newton(double delta,double err){
  91. if(delta < 0){
  92. delta = -1.0 * delta;
  93. }
  94. double temp = 1.0 * (delta / 2);
  95. double temp2 = temp;
  96. temp = temp2 - ((1.0*pow(temp2,2) - delta*1.0) / (2.0*temp2));
  97.  
  98. for(;;){
  99. if(fabs(temp - temp2) < err || pow(temp,2) == delta){
  100. break;
  101. }else{
  102. temp2 = temp;
  103. temp = temp2 - ((pow(temp2,2) - delta ) / (2*temp2));
  104. }
  105. }
  106. if(delta < 0 ){
  107. return -1 * temp;
  108. }
  109. return temp;
  110. }
  111.  
  112. void oblicz_pierwiastki(int *tab,double *x1r,double *x2r,double *x3r,double *x4r,
  113. double *x1u,double *x2u,double *x3u,double *x4u,double err){
  114. double delta,pdelta;
  115. delta = oblicz_delte(tab);
  116. if(err == 0){
  117. if(delta < 0){
  118.  
  119. pdelta = sqrt(-delta);
  120. }else{
  121. pdelta = sqrt(delta);
  122. }
  123. }else if(err > 0.1){
  124. pdelta = sqrt_newton(delta,err);
  125. }else if(err > 0 && err < 0.1){
  126. pdelta = sqrt_heron(delta,err);
  127. }
  128. printf("delta wynosi : %f\n",delta );
  129. if(tab[0] != 0){
  130. if(delta > 0){
  131. //printf("pdelta wynosi : %f\n",pdelta );
  132. *x1r = (-tab[1]-pdelta) / (2*tab[0]);
  133. *x2r = (-tab[1]+pdelta) / (2*tab[0]);
  134. //printf("pierwiastki wynosza : x1 = %f, x2 = %f \n",*x1r,*x2r);
  135. }else if(delta < 0){
  136. //printf("pdelta wynosi : %f \n",pdelta );
  137. pdelta = pdelta * -1;
  138. *x1r = (tab[1]*(-1.0)) / (2*tab[0]*1.0);
  139. *x2r = *x1r;
  140. *x1u = (-pdelta*1.0) / (2*tab[0]*1.0);
  141. *x2u = -(*x1u);
  142. //printf("pierwiastki wynosza x1 = %f + %fi, x2 = %f + %fi\n",*x1r,*x1u,*x2r,*x2u);
  143. }else if(delta == 0){
  144. //printf("pdelta wynosi : %f0\n",pdelta );
  145. *x1r = (-tab[1]) / (2 * tab[0]);
  146. //printf("pierwaiastek wynosi x1 = %f \n", *x1r);
  147. }
  148. }else{
  149. *x1r = (-tab[2]*1.0 / tab[1]*1.0);
  150. //printf("pierwiastek wynosi x1 = %f\n",*x1r );
  151. }
  152. double temp = 0.0,temp2 = 0.0,temp3 = 0.0,temp4 = 0.0;
  153. if(delta > 0){
  154. temp = *x1r,temp2 = *x2r;
  155.  
  156. if(err == 0){
  157. if(temp > 0){
  158. *x1r = sqrt(temp);
  159. *x2r = -(*x1r);
  160. }else if( temp < 0){
  161. *x1r = 0;
  162. *x2r = 0;
  163. *x1u = sqrt(-temp);
  164. *x2u = -(*x1u);
  165. }
  166. if(temp2 > 0){
  167. *x3r = sqrt(temp2);
  168. *x4r = -(*x3r);
  169. }else if(temp2 < 0){
  170. *x3r = 0;
  171. *x4r = 0;
  172. *x3u = sqrt(-temp);
  173. *x4u = -(*x1u);
  174. }
  175.  
  176. }else if(err > 0.1){
  177. if(temp > 0){
  178. *x1r = sqrt_newton(temp,err);
  179. *x2r = -(*x1r);
  180. }else if( temp < 0){
  181. *x1r = 0;
  182. *x2r = 0;
  183. *x1u = sqrt_newton(-temp,err);
  184. *x2u = -(*x1u);
  185. }
  186. if(temp2 > 0){
  187. *x3r = sqrt_newton(temp2,err);
  188. *x4r = -(*x3r);
  189. }else if(temp2 < 0){
  190. *x3r = 0;
  191. *x4r = 0;
  192. *x3u = sqrt_newton(-temp2,err);
  193. *x4u = -(*x1u);
  194. }
  195. }else if(err > 0 && err < 0.1){
  196. if(temp > 0){
  197. *x1r = sqrt_heron(temp,err);
  198. *x2r = -(*x1r);
  199. }else if( temp < 0){
  200. *x1r = 0;
  201. *x2r = 0;
  202. *x1u = sqrt_heron(-temp,err);
  203. *x2u = -(*x1u);
  204. }
  205. if(temp2 > 0){
  206. *x3r = sqrt_heron(temp2,err);
  207. *x4r = -(*x3r);
  208. }else if(temp2 < 0){
  209. *x3r = 0;
  210. *x4r = 0;
  211. *x3u = sqrt_heron(-temp2,err);
  212. *x4u = -(*x1u);
  213. }
  214. }
  215.  
  216. }else if(delta < 0){
  217. temp = *x1r,temp2 = *x1u,temp3 = *x2r,temp4 = *x2u;
  218. if(err == 0){
  219. *x1r = sqrt(((sqrt(pow(temp,2) + pow(temp2,2)) + temp)/2));
  220. *x1u = sqrt(((sqrt(pow(temp,2) + pow(temp2,2)) - temp)/2));
  221. *x2r = (*x1r);
  222. *x2u = -(*x1u);
  223. *x3r = -sqrt(((sqrt(pow(temp3,2) + pow(temp4,2)) + temp3)/2));
  224. *x3u = sqrt(((sqrt(pow(temp3,2) + pow(temp4,2)) - temp3)/2));
  225. *x4r = (*x3r);
  226. *x4u = -(*x3u);
  227.  
  228. }else if(err > 0.1){
  229. *x1r = sqrt_newton(((sqrt_newton(pow(temp,2) + pow(temp2,2),err) + temp)/2),err);
  230. *x1u = sqrt_newton(((sqrt_newton(pow(temp,2) + pow(temp2,2),err) - temp)/2),err);
  231. *x2r = *x1r;
  232. *x2u = -(*x1u);
  233. *x3r = -sqrt_newton(((sqrt_newton(pow(temp,2) + pow(temp2,2),err) + temp3)/2),err);
  234. *x3u = sqrt_newton(((sqrt_newton(pow(temp,2) + pow(temp2,2),err) - temp3)/2),err);
  235. *x4r = (*x3r);
  236. *x4u = -(*x3u);
  237.  
  238. }else if(err > 0 && err <= 0.1){
  239. *x1r = sqrt_heron(((sqrt_heron(pow(temp,2) + pow(temp2,2),err) + temp)/2),err);
  240. *x1u = sqrt_heron(((sqrt_heron(pow(temp,2) + pow(temp2,2),err) - temp)/2),err);
  241. *x2r = *x1r;
  242. *x2u = -(*x1u);
  243. *x3r = -sqrt_heron(((sqrt_heron(pow(temp,2) + pow(temp2,2),err) + temp3)/2),err);
  244. *x3u = sqrt_heron(((sqrt_heron(pow(temp,2) + pow(temp2,2),err) - temp3)/2),err);
  245. *x4r = (*x3r);
  246. *x4u = -(*x3u);
  247.  
  248. }
  249.  
  250. }else if(delta == 0){
  251. temp = *x1r;
  252. if(temp > 0){
  253. if(err == 0){
  254. *x1r = sqrt(temp);
  255.  
  256.  
  257. }else if(err > 0.1){
  258. *x1r = sqrt_newton(temp,err);
  259. }else if(err > 0 && err < 0.1){
  260. *x1r = sqrt_heron(temp,err);
  261. }
  262. *x2r = -(*x1r);
  263. //printf("pierwiastki wynosza : x1 = %f, x2 = %f \n",*x1r,*x2r);
  264. }else if(temp < 0){
  265. if(err == 0){
  266. *x1u = sqrt(-temp);
  267. }else if(err > 0.1){
  268. *x1u = sqrt_newton(-temp,err);
  269. }else if(err > 0 && err < 0.1){
  270. *x1u = sqrt_heron(-temp,err);
  271. }
  272. *x2u = -(*x1u);
  273. }
  274.  
  275. }
  276. //printf("x1r = %f x1u = %f\n",*x1r,*x1u );
  277. //printf("x2r = %f x2u = %f\n",*x2r,*x2u );
  278. //printf("x3r = %f x3u = %f\n",*x3r,*x3u );
  279. //printf("x4r = %f x4u = %f\n",*x4r,*x4u );
  280.  
  281. }
  282. void dodaj_l_zespolone(double *sr, double *su,double *x1r,double *x2r,
  283. double *x3r, double *x4r,double *x1u,double *x2u, double *x3u, double *x4u){
  284.  
  285.  
  286. *sr = *x1r + *x2r + *x3r + *x4r;
  287. *su = *x1u + *x2u + *x3u + *x4u;
  288.  
  289. }
  290.  
  291. void odejmij_l_zespolone(double *rr, double *ru,double *x1r,double *x2r,
  292. double *x3r, double *x4r,double *x1u,double *x2u, double *x3u, double *x4u )
  293. {
  294.  
  295.  
  296. *rr = *x1r - *x2r - *x3r - *x4r;
  297. *ru = *x1u - *x2u - *x3u - *x4u;
  298. return;
  299.  
  300.  
  301. }
  302. void formatuj_l_zespolone(double rzecz, double uroj)
  303. {
  304. printf("%lf ", rzecz);
  305. if (uroj < 0)
  306. printf("+ (%lfi)\n", uroj);
  307. else
  308. printf("+ %lfi\n", uroj);
  309. return;
  310. }
  311. void wyswietl_wyniki(double x1r, double x2r, double x3r, double x4r, double x1u, double x2u, double x3u, double x4u, double sr, double su, double rr, double ru) {
  312. printf("\n\n");
  313. printf("x1: ");
  314. formatuj_l_zespolone(x1r, x1u);
  315. if(x2r !=0 || x2u != 0){
  316. printf("x2:");
  317. formatuj_l_zespolone(x2r, x2u);
  318. }
  319. if(x3r != 0 || x3u != 0){
  320. printf("x3:");
  321. formatuj_l_zespolone(x3r, x3u);
  322. }
  323. if(x4r != 0 || x4u != 0){
  324.  
  325. printf("x4:");
  326. formatuj_l_zespolone(x4r, x4u);
  327.  
  328. }
  329. printf("\n\n");
  330. printf("Suma : ");
  331. formatuj_l_zespolone(sr, su);
  332.  
  333. printf("Roznica: ");
  334. formatuj_l_zespolone(rr, ru);
  335. return;
  336. }
  337.  
  338.  
  339. int main(int argc, char *argv[]) {
  340. int temp;
  341. double error;
  342. scanf("%lf",&error);
  343. int tab[3];
  344. for(temp = 0;temp<3;temp++){
  345. scanf("%d",&tab[temp]);
  346. }
  347. double x1r = 0.0,x2r = 0.0,x3r = 0.0,x4r = 0.0;
  348. double x1u = 0.0,x2u = 0.0,x3u = 0.0,x4u = 0.0;
  349. double sr = 0.0,su = 0.0,rr = 0.0,ru= 0.0;
  350. wyswietl_row(tab);
  351. oblicz_pierwiastki(tab,&x1r,&x2r,&x3r,&x4r,&x1u,&x2u,&x3u,&x4u,error);
  352. dodaj_l_zespolone(&sr,&su,&x1r,&x2r,&x3r,&x4r,&x1u,&x2u,&x3u,&x4u);
  353. odejmij_l_zespolone(&rr,&ru,&x1r,&x2r,&x3r,&x4r,&x1u,&x2u,&x3u,&x4u);
  354. wyswietl_wyniki(x1r,x2r,x3r,x4r,x1u,x2u,x3u,x4u,sr,su,rr,ru);
  355. return 0;
  356. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement