Sunday, June 22, 2014

Thực hành 9 - Bài 2


Đề bài : ThucHanh09_Class_GioiThieu.pdf

Cài đặt lớp SoHuuTi để biểu diễn một số hữu tỉ có dạng phân số a/b trong đó a là tử số , b là mẫu số (khác 0), và a,b là nguyên tố cùng nhau. Sử dụng khung chương trình định nghĩa để hoàn thiện định nghĩa các dữ liệu và hàm thành viên. ( SoHuuTi.cpp )
Sau đó tạo 1 mảng ngẫu ngiên các đối tượng kiểu SoHuuTi rồi sắp xếp theo thứ tự giảm dần.
____________________________________________________________________

Code : http://pastebin.com/S0yVy1AH  hoặc  SoHuuTi -bai2.cpp
____________________________________________________________________


#include <cstdlib>
#include <iostream>

using namespace std;

class SoHuuTi
{
public:
SoHuuTi();
~SoHuuTi();

void setSoHuuTi(int, int);
void inSoHuuTi();

void congSoHuuTi(const SoHuuTi&);
void truSoHuuTi(const SoHuuTi&);
void nhanSoHuuTi(const SoHuuTi&);
void chiaSoHuuTi(const SoHuuTi&);

bool soSanhSoHuuTi(const SoHuuTi&);
private:
        int tu;
        int mau;
void quyChuanSoHuuTi();
};

SoHuuTi::SoHuuTi()
{
    tu= rand();
    mau= rand()+1;
}

SoHuuTi::~SoHuuTi()
{
}

void SoHuuTi::setSoHuuTi(int tu, int mau)
{
    this->tu= tu;
    this->mau= mau;
}

void SoHuuTi::inSoHuuTi()
{
    this->quyChuanSoHuuTi();
    cout << tu << "/" << mau;
    cout << endl;
}
void SoHuuTi::congSoHuuTi(const SoHuuTi& a)
{
    tu= tu*a.mau + a.tu*mau;
    mau= mau * a.mau;
    quyChuanSoHuuTi();
}

void SoHuuTi::truSoHuuTi(const SoHuuTi& a)
{
    tu= tu*a.mau - a.tu*mau;
    mau= mau * a.mau;
    quyChuanSoHuuTi();
}

void SoHuuTi::nhanSoHuuTi(const SoHuuTi& a)
{
    tu= tu * a.tu;
    mau= mau * a.mau;
    quyChuanSoHuuTi();
}

void SoHuuTi::chiaSoHuuTi(const SoHuuTi& a)
{
    tu= tu * a.mau;
    mau= mau * a.tu;
    quyChuanSoHuuTi();
}  
void SoHuuTi::quyChuanSoHuuTi()
{
    int x= tu;
    int y= mau;
    while ( x!=y )
    {
        if ( x>y ) x-=y;
        else y-= x;
    }
    tu= tu/x;
    mau= mau/x;
}

bool SoHuuTi::soSanhSoHuuTi(const SoHuuTi& a)
{
    if ( tu * a.mau >= a.tu * mau ) return true;
    else return false;
}

void sapXepSoHuuTi(SoHuuTi *c,int x)
{
    int a,b;
    SoHuuTi tam;
    x= rand()% 20 + 2;
    cout << "Tao day ngau nhien: " << endl;
    for ( int i=0; i<x; i++ )
    {
        a= rand()%20;
        b= rand()%20 + 1;
        c[i].setSoHuuTi(a, b);
        c[i].inSoHuuTi();
    }
    for ( int i=0; i<x; i++ )
    {
        for (int j=i+1; j<x; j++)
        {
            if ( c[j].soSanhSoHuuTi(c[i]) )
            {
                tam= c[i];
                c[i]= c[j];
                c[j]= tam;
            }
        }
    }
    cout << "Day dc sap xep tu LON den NHO:" << endl;
    for ( int i=0; i<x; i++ )
    {
        c[i].inSoHuuTi();
    }
}
               
   
int main()
{
    srand( time(0));
    SoHuuTi a,b;
    a.setSoHuuTi(3,4);
    a.inSoHuuTi();
    b.setSoHuuTi(2,4);
    b.inSoHuuTi();
   
    int x;
    SoHuuTi c[20];
    sapXepSoHuuTi(c,x);
    cout << endl;
system("PAUSE");
return EXIT_SUCCESS;
}

BACK TO TOP