Code giải phương trình bậc 2 tổng quát bị sai

E mới đang học java và được cô giao cho bài tập là giải pt bậc 2 và biện luận cho nó
em làm hết rồi nhưng thử th a=0 b=0 c=0 thì nó lại ra cả 2 đáp án vì cả 2 ápáp án đó đều thỏa mãn cả
nên e k biết làm sao để loại bỏ hết ac giúp em với.


bên trên là bài e đang làm ạ

vì chỉ đc post 1 ảnh nên e post cái ảnh đầu ở đây ạ

Why do you post image instead of code?
No code no help

1 Like
import java.util.Scanner;

public class Dat_16 {

	
	public static void main(String[] args) { 
		double a, b, c, x, k1, k2, q, s, h, t;// x là đelta, k1 là nghiệm 1, k2 là nghiệm 2  , q là nghiệm nếu x=0,s là nghiệm kép , h là a nhân b, t là b nhân c
		Scanner banphim = new Scanner(System.in);
		System.out.println("Giải phương trình ax^2+bx+c=0");
		System.out.print("Hãy nhập số a: ");
		a = banphim.nextDouble();
		System.out.print("Hãy nhập số b: ");
		b = banphim.nextDouble();
		System.out.print("Hãy nhập số c: ");
		c = banphim.nextDouble();
		x = b*b-4*a*c;
		k1 = (-b-Math.sqrt(x))/(2*a);
		k2 = (-b+Math.sqrt(x))/(2*a);
		q = -c/(b*2);
		s = -b/(2*a);
		h = a*b;
		t = b*c;
				
		if((h+c)==0)
			System.out.println("Phương trình có vô số nghiệm");
		else
			if(a==0)
				System.out.println("Xét b");
			if((t+a)==0)
				System.out.println("Phương trình vô nghiệm");
			else
			{
                if(a==0)
		        {
			    System.out.println("Phương trình có một nghiệm");
			    System.out.println("Nghiệm của phương trình là: "+q);
		        }
		        else{
		            if(a!=0)
		            {
			            System.out.println("Xét delta");
			            System.out.println("Delta bằng: "+x);
		            }
		            if(x==0)
		            {
			            System.out.println("Phương trình có nghiệm kép");
			            System.out.println("Nghiệm của phương trình là: "+s);
		            }
		            if(x>0)
		            {
			            System.out.println("Phương trình có hai nghiệm phân biệt");
			            System.out.println("Nghiệm thứ nhất là: "+k1);
			            System.out.println("Nghiệm thứ hai là: "+k2);
		            }
		            else
			            System.out.println("Phương trình vô nghiệm");
		            }
		    }

mã của nó đấy ạ anh giúp em với huhu

Format lại code đi bạn ê, thử đặt mình vào địa vị của người khác xem code lung tung thế kia thì có đọc được không

3 Likes

e sửa lại code rồi đó anh, anh xem sao giúp e với

Chia hẳn trường hợp a == b == c == 0 ra. Tại các trường hợp bạn code không rõ ràng, chứ pt bậc 2 xét ra chỉ cần xét hệ số 1 cách kĩ càng thôi.

P/s: có mỗi code pt bậc 2 mà bạn đặt gì tùm lum biến thế :expressionless:

@@ không được bạn ơi mình dể th là
if(a==b==c==0)
máy báo lỗi

Có ai bảo bạn đặt thế này đâu :expressionless: bạn phải code theo ngôn ngữ lập trình chứ, mình để dòng đó theo ngôn ngữ (nửa) tự nhiên mà :v

@@
mình k có biết thế nên mình để cái đó thành
là if((a+b+c)(a+c+b)(a+b+c)==0)
thì k biết có đc k nhỉ

Lạy cái suy nghĩ của bạn :expressionless: Nghĩ cái quái gì mà kinh dị thế, bài toán lớp 8 mà vẽ ra đủ thứ trên giời dưới biển :expressionless: Có mỗi mấy trường hợp như a = 0, a != 0,… thôi mà không xét nổi à?

Về mặt toán học

== (a + b + c)^3

--> (a + b + c) ^ 3 == 0 <-> a + b + c == 0

a + b + c == 0 chẳng thuộc về trường hợp nào cả. Vì

a = 0, b = 0, c = 0 --> vô số nghiệm, khỏi bàn cãi
a = 0, b = 1, c = -1 -> 1 nghiệm
a = 1, b = 1, c = -2 -> wtf?
a = 96, b = 69, c = -165 -> wtf wtf?

tại nếu k xét mấy cái th đó thì mình chỉ việc xóa các dòng code đó đi là đúng r @@
kiểu mình muốn là nhập kiểu gì nó cũng ra (tăng độ khó cho game :v) nên làm vậy @@

Thì bạn chỉ việc code tất cả các trường hợp thôi có gì đâu? Mà giải phương trình bậc 2 đâu phải là việc của những ông đoạt giải Nobel hay Fields mới làm được mà phải khó?

Vốn dĩ bài rất đơn giản, nhưng bạn đang vẽ ra quá nhiều thứ phức tạp mà vẫn thiếu trường hợp.

uhm để mình làm lại xem sao @@
cảm ơn bạn nhé :smile:

else if lồng te le từa lưa zạ >"<

1 Like

Thực ra hệ số đầu bằng 0 là trường hợp suy biến rồi :smiley: cứ if theo đó sẽ đủ trường hợp.

1 Like

Giải phương trinh bâc 1 được chưa, chưa thì giai pt bậc 1 trước đi.
nếu a == 0, thì giai phuong trinh bac 1
a <> 0 giai phuong trinh bac 2.
Nhìn code chú loạn quá như tâm chú vậy

1 Like

cảm ơn các anh e sửa lại đc r hehe. Tại xét th k kĩ nên có mấy cái code bị thừa
chỉnh lại 1 xíu là đc r :1234:

Sao bác làm dài dòng thế nhỉ, chỉ cần xét a:
+a=0: Xét b
+ b=0: c=0 => vô số nghiệm, c!=0 => vô nghiệm
+ b!=0: x=-c/b;
+a!=0: tìm delta
+d=0: 1 nghiệm -b/2a
+d<0: vô nghiệm
+d>0: 2 nghiệm

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