Thiết kế lớp PhanSo ( Phân số )  gồm:

Các thuộc tính :    tử số và mẫu số   kiểu   int.

Các hàm xây dựng gồm :

+ Hàm xây dựng mặc nhiên :                          PhanSo();

+ Hàm xây dựng gồm nhiều đối số :               PhanSo(int  tu , int   mau);

Các hàm thành viên gồm :

+ Hàm nhập giá trị cho 1 phân số. Nếu phân số vừa nhập có mẫu số = 0 thì yêu cầu nhập lại.

+ Hàm hiển thị phân số theo dạng   tu / mau  hoặc  -tu/mau.

Yêu cầu: nếu tử số =0 thì chỉ in ra số 0, nếu mẫu số =1 thì chỉ in ra tử số.

+ Hàm nghịch đảo bản thân phân số                           void NghichDao();

+ Hàm tìm ra phân số nghịch đảo của 1 phân số        PhanSo  GiaTriNghichDao(); 

+ Hàm tính giá trị thực của phân số. Chẳng hạn phân số 1/2  có giá trị là  0.5

+ Hàm so sánh giá trị phân số với phân số  a .            int  SoSanh(PhanSo  a);

                  Kết quả = 0:    nếu 2 phân số bằng nhau, 

                                > 0:    nếu phân số đang xét lớn hơn a.

 <  0:    nếu phân số đang xét nhỏ hơn a.

+ Hàm cộng, trừ, nhân, chia  phân số với 1 phân số  a. Kết quả của hàm là 1 phân số.

                  Chẳng hạn:                  PhanSo  Cong(PhanSo  a); …

Viết hàm main() sử dụng lớp PhanSo :

+ Tạo phân số  a = 3/7 , b = 4/9 . In giá trị chúng ra màn hình.

+ Tạo 2 phân số   x  và   y . Nhập giá trị cho  x  và  y  từ bàn phím.

+ In giá trị nghịch đảo của  phân số  x   ra màn hình (không làm thay đổi giá trị của x).

+ Tính tổng của  x + y và in kết quả ra màn hình.

+ Nhập vào 1 danh sách gồm n phân số ( n : nhập từ bàn phím ).

+ Tính tổng  n  phân số đó.

+ Tìm phân số lớn nhất trong danh sách phân số trên.

+ Sắp xếp danh sách phân số theo thứ tự tăng dần.

#include <conio.h>
#include <iostream.h>
class PhanSo{
      int tu, mau;
      int UCLN(int, int);
      void RutGon();
      public:
             PhanSo(){              //Ham xay dung mac nhien
                      tu=0;
                      mau=1;
                      }
             PhanSo(int t, int m){  //Ham xay dung nhieu tham so
                        tu=t;
                        mau=m;
                      }
             PhanSo(const PhanSo & ps){   //Ham xay dung sao chep
                          tu=ps.tu;
                          mau=ps.mau;
             }
             void Nhap();
             void In();
             void NghichDao();
             PhanSo GTND();
             float GTthuc();
             PhanSo Cong(PhanSo);
             PhanSo Tru(PhanSo);
             PhanSo Nhan(PhanSo);
             PhanSo Chia(PhanSo);
             int SoSanh(PhanSo);
      };
int PhanSo::UCLN(int a, int b){
    int uc;
        if (a<b) uc=a;
        else uc=b;
    while(a%uc!=0 || b%uc!=0)
uc–;
    return uc;
}
void PhanSo::RutGon(){
     int t=UCLN(tu,mau);
     tu/=t;
     mau/=t;
     }
void PhanSo::Nhap(){
     while (1){
     cout << “\tNhap tu: “; cin >> tu;
     cout << “\tNhap mau: “; cin >> mau;
          if (mau!=0) break;
          cout << “\nNhap lai!”;
     }
}
void PhanSo::In(){
     if (tu==0) cout << “0”;
     else if (mau==1) cout << tu;
     else cout << tu << “/” << mau;
     }
void PhanSo::NghichDao(){
     int temp;
     tu=temp;
     tu=mau;
     mau=temp;
     }
PhanSo PhanSo::GTND(){
       PhanSo kq;
       kq.tu=mau;
       kq.mau=tu;
       return kq;
       }
float PhanSo::GTthuc(){
      return tu/mau;
      }
PhanSo PhanSo::Cong(PhanSo a){
       PhanSo kq;
       kq.tu=tu*a.mau + mau*a.tu;
       kq.mau=mau*a.mau;
       kq.RutGon();
       return kq;
       }
PhanSo PhanSo::Tru(PhanSo a){
       PhanSo kq;
       kq.tu=tu*a.mau – mau*a.tu;
       kq.mau=mau*a.mau;
       kq.RutGon();
       return kq;
       }
PhanSo PhanSo::Nhan(PhanSo a){
       PhanSo kq;
       kq.tu=tu * a.tu;
       kq.mau= mau * a.mau;
       kq.RutGon();
       return kq;
       }
PhanSo PhanSo::Chia(PhanSo a){
       PhanSo kq;
       kq.tu=tu*a.mau;
       kq.mau=mau*a.tu;
       kq.RutGon();
       return kq;
       }
int PhanSo::SoSanh(PhanSo  a) {
if((long)tu*a.mau==(long)mau*a.tu)  return 0;
if((long)tu*a.mau>(long)mau*a.tu)  return 1;
return -1;
}
int main(){
    PhanSo a(3,7);
    PhanSo b(4,9);
    cout <<“Phan so a=”; a.In();
    cout <<“\n\nPhan so b=”; b.In();
    PhanSo x, y;
    cout << “\n\n”;
    cout << “Nhap phan so x:” << endl;
    x.Nhap();
    cout << “\n\nNhap phan so y:” << endl;
    y.Nhap();
    cout <<“\nPhan so x=”; x.In();
    cout <<“\nPhan so y=”; y.In();
    cout << “\n\nNghich dao cua x la: “; x.GTND().In();
    cout << “\n\n”; x.In(); cout << ” + “; y.In(); cout << ” = “; x.Cong(y).In();
//Nhập mảng
    int n;
    PhanSo *ds;
    cout << “\n\nMang co bao nhieu phan tu?”; cin >> n;
    ds = new PhanSo[n];
    for (int i=0; i<n; i++){
        cout << “\nNhap phan tu thu ” << i+1 << ” : ” << endl;
        ds[i].Nhap();
        }
//In mảng
    cout << “\n\nDanh sach da nhap la: \n”;
    for (int i=0; i<n; i++)
   {cout << “\t”; ds[i].In(); cout << endl;}
    PhanSo Tong;
    for (int i=0; i<n; i++)
        Tong=Tong + Cong(ds[i]);
    cout << “\n\nTong cua ” << n << ” phan so la: “; Tong.In();
// Tim phan so lon nhat trong day
PhanSo  max = ds[0];
for(int i=1; i<n; i++)
if( max.SoSanh(ds[i])<0 )
max = ds[i];
    cout << “\n\nPhan so lon nhat la: “; max.In();
// Sap xep danh sach theo thu tu tang dan
for(int i=0; i<n-1; i++)
for(int j=i+1; j<n; j++)
if( ds[i].SoSanh(ds[j])>0 ) {
 PhanSo  temp = ds[i];
 ds[i] = ds[j];
 ds[j] = temp;
}
cout<<“\n\nDanh sach phan so sau khi sap xep”<<endl;
for(int i=0; i<n; i++)
    {cout << “\t”; ds[i].In(); cout << endl;}
    getch();
}