Hôm nay chúng ta sẽ cùng Lập trình không khó tìm hiểu về cách giải hệ phương trình bậc nhất 2 ẩn bằng code C/C++. Trước khi đi vào phần giải bài toán này, hãy cùng tìm hiểu xem hệ phương trình bậc nhất 2 ẩn là gì.
Trong các lớp trước, chúng ta đã được học các phương pháp giải hệ phương trình như: phương pháp thế, phương pháp đặt ẩn phụ,... Tuy nhiên, liệu trong C++ ta có thể sử dụng lại những phương pháp này không? Câu trả lời là có, nhưng mỗi phương pháp đều có những ưu nhược điểm riêng. Ví dụ, nếu ta rút x trong hệ phương trình x = (c1 - b1y) / a1, nhưng nếu a1 bằng 0 thì sao? Có phải bạn phải viết từng dòng if else để rút thế không? Nếu bạn làm như vậy, chương trình của bạn sẽ trở nên phức tạp hơn rất nhiều. Vì vậy, mình sẽ giới thiệu đến các bạn một phương pháp giải mới.
Giải hệ phương trình bậc nhất bằng phương pháp Cramer
Các bạn có thể tìm hiểu thêm về phương pháp Cramer tại đây.
Từ đây, ta chỉ cần tính các định thức D, Dx, Dy là xong. Có một số trường hợp có thể xảy ra:
- Nếu định thức D = 0, thì phương trình có thể không có nghiệm hoặc có vô số nghiệm. Nếu Dx = Dy = 0, thì phương trình có vô số nghiệm. Ngược lại, phương trình trên không có nghiệm.
- Nếu định thức D ≠ 0, thì hệ phương trình luôn có nghiệm duy nhất với x = Dx/D và y = Dy/D.
Nào, chúng ta cùng bắt tay vào viết chương trình thôi!
Chương trình giải hệ phương trình bậc nhất 2 ẩn
Dưới đây là chương trình tham khảo để giải hệ phương trình bậc nhất 2 ẩn. Mình khuyên các bạn nên tự viết trước khi xem source code.
Code C:
#include
int main(){
int a1, b1, c1, a2, b2, c2;
float D, Dx, Dy, x, y;
printf("a1*x + b1*y = c1\n");
printf("a2*x + b2*y = c2\n");
printf("Nhập a1: "); scanf("%d", &a1);
printf("Nhập b1: "); scanf("%d", &b1);
printf("Nhập c1: "); scanf("%d", &c1);
printf("Nhập a2: "); scanf("%d", &a2);
printf("Nhập b2: "); scanf("%d", &b2);
printf("Nhập c2: "); scanf("%d", &c2);
D = a1 * b2 - a2 * b1;
Dx = c1 * b2 - c2 * b1;
Dy = a1 * c2 - a2 * c1;
if (D == 0) {
if (Dx + Dy == 0)
printf("Hệ phương trình có vô số nghiệm");
else
printf("Hệ phương trình vô nghiệm");
}
else {
x = Dx / D;
y = Dy / D;
printf("Hệ phương trình có nghiệm (x, y) = (%d, %d)", x, y);
}
return 0;
}
Code C++:
#include
using namespace std;
int main(){
int a1, b1, c1, a2, b2, c2;
float D, Dx, Dy, x, y;
cout "a1*x + b1*y = c1" endl;
cout "a2*x + b2*y = c2" endl;
cout "Nhập a1: "; cin >> a1;
cout "Nhập b1: "; cin >> b1;
cout "Nhập c1: "; cin >> c1;
cout "Nhập a2: "; cin >> a2;
cout "Nhập b2: "; cin >> b2;
cout "Nhập c2: "; cin >> c2;
D = a1 * b2 - a2 * b1;
Dx = c1 * b2 - c2 * b1;
Dy = a1 * c2 - a2 * c1;
if (D == 0) {
if (Dx + Dy == 0)
cout "Hệ phương trình có vô số nghiệm";
else
cout "Hệ phương trình vô nghiệm";
}
else {
x = Dx / D;
y = Dy / D;
cout "Hệ phương trình có nghiệm" endl;
cout "x = " x endl;
cout "y = " y;
}
system("pause");
return 0;
}
Sau khi chạy chương trình, ta có kết quả như sau:
a1x + b1y = c1 a2x + b2y = c2 Nhập a1: 2 Nhập b1: 1 Nhập c1: 4 Nhập a2: 3 Nhập b2: 2 Nhập c2: 7 Hệ phương trình có nghiệm x = 1 y = 2
Các bạn có thể tự tính lại để kiểm tra xem đúng không nhé ^_^
Bài viết của mình đến đây là kết thúc. Cảm ơn các bạn đã theo dõi!