Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class PhanSo
- {
- public:
- PhanSo(int TuSo = 0, int MauSo = 1)
- {
- this->MauSo = MauSo;
- this->TuSo = TuSo;
- }
- void RutGon();
- friend istream& operator >> (istream& in, PhanSo &p);
- friend ostream& operator << (ostream& out, PhanSo p);
- friend bool operator > (PhanSo a, PhanSo b);
- friend bool operator < (PhanSo a, PhanSo b);
- friend bool operator == (PhanSo a, PhanSo b);
- friend bool operator <= (PhanSo a, PhanSo b);
- friend bool operator >= (PhanSo a, PhanSo b);
- friend PhanSo operator +(PhanSo a, PhanSo b);
- friend PhanSo operator -(PhanSo a, PhanSo b);
- friend PhanSo operator *(PhanSo a, PhanSo b);
- friend PhanSo operator /(PhanSo a, PhanSo b);
- friend void operator += (PhanSo &a, PhanSo b);
- friend void operator -= (PhanSo &a, PhanSo b);
- friend void operator *= (PhanSo &a, PhanSo b);
- friend void operator /= (PhanSo &a, PhanSo b);
- friend PhanSo operator +(PhanSo a, int b);
- friend PhanSo operator -(PhanSo a, int b);
- friend PhanSo operator *(PhanSo a, int b);
- friend PhanSo operator /(PhanSo a, int b);
- friend void operator += (PhanSo &a, int b);
- friend void operator -= (PhanSo &a, int b);
- friend void operator *= (PhanSo &a, int b);
- friend void operator /= (PhanSo &a, int b);
- private:
- int TuSo, MauSo;
- };
- //Rút Gọn 1 phân số
- void PhanSo::RutGon()
- {
- int iDau = 1;
- if (this->TuSo * this->MauSo < 0) iDau = -1;
- this->TuSo = abs(this->TuSo);
- this->MauSo = abs(this->MauSo);
- for (int i = this->TuSo; i > 1; i--)
- {
- if (this->TuSo % i == 0 && this->MauSo % i == 0)
- {
- this->TuSo /= i;
- this->MauSo /= i;
- break;
- }
- }
- this->TuSo *= iDau;
- }
- //Toán tử nhập
- istream& operator >> (istream& in, PhanSo &PS)
- {
- cout << "Nhap tu so : ";
- in >> PS.TuSo;
- cout << "Nhap mau so: ";
- in >> PS.MauSo;
- if (PS.MauSo == 0)
- {
- cout << "ERROR\n";
- cin >> PS;
- }
- return in;
- }
- //Toán tử xuất
- ostream& operator << (ostream& out, PhanSo PS)
- {
- if (PS.TuSo != 0)
- {
- out << PS.TuSo;
- if (PS.MauSo != 1)
- {
- cout << " / ";
- out << PS.MauSo;
- }
- }
- else
- out << "0";
- return out;
- }
- //So sánh >, <, ==, >=, <=
- bool operator > (PhanSo a, PhanSo b)
- {
- return (float(a.TuSo) / a.MauSo > float(b.TuSo) / b.MauSo);
- }
- bool operator < (PhanSo a, PhanSo b)
- {
- return (float(a.TuSo) / a.MauSo < float(b.TuSo) / b.MauSo);
- }
- bool operator == (PhanSo a, PhanSo b)
- {
- return (float(a.TuSo) / a.MauSo == float(b.TuSo) / b.MauSo);
- }
- bool operator >= (PhanSo a, PhanSo b)
- {
- return (float(a.TuSo) / a.MauSo >= float(b.TuSo) / b.MauSo);
- }
- bool operator <= (PhanSo a, PhanSo b)
- {
- return (float(a.TuSo) / a.MauSo <= float(b.TuSo) / b.MauSo);
- }
- //Toán tử +, -, *, /
- PhanSo operator + (PhanSo a, PhanSo b)
- {
- PhanSo Kq;
- Kq.MauSo = a.MauSo * b.MauSo;
- Kq.TuSo = a.TuSo * b.MauSo + a.MauSo * b.TuSo;
- Kq.RutGon();
- return Kq;
- }
- PhanSo operator - (PhanSo a, PhanSo b)
- {
- PhanSo Kq;
- Kq.MauSo = a.MauSo * b.MauSo;
- Kq.TuSo = a.TuSo * b.MauSo - a.MauSo * b.TuSo;
- Kq.RutGon();
- return Kq;
- }
- PhanSo operator * (PhanSo a, PhanSo b)
- {
- PhanSo Kq;
- Kq.MauSo = a.MauSo * b.MauSo;
- Kq.TuSo = a.TuSo * b.TuSo;
- Kq.RutGon();
- return Kq;
- }
- PhanSo operator / (PhanSo a, PhanSo b)
- {
- PhanSo Kq;
- Kq.MauSo = a.MauSo * b.TuSo;
- Kq.TuSo = a.TuSo * b.MauSo;
- Kq.RutGon();
- return Kq;
- }
- //Toán tử +=, -=; *=, /=
- void operator += (PhanSo &a, PhanSo b)
- {
- a = a + b;
- }
- void operator -= (PhanSo &a, PhanSo b)
- {
- a = a - b;
- }
- void operator *= (PhanSo &a, PhanSo b)
- {
- a = a * b;
- }
- void operator /= (PhanSo &a, PhanSo b)
- {
- a = a / b;
- }
- //Overload function. nạp chồng hàm. Ở đây thao tác 1 các phep tính vói 1 số nguyên
- //Các toán tử như giữa 2 phân số
- PhanSo operator +(PhanSo a, int b)
- {
- PhanSo P(b);
- return (P + a);
- }
- PhanSo operator -(PhanSo a, int b)
- {
- PhanSo P(b);
- return (P - a);
- }
- PhanSo operator *(PhanSo a, int b)
- {
- PhanSo P(b);
- return (P * a);
- }
- PhanSo operator /(PhanSo a, int b)
- {
- PhanSo P(b);
- return (a / P);
- }
- void operator += (PhanSo &a, int b)
- {
- PhanSo P(b);
- a = a + P;
- }
- void operator -= (PhanSo &a, int b)
- {
- PhanSo P(b);
- a = a - P;
- }
- void operator *= (PhanSo &a, int b)
- {
- PhanSo P(b);
- a = a * P;
- }
- void operator /= (PhanSo &a, int b)
- {
- PhanSo P(b);
- a = a / P;
- }
- void main()
- {
- int n;
- cin >> n;
- PhanSo *PS = new PhanSo[n]; //Khởi tạo mảng phân số
- for (int i = 0; i < n; i++)
- cin >> PS[i]; //Nhạp từng phân số
- PhanSo a; //Khởi tạo phân số a. mặc định a = 0 / 1
- for (int i = 0; i < n; i++)
- 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
- cout << a << endl;// Xuất a;
- PhanSo b;//mặc định 0 / 1 = 0;
- for (int i = 0; i < n; i++)
- b -= PS[i]; //Trừ hoặc ghi b = b - PS[i]
- cout << b << endl;
- PhanSo c;//mặc định 0 / 1 = 0;
- for (int i = 0; i < n; i++)
- c *= PS[i]; //Nhân hoặc ghi c = c * PS[i]
- cout << c << endl;
- PhanSo d;//mặc định 0 / 1 = 0;
- for (int i = 0; i < n; i++)
- d /= PS[i]; //Chia hoặc ghi d = d / PS[i]
- cout << d << endl;
- PhanSo e;//mặc định 0 / 1 = 0;
- cout << e + 1 << endl << (e + 1) * 10;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement