//1. Lớp phân số //1.1. Khai báo lớp phân số với các thuộc tính: tử số, mẫu số. //- Xây dựng hàm tạo không đối, hàm tạo có đối, hàm hủy một đối tượng phân số. //- Xây dựng các phương thức: nhập, xuất, rút gọn một đối tượng phân số //- Định nghĩa các toán tử +, -, *, / hai phân số. Thực hiện cộng, trừ, nhân, chia hai //phân số (kết quả phải được tối giản) và in kết quả ra màn hình //1.2. Xây dựng lớp phân số 2 kế thừa từ lớp phân số và bổ sung: //- Nạp chồng các toán tử: = (gán), > (lớn hơn), < (nhỏ hơn). //- Viết chương trình chính ứng dụng lớp phân số 2 để nhập một danh sách các đối //tượng là phân số (tối đa 10 phần tử). Sắp xếp lại danh sách đã nhập theo trật tự giảm //dần, tăng dần, tìm phân số có giá trị lớn nhất, nhỏ nhất. #include #include using namespace std ; class PhanSo { public: PhanSo(); PhanSo(int Tuso1, int Mauso1); ~PhanSo(); //- Xây dựng các phương thức: nhập, xuất, rút gọn một đối tượng phân số void NhapPS() { // std là thư viện của nhập xuất std::cout cout thuộc vào std std cout << endl <<"Moi Ban Nhap Vao Tu So "; cin >> TuSo ; cout << endl << "Moi Ban Nhap Vao Mau So "; cin >> MauSo; } void XuatPS() { cout << endl << "Phan So Co Dang " << TuSo << "/"<TuSo; PS.MauSo = this->MauSo; // để rút gọn được phân số thì phải tìm được UCLN /* a == b -> UCLN = a ; a > b -> UCL = a-b ; b > a -> UCLN = b - a ; nếu PS -a/b ; -2/4 ; a = -2 ; -> UCLN = 2 b = 4 ; b = 6 ; 8 */ a = abs(PS.TuSo); b = abs(PS.MauSo); while (a != b) { if(a > b) { //cách cấp 2 dùng // a = a-b ; // đây là cách đại học dùng a = a - b ; } else { b = b - a ; } } PS.TuSo = TuSo/a ; PS.MauSo = MauSo/a ; return PS ; } //- Định nghĩa các toán tử +, -, *, / hai phân số. Thực hiện cộng, trừ, nhân, chia hai //phân số (kết quả phải được tối giản) và in kết quả ra màn hình PhanSo operator +(PhanSo b) { PhanSo c ; c.TuSo = this->TuSo*b.MauSo + this->MauSo*b.TuSo ; c.MauSo = this->MauSo*b.MauSo ; return c ; } PhanSo operator -(PhanSo b) { PhanSo c ; c.TuSo = this->TuSo*b.MauSo - this->MauSo*b.TuSo ; c.MauSo = this->MauSo*b.MauSo ; return c ; } PhanSo operator *(PhanSo b) { PhanSo c ; c.TuSo = this->TuSo*b.TuSo ; c.MauSo = this->MauSo*b.MauSo ; c.RutGon(); return c ; } PhanSo operator /(PhanSo b) { PhanSo c ; c.TuSo = this->TuSo*b.MauSo ; c.MauSo = this->MauSo*b.TuSo ; c.RutGon(); return c ; } private: // xây dựng thêm phương thức get & set int TuSo , MauSo; }; //hàm tạo không tham số PhanSo::PhanSo() { TuSo = 0 ; MauSo = 0 ; } // hàm tạo có tham số PhanSo::PhanSo(int Tuso1, int Mauso1) { TuSo = Tuso1 ; MauSo = Mauso1; } PhanSo::~PhanSo() { // cout << } int main() { // xóa bộ nhớ đệm fflush(stdin) stdin <<<< chuỗi luồng vào // cách xóa bộ nhớ đệm khác xài hàm cin.ignore(); int TS ,MS ; PhanSo a , b; PhanSo c(5,7); a.NhapPS(); a.XuatPS(); b = a.RutGon() ; cout << endl <<"Phan so rut gon la"; b.XuatPS(); cout << endl << "Tong 2 PS la"; b = a + b ; b.XuatPS(); system("pause"); return 0 ; }