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