Phân số là một dạng bài tập cơ bản giúp cho việc luyện tập code lập trình C/C++. Trong bài viết này, chúng ta sẽ khám phá cách giải quyết các bài toán phân số bằng lập trình hướng đối tượng (OOP) trong C/C++. Hãy cùng tìm hiểu các yêu cầu và phương pháp giải quyết từng bài toán liên quan đến phân số.
Xây dựng lớp phân số với các thuộc tính và phương thức ban đầu
Trước tiên, chúng ta cần xây dựng một lớp để đại diện cho phân số. Một phân số gồm hai thành phần chính là tử số và mẫu số. Vì vậy, chúng ta sẽ tạo một lớp PhanSo
với hai thuộc tính là tuSo
và mauSo
. Dưới đây là mã nguồn cho lớp PhanSo
ban đầu:
class PhanSo { public: int tuSo; int mauSo; };
Xây dựng phương thức nhập xuất cho phân số
Để nhập và xuất giá trị của một phân số, chúng ta có thể sử dụng phương thức nhapPhanSo
và xuatPhanSo
như sau:
void nhapPhanSo(PhanSo &p) { cout << "Nhap tu so: "; cin >> p.tuSo; cout << "Nhap mau so: "; cin >> p.mauSo; } void xuatPhanSo(PhanSo p) { cout << p.tuSo << "/" << p.mauSo << endl; }
Xây dựng phương thức rút gọn phân số
Để rút gọn phân số, chúng ta cần tìm ước chung lớn nhất (ƯCLN) của tử số và mẫu số, sau đó chia tử số và mẫu số cho ước chung đó. Dưới đây là mã nguồn cho phương thức rutGonPhanSo
:
int timUCLN(int a, int b) { if (b == 0) return a; return timUCLN(b, a % b); } void rutGonPhanSo(PhanSo &p) { int ucln = timUCLN(p.tuSo, p.mauSo); p.tuSo /= ucln; p.mauSo /= ucln; }
Xây dựng phương thức quy đồng phân số
Để quy đồng hai phân số, chúng ta nhân tử số của phân số này với mẫu số của phân số kia, và mẫu số chung sẽ là tích của hai mẫu số. Dưới đây là mã nguồn cho phương thức quyDongPhanSo
:
void quyDongPhanSo(PhanSo &p1, PhanSo &p2) { int mauSoChung = p1.mauSo * p2.mauSo; p1.tuSo *= p2.mauSo; p2.tuSo *= p1.mauSo; p1.mauSo = p2.mauSo = mauSoChung; }
Xây dựng phương thức cộng hai phân số
Để cộng hai phân số, chúng ta cần quy đồng phân số và sau đó thực hiện phép cộng tử số với tử số và mẫu số với mẫu số. Dưới đây là mã nguồn cho phương thức congHaiPhanSo
:
PhanSo congHaiPhanSo(PhanSo p1, PhanSo p2) { PhanSo kq; quyDongPhanSo(p1, p2); kq.tuSo = p1.tuSo + p2.tuSo; kq.mauSo = p1.mauSo; return kq; }
Xây dựng phương thức trừ hai phân số
Để trừ hai phân số, chúng ta cần quy đồng phân số và sau đó thực hiện phép trừ tử số với tử số và mẫu số với mẫu số. Dưới đây là mã nguồn cho phương thức truHaiPhanSo
:
PhanSo truHaiPhanSo(PhanSo p1, PhanSo p2) { PhanSo kq; quyDongPhanSo(p1, p2); kq.tuSo = p1.tuSo - p2.tuSo; kq.mauSo = p1.mauSo; return kq; }
Xây dựng phương thức nhân hai phân số
Để nhân hai phân số, chúng ta chỉ cần nhân tử số với tử số và mẫu số với mẫu số. Dưới đây là mã nguồn cho phương thức nhanHaiPhanSo
:
PhanSo nhanHaiPhanSo(PhanSo p1, PhanSo p2) { PhanSo kq; kq.tuSo = p1.tuSo * p2.tuSo; kq.mauSo = p1.mauSo * p2.mauSo; return kq; }
Xây dựng phương thức chia hai phân số
Để chia hai phân số, chúng ta cần nhân tử số của phân số chia với mẫu số của phân số bị chia, và mẫu số được tính bằng cách nhân mẫu số của phân số chia với tử số của phân số bị chia. Dưới đây là mã nguồn cho phương thức chiaHaiPhanSo
:
PhanSo chiaHaiPhanSo(PhanSo p1, PhanSo p2) { PhanSo kq; kq.tuSo = p1.tuSo * p2.mauSo; kq.mauSo = p1.mauSo * p2.tuSo; return kq; }
Chương trình mẫu hoàn chỉnh
Dưới đây là chương trình mẫu hoàn chỉnh cho bài tập phân số trong lập trình:
#include using namespace std; class PhanSo { public: int tuSo; int mauSo; }; int timUCLN(int a, int b) { if (b == 0) return a; return timUCLN(b, a % b); } void nhapPhanSo(PhanSo &p) { cout << "Nhap tu so: "; cin >> p.tuSo; cout << "Nhap mau so: "; cin >> p.mauSo; } void xuatPhanSo(PhanSo p) { cout << p.tuSo << "/" << p.mauSo << endl; } void rutGonPhanSo(PhanSo &p) { int ucln = timUCLN(p.tuSo, p.mauSo); p.tuSo /= ucln; p.mauSo /= ucln; } void quyDongPhanSo(PhanSo &p1, PhanSo &p2) { int mauSoChung = p1.mauSo * p2.mauSo; p1.tuSo *= p2.mauSo; p2.tuSo *= p1.mauSo; p1.mauSo = p2.mauSo = mauSoChung; } PhanSo congHaiPhanSo(PhanSo p1, PhanSo p2) { PhanSo kq; quyDongPhanSo(p1, p2); kq.tuSo = p1.tuSo + p2.tuSo; kq.mauSo = p1.mauSo; return kq; } PhanSo truHaiPhanSo(PhanSo p1, PhanSo p2) { PhanSo kq; quyDongPhanSo(p1, p2); kq.tuSo = p1.tuSo - p2.tuSo; kq.mauSo = p1.mauSo; return kq; } PhanSo nhanHaiPhanSo(PhanSo p1, PhanSo p2) { PhanSo kq; kq.tuSo = p1.tuSo * p2.tuSo; kq.mauSo = p1.mauSo * p2.mauSo; return kq; } PhanSo chiaHaiPhanSo(PhanSo p1, PhanSo p2) { PhanSo kq; kq.tuSo = p1.tuSo * p2.mauSo; kq.mauSo = p1.mauSo * p2.tuSo; return kq; } int main() { PhanSo p1, p2; cout << "Nhap phan so thu nhat:" << endl; nhapPhanSo(p1); cout << "Nhap phan so thu hai:" << endl; nhapPhanSo(p2); cout << "Phan so thu nhat: "; xuatPhanSo(p1); cout << "Phan so thu hai: "; xuatPhanSo(p2); cout << "Tong hai phan so: "; xuatPhanSo(congHaiPhanSo(p1, p2)); cout << "Hieu hai phan so: "; xuatPhanSo(truHaiPhanSo(p1, p2)); cout << "Tich hai phan so: "; xuatPhanSo(nhanHaiPhanSo(p1, p2)); cout << "Thuong hai phan so: "; xuatPhanSo(chiaHaiPhanSo(p1, p2)); return 0; }
Với các phương thức này, bạn có thể thực hiện các phép toán cơ bản trên phân số và thực hiện các bài tập lập trình liên quan đến phân số trong C/C++.