#include <iostream>
#include <cstdlib>

using namespace std;

class CPhanSo
{
private:
    int tuSo;
    int mauSo;

public:
    void TaoPhanSo(int, int);
    void InPhanSo();
    CPhanSo ChuanHoaPS();
    CPhanSo RutGonPS();
    CPhanSo CongPS(CPhanSo);
    CPhanSo TruPS(CPhanSo);
    CPhanSo NhanPS(CPhanSo);
    CPhanSo ChiaPS(CPhanSo);

private:
    int UCLN(int, int);
};

CPhanSo CPhanSo::CongPS(CPhanSo ps)
{
    this->tuSo = this->tuSo * ps.mauSo + ps.tuSo * this->mauSo;
    this->mauSo = this->mauSo * ps.mauSo;

    this->RutGonPS();

    return *this;
}

CPhanSo CPhanSo::TruPS(CPhanSo ps)
{
    this->tuSo = this->tuSo * ps.mauSo - ps.tuSo * this->mauSo;
    this->mauSo = this->mauSo * ps.mauSo;

    this->RutGonPS();

    return *this;
}

CPhanSo CPhanSo::NhanPS(CPhanSo ps)
{
    this->tuSo = this->tuSo * ps.tuSo;
    this->mauSo = this->mauSo * ps.mauSo;

    this->RutGonPS();

    return *this;
}

CPhanSo CPhanSo::ChiaPS(CPhanSo ps)
{
    if (ps.tuSo == 0)
    {
        cout << "Khong the chia cho phan so co tu so bang 0!";
        return *this;
    }

    this->tuSo = this->tuSo * ps.mauSo;
    this->mauSo = this->mauSo * ps.tuSo;

    this->RutGonPS();
    this->ChuanHoaPS();

    return *this;
}

int CPhanSo::UCLN(int a, int b)
{
    a = abs(a);
    b = abs(b);

    while (b != 0)
    {
        int r = a % b;
        a = b;
        b = r;
    }

    return a;
}

CPhanSo CPhanSo::RutGonPS()
{
    int ucln = UCLN(tuSo, mauSo);

    tuSo /= ucln;
    mauSo /= ucln;

    return *this;
}

CPhanSo CPhanSo::ChuanHoaPS()
{
    if (tuSo < 0 && mauSo < 0)
    {
        tuSo = -tuSo;
        mauSo = -mauSo;
    }

    if (tuSo > 0 && mauSo < 0)
    {
        tuSo = -tuSo;
        mauSo = -mauSo;
    }

    return *this;
}

void CPhanSo::TaoPhanSo(int tuSo, int mauSo)
{
    if (mauSo == 0)
    {
        cout << "Mau so khong hop le!";
    }
    else
    {
        this->tuSo = tuSo;
        this->mauSo = mauSo;
    }
}

void CPhanSo::InPhanSo()
{
    cout << tuSo << "/" << mauSo;
}

int main()
{
    CPhanSo ps, ps1, ps2;
    
    ps.TaoPhanSo(1, 5);
    ps1.TaoPhanSo(4, 10);
    cout<< "\n";
    
    ps2 = ps;
    ps2.CongPS(ps1);   
    ps2.InPhanSo();
    cout<< "\n";
    
    ps2 = ps;
    ps2.TruPS(ps1);   
    ps2.InPhanSo();
    cout<< "\n";
    
    ps2 = ps;
    ps2.NhanPS(ps1);   
    ps2.InPhanSo();
    cout<< "\n";
    
    ps2 = ps;
    ps2.ChiaPS(ps1);   
    ps2.InPhanSo();
    cout<< "\n";
    
    return 0;
}