Advertisement
AnhVan1712

Các thao tác với phân số

Apr 5th, 2020
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.29 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. struct phanSo
  4. {
  5. int tu;
  6. int mau;
  7. };
  8. void sapXepTangDan (phanSo A[], int n);
  9. void timPhanSoMin(phanSo A[], int n);
  10. void nhap1PhanSo(phanSo& x);
  11. void xuat1PhanSo(phanSo& p);
  12. void nhapNphanSo(phanSo A[], int& n);
  13. void xuatNphanSo(phanSo A[], int n);
  14. void timPhanSoMax(phanSo A[], int n);
  15. int tinhHieu2PhanSo(phanSo p1, phanSo p2);
  16. void tinhTich(phanSo A[], int n);
  17. int rutGon(phanSo& p);
  18. int USCLN(phanSo p);
  19. int xuLy(phanSo& p);
  20. void tinhTongNphanSo(phanSo A[], int n);
  21. void tinhTong1PhanSo(phanSo p2, phanSo& p);
  22. void main()
  23. {
  24. int n;
  25. phanSo A[100];
  26. nhapNphanSo(A, n);
  27. timPhanSoMax(A,n);
  28. timPhanSoMin (A,n);
  29. //tinhTich (A,n);
  30. tinhTongNphanSo(A, n);
  31. sapXepTangDan (A,n);
  32. }
  33. void sapXepTangDan (phanSo A[], int n)
  34. {
  35. struct phanSo temp;
  36. for (int i = 0; i < n-1; i++)
  37. {
  38. for (int j=i+1;j<n;j++)
  39. {
  40. if (tinhHieu2PhanSo(A[i], A[j]) == 0)
  41. {
  42. temp.mau=A[i].mau;
  43. temp.tu=A[i].tu;
  44. A[i].mau=A[j].mau;
  45. A[i].tu=A[j].tu;
  46. A[j].mau=temp.mau;
  47. A[j].tu=temp.tu;
  48. }
  49. }
  50. }
  51. printf ("Sap xep mang tang dan !\n");
  52. xuatNphanSo (A,n);
  53. }
  54. void timPhanSoMin(phanSo A[], int n)
  55. {
  56. int viTri = 0;
  57. for (int i = 0; i < n; i++)
  58. {
  59. if (tinhHieu2PhanSo(A[viTri], A[i]) == 0)
  60. {
  61. viTri = i;
  62. }
  63. }
  64. printf("Phan so nho nhat la : ");
  65. xuat1PhanSo(A[viTri]);
  66. }
  67. void tinhTongNphanSo(phanSo A[], int n)
  68. {
  69. phanSo tong = { 0,1 };
  70. for (int i = 0; i < n; i++)
  71. {
  72. tinhTong1PhanSo(A[i], tong);
  73. }
  74. printf("Tong cua cac phan so la : ");
  75. xuat1PhanSo (tong);
  76. }
  77. void tinhTong1PhanSo(phanSo p2, phanSo& p)
  78. {
  79. int nho = p.mau;
  80. p.mau = p.mau * p2.mau;
  81. p.tu = p.tu * p2.mau + p2.tu * nho;
  82. }
  83. int USCLN(phanSo p)
  84. {
  85. int a = p.tu;
  86. int b = p.mau;
  87. if (a == b)
  88. {
  89. return 0;
  90. }
  91. else
  92. {
  93. while (a != b)
  94. {
  95. if (a > b)
  96. {
  97. a = a - b;
  98. }
  99. else
  100. {
  101. b = b - a;
  102. }
  103. }
  104. }
  105. return a;
  106. };
  107. int xuLy(phanSo& p)
  108. {
  109. if (p.tu == 0)
  110. {
  111. return -2;
  112. }
  113. if ((p.tu < 0) && (p.mau < 0))
  114. {
  115. p.tu = abs(p.tu);
  116. p.mau = abs(p.mau);
  117. return 0;
  118. }
  119. else
  120. {
  121. if (p.tu < 0)
  122. {
  123. p.tu = abs(p.tu);
  124. return 1;
  125. }
  126. else
  127. {
  128. if (p.mau < 0)
  129. {
  130. p.mau = abs(p.mau);
  131. return 1;
  132. }
  133. }
  134. }
  135. return 0;
  136. };
  137. int rutGon(phanSo& p)
  138. {
  139. int kt = xuLy(p);
  140. if (kt == -2)
  141. {
  142. return -2;
  143. }
  144. int a = USCLN(p);
  145. if (a == 0)
  146. {
  147. if (kt == 1)
  148. {
  149. return -1;
  150. }
  151. else
  152. {
  153. return 0;
  154. }
  155. }
  156. else
  157. {
  158. if (kt == 0)
  159. {
  160. p.tu = p.tu / a;
  161. p.mau = p.mau / a;
  162. }
  163. else
  164. {
  165. p.tu = -p.tu / a;
  166. p.mau = p.mau / a;
  167. }
  168. }
  169. return 1;
  170. }
  171. void timPhanSoMax(phanSo A[], int n)
  172. {
  173. int viTri = 0;
  174. for (int i = 0; i < n; i++)
  175. {
  176. if (tinhHieu2PhanSo(A[viTri], A[i]) == 1)
  177. {
  178. viTri = i;
  179. }
  180. }
  181. printf("Phan so lon nhat la : ");
  182. xuat1PhanSo(A[viTri]);
  183. }
  184. void tinhTich(phanSo A[], int n)
  185. {
  186. phanSo tich;
  187. tich.tu = 1;
  188. tich.mau = 1;
  189. for (int i = 0; i < n; i++)
  190. {
  191. tich.tu = tich.tu * A[i].tu;
  192. tich.mau = tich.mau * A[i].mau;
  193. }
  194. printf("Tich cua cac phan so trong day la : ");
  195. xuat1PhanSo(tich);
  196. }
  197. int tinhHieu2PhanSo(phanSo p1, phanSo p2)
  198. {
  199. int mau = p1.mau * p2.mau;
  200. int tu = p1.tu * p2.mau - p2.tu * p1.mau;
  201. if (tu <= 0 && mau > 0)
  202. {
  203. return 1;
  204. }
  205. else
  206. {
  207. if (tu <= 0 && mau < 0)
  208. {
  209. return 0;
  210. }
  211. else
  212. {
  213. if (tu >= 0 && mau < 0)
  214. {
  215. return 1;
  216. }
  217. else
  218. {
  219. if (tu >= 0 && mau > 0)
  220. {
  221. return 0;
  222. }
  223. }
  224. }
  225. }
  226. }
  227. void xuatNphanSo(phanSo A[], int n)
  228. {
  229. for (int i = 0; i < n; i++)
  230. {
  231. xuat1PhanSo(A[i]);
  232. }
  233. }
  234. void nhapNphanSo(phanSo A[], int& n)
  235. {
  236. printf("Hay nhap n : ");
  237. scanf("%d", &n);
  238. for (int i = 0; i < n; i++)
  239. {
  240. nhap1PhanSo(A[i]);
  241. }
  242. }
  243. void nhap1PhanSo(phanSo& x)
  244. {
  245. printf("Nhap lan luot tu va mau cua 1 phan so :\n");
  246. do
  247. {
  248. scanf("%d%d", &x.tu, &x.mau);
  249. if (x.mau == 0)
  250. {
  251. printf("Phan so khong hop le hay nhap lai !\n");
  252. }
  253. } while (x.mau == 0);
  254. }
  255. void xuat1PhanSo(phanSo& p)
  256. {
  257. int kt = rutGon(p);
  258. if (kt == -2)
  259. {
  260. printf("0");
  261. }
  262. else
  263. {
  264. if (kt == 0)
  265. {
  266. printf("1 \n");
  267. }
  268. else
  269. {
  270. if (kt == -1)
  271. {
  272. printf("-1\n");
  273. }
  274. else
  275. {
  276. if (p.mau == 1)
  277. {
  278. printf("%d\n ", p.tu);
  279. }
  280. else
  281. {
  282. printf("%d/%d \n", p.tu, p.mau);
  283. }
  284. }
  285. }
  286. }
  287. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement