13/2/15

Một số thao tác cơ bản với cấu trúc Phân số

Cấu trúc Phân số và Số phức là 2 cấu trúc đơn giản nhất thường được dùng để minh họa kiểu cấu trúc trong C/C++. Thực hành viết các hàm thao tác với các cấu trúc này sẽ giúp quen dần với kiểu cấu trúc và là bước đệm để học lập trình hướng đối tượng. Các ví dụ sẽ được minh họa bằng ngôn ngữ C++.

Trước khi viết các hàm thao tác trên các cấu trúc Phân số, ta cần khai báo cấu trúc như sau:
struct Fraction
{
   int tu;
   int mau;
};

Các thao tác chủ yếu với Fraction:

Xuất một phân số
void OutputFraction(Fraction a)
{
   cout << a.tu <<"/"<<a.mau<<endl;
}

Lấy giá trị phân số
float ValueFraction(Fraction a)
{
   return (float) a.tu / a.mau;
}

Rút gọn phân số
Ta tìm ước chung lớn nhất của tử và mẫu, sau đó lần lượt lấy tử, mẫu chia cho ước chung lớn nhất đó
int UCLN(int a, int b)
{
   if (a < 0) a = -a; //Trường hợp phân số âm
   if (b < 0) b = -b;
   while (a != b)
      a > b ? a -= b : b -= a;
   return a;
}

Fraction ReduceFraction(Fraction a)
{
   int b = UCLN(a.tu, a.mau);
   a.tu /= b;
   a.mau /= b;
   return a;
}


Cộng 2 phân số
Fraction Add(Fraction a, Fraction b)
{
   Fraction c;
   c.tu = a.tu * b.mau + a.mau * b.tu;
   c.mau = a.mau * b.mau;
   return ReduceFraction(c); //Rút gọn sau khi cộng
}

Trừ 2 phân số
Fraction Sub(Fraction a, Fraction b)
{
   Fraction c;
   c.tu = a.tu * b.mau - a.mau * b.tu;
   c.mau = a.mau * b.mau;
   return ReduceFraction(c);
}

Nhân 2 phân số
Fraction Mul(Fraction a, Fraction b)
{
   Fraction c;
   c.tu = a.tu * b.tu;
   c.mau = a.mau * b.mau;
   return ReduceFraction(c);
}

Chia 2 phân số
Fraction Div(Fraction a, Fraction b)
{
   Fraction c;
   c.tu = a.tu * b.mau;
   c.mau = a.mau * b.tu;
   return ReduceFraction(c);
}

Nghịch đảo phân số
Fraction Reciprocate(Fraction a)
{
   Fraction c;
   c.tu = a.mau;
   c.mau = a.tu;
   return c;
}


Không có nhận xét nào:

Đăng nhận xét