Giải bất phương trình bậc nhất sai testcase

Em có bài tập giải bất phương trình ax + b > 0 bằng c++, mà làm mãi vẫn bị sai là sao vậy mấy anh, chị.

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
	float a, b, x;
	cin >> a;
	cin >> b;
	x = -b / a;
	if (a != 0)
	{
		if (a > 0)
			cout << "x>" << setprecision(2) << fixed << x << endl;
		if (a < 0)
			cout << "x<" << setprecision(2) << fixed << x << endl;
	}
	else
	{
	if (b > 0)
	cout << "vsn" << endl;
	else
	cout << "vn" << endl;
	}
}

Có phải là x = -b/a không bạn?
Nhưng khi a = 0 thì sao?

3 Likes

if a != 0 thì else là a = 0 mà bạn

bài này xét ở tư duy làm toán thông thường, hay là hướng dẫn sgk đều hướng dẫn tách trường hợp

  1. trường hợp a = 0
  2. trường hợp a != 0

chứ không có sgk nào hướng dẫn tính x = -b/a trước rồi mới xét a cả

3 Likes

cái này mình gán cho biến x là -b/a để lúc xét a khỏ phài ghi lại là -b/a

Bạn để cái dòng x = -b / a vào trong if (a != 0) là xong. Lưu là code thường chạy từ trên xuống dưới.

k đc bạn ơi, vẫn bị sai testcase

Giải thuật của bạn có 1 vấn đề nữa, lấy giấy bút ra tính là thấy.

2 Likes

không biết có phải là vấn đề làm tròn hay không :rofl:
x > 1.522
nếu làm tròn thành x > 1.52 thì sẽ bị sai về mặt toán học
đề cũng không nói rõ vấn đề này

2 Likes

Mình đang nói tới vấn đề khác, nhưng công nhận là đề này không nói rõ vụ làm tròn.

Tiết lộ

Giải thuật này gặp vấn đề liên quan đến b:

  1. Giả sử bài này không xét đến chữ số thập phân thứ 3. Nếu chỉ xét mỗi a thì làm sao biết chắc x có lớn hơn số làm tròn của nó (giả sử gọi là y) không? Giải thuật trên chỉ đúng nếu b âm => x dương nếu a dương => x > y, và ngược lại. Ví dụ: 3,141 > 3,14 và -3,141 < -3,14. Nếu b dương thì sẽ sai.

  2. Ở trường hợp a = 0. Ngay cả khi b dương thì x vẫn bằng -b/a nên phương trình vô nghiệm. Chỉ khi b = 0 thì ax+b=0x+0=0 nên mới có vô số nghiệm.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?