Advertisement
huutho_96

Phân Số

Apr 15th, 2015
431
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.17 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. class PhanSo
  4. {
  5. public:
  6. PhanSo(int TuSo = 0, int MauSo = 1)
  7. {
  8. this->MauSo = MauSo;
  9. this->TuSo = TuSo;
  10. }
  11. void RutGon();
  12. friend istream& operator >> (istream& in, PhanSo &p);
  13. friend ostream& operator << (ostream& out, PhanSo p);
  14. friend bool operator > (PhanSo a, PhanSo b);
  15. friend bool operator < (PhanSo a, PhanSo b);
  16. friend bool operator == (PhanSo a, PhanSo b);
  17. friend bool operator <= (PhanSo a, PhanSo b);
  18. friend bool operator >= (PhanSo a, PhanSo b);
  19. friend PhanSo operator +(PhanSo a, PhanSo b);
  20. friend PhanSo operator -(PhanSo a, PhanSo b);
  21. friend PhanSo operator *(PhanSo a, PhanSo b);
  22. friend PhanSo operator /(PhanSo a, PhanSo b);
  23. friend void operator += (PhanSo &a, PhanSo b);
  24. friend void operator -= (PhanSo &a, PhanSo b);
  25. friend void operator *= (PhanSo &a, PhanSo b);
  26. friend void operator /= (PhanSo &a, PhanSo b);
  27. friend PhanSo operator +(PhanSo a, int b);
  28. friend PhanSo operator -(PhanSo a, int b);
  29. friend PhanSo operator *(PhanSo a, int b);
  30. friend PhanSo operator /(PhanSo a, int b);
  31. friend void operator += (PhanSo &a, int b);
  32. friend void operator -= (PhanSo &a, int b);
  33. friend void operator *= (PhanSo &a, int b);
  34. friend void operator /= (PhanSo &a, int b);
  35. private:
  36. int TuSo, MauSo;
  37. };
  38. //Rút Gọn 1 phân số
  39. void PhanSo::RutGon()
  40. {
  41. int iDau = 1;
  42. if (this->TuSo * this->MauSo < 0) iDau = -1;
  43. this->TuSo = abs(this->TuSo);
  44. this->MauSo = abs(this->MauSo);
  45. for (int i = this->TuSo; i > 1; i--)
  46. {
  47. if (this->TuSo % i == 0 && this->MauSo % i == 0)
  48. {
  49. this->TuSo /= i;
  50. this->MauSo /= i;
  51. break;
  52. }
  53. }
  54. this->TuSo *= iDau;
  55. }
  56. //Toán tử nhập
  57. istream& operator >> (istream& in, PhanSo &PS)
  58. {
  59. cout << "Nhap tu so : ";
  60. in >> PS.TuSo;
  61. cout << "Nhap mau so: ";
  62. in >> PS.MauSo;
  63. if (PS.MauSo == 0)
  64. {
  65. cout << "ERROR\n";
  66. cin >> PS;
  67. }
  68. return in;
  69. }
  70. //Toán tử xuất
  71. ostream& operator << (ostream& out, PhanSo PS)
  72. {
  73. if (PS.TuSo != 0)
  74. {
  75. out << PS.TuSo;
  76. if (PS.MauSo != 1)
  77. {
  78. cout << " / ";
  79. out << PS.MauSo;
  80. }
  81. }
  82. else
  83. out << "0";
  84. return out;
  85. }
  86. //So sánh >, <, ==, >=, <=
  87. bool operator > (PhanSo a, PhanSo b)
  88. {
  89. return (float(a.TuSo) / a.MauSo > float(b.TuSo) / b.MauSo);
  90. }
  91. bool operator < (PhanSo a, PhanSo b)
  92. {
  93. return (float(a.TuSo) / a.MauSo < float(b.TuSo) / b.MauSo);
  94. }
  95. bool operator == (PhanSo a, PhanSo b)
  96. {
  97. return (float(a.TuSo) / a.MauSo == float(b.TuSo) / b.MauSo);
  98. }
  99. bool operator >= (PhanSo a, PhanSo b)
  100. {
  101. return (float(a.TuSo) / a.MauSo >= float(b.TuSo) / b.MauSo);
  102. }
  103. bool operator <= (PhanSo a, PhanSo b)
  104. {
  105. return (float(a.TuSo) / a.MauSo <= float(b.TuSo) / b.MauSo);
  106. }
  107. //Toán tử +, -, *, /
  108. PhanSo operator + (PhanSo a, PhanSo b)
  109. {
  110. PhanSo Kq;
  111. Kq.MauSo = a.MauSo * b.MauSo;
  112. Kq.TuSo = a.TuSo * b.MauSo + a.MauSo * b.TuSo;
  113. Kq.RutGon();
  114. return Kq;
  115. }
  116. PhanSo operator - (PhanSo a, PhanSo b)
  117. {
  118. PhanSo Kq;
  119. Kq.MauSo = a.MauSo * b.MauSo;
  120. Kq.TuSo = a.TuSo * b.MauSo - a.MauSo * b.TuSo;
  121. Kq.RutGon();
  122. return Kq;
  123. }
  124. PhanSo operator * (PhanSo a, PhanSo b)
  125. {
  126. PhanSo Kq;
  127. Kq.MauSo = a.MauSo * b.MauSo;
  128. Kq.TuSo = a.TuSo * b.TuSo;
  129. Kq.RutGon();
  130. return Kq;
  131. }
  132. PhanSo operator / (PhanSo a, PhanSo b)
  133. {
  134. PhanSo Kq;
  135. Kq.MauSo = a.MauSo * b.TuSo;
  136. Kq.TuSo = a.TuSo * b.MauSo;
  137. Kq.RutGon();
  138. return Kq;
  139. }
  140. //Toán tử +=, -=; *=, /=
  141. void operator += (PhanSo &a, PhanSo b)
  142. {
  143. a = a + b;
  144. }
  145. void operator -= (PhanSo &a, PhanSo b)
  146. {
  147. a = a - b;
  148. }
  149. void operator *= (PhanSo &a, PhanSo b)
  150. {
  151. a = a * b;
  152. }
  153. void operator /= (PhanSo &a, PhanSo b)
  154. {
  155. a = a / b;
  156. }
  157. //Overload function. nạp chồng hàm. Ở đây thao tác 1 các phep tính vói 1 số nguyên
  158. //Các toán tử như giữa 2 phân số
  159. PhanSo operator +(PhanSo a, int b)
  160. {
  161. PhanSo P(b);
  162. return (P + a);
  163. }
  164. PhanSo operator -(PhanSo a, int b)
  165. {
  166. PhanSo P(b);
  167. return (P - a);
  168. }
  169. PhanSo operator *(PhanSo a, int b)
  170. {
  171. PhanSo P(b);
  172. return (P * a);
  173. }
  174. PhanSo operator /(PhanSo a, int b)
  175. {
  176. PhanSo P(b);
  177. return (a / P);
  178. }
  179. void operator += (PhanSo &a, int b)
  180. {
  181. PhanSo P(b);
  182. a = a + P;
  183. }
  184. void operator -= (PhanSo &a, int b)
  185. {
  186. PhanSo P(b);
  187. a = a - P;
  188. }
  189. void operator *= (PhanSo &a, int b)
  190. {
  191. PhanSo P(b);
  192. a = a * P;
  193. }
  194. void operator /= (PhanSo &a, int b)
  195. {
  196. PhanSo P(b);
  197. a = a / P;
  198. }
  199. void main()
  200. {
  201. int n;
  202. cin >> n;
  203. PhanSo *PS = new PhanSo[n]; //Khởi tạo mảng phân số
  204. for (int i = 0; i < n; i++)
  205. cin >> PS[i]; //Nhạp từng phân số
  206. PhanSo a; //Khởi tạo phân số a. mặc định a = 0 / 1
  207. for (int i = 0; i < n; i++)
  208. a += PS[i]; //Cộng dồn các phân số vào phân số a; hoặc ghi a = a + PS[i]; đều đã định nghĩa ở trên
  209. cout << a << endl;// Xuất a;
  210.  
  211. PhanSo b;//mặc định 0 / 1 = 0;
  212. for (int i = 0; i < n; i++)
  213. b -= PS[i]; //Trừ hoặc ghi b = b - PS[i]
  214. cout << b << endl;
  215.  
  216. PhanSo c;//mặc định 0 / 1 = 0;
  217. for (int i = 0; i < n; i++)
  218. c *= PS[i]; //Nhân hoặc ghi c = c * PS[i]
  219. cout << c << endl;
  220.  
  221. PhanSo d;//mặc định 0 / 1 = 0;
  222. for (int i = 0; i < n; i++)
  223. d /= PS[i]; //Chia hoặc ghi d = d / PS[i]
  224. cout << d << endl;
  225.  
  226. PhanSo e;//mặc định 0 / 1 = 0;
  227. cout << e + 1 << endl << (e + 1) * 10;
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement