01/10/2018, 11:43

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 ạ

Nguyễn Trịnh Đạt viết 13:55 ngày 01/10/2018

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

Quân viết 13:57 ngày 01/10/2018

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

Nguyễn Trịnh Đạt viết 13:54 ngày 01/10/2018
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");
		            }
		    }
Nguyễn Trịnh Đạt viết 13:56 ngày 01/10/2018

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

Quân viết 13:53 ngày 01/10/2018

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

Nguyễn Trịnh Đạt viết 13:51 ngày 01/10/2018

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

HK boy viết 13:54 ngày 01/10/2018

a=0 b=0 c=0

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ế

Nguyễn Trịnh Đạt viết 13:51 ngày 01/10/2018

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

HK boy viết 13:47 ngày 01/10/2018

@@ 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 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

Nguyễn Trịnh Đạt viết 13:49 ngày 01/10/2018

@@
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ỉ

HK boy viết 13:51 ngày 01/10/2018

Lạy cái suy nghĩ của bạn 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 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)(a+c+b)(a+b+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?
Nguyễn Trịnh Đạt viết 13:49 ngày 01/10/2018

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 @@

HK boy viết 13:46 ngày 01/10/2018

kiểu mình muốn là nhập kiểu gì nó cũng ra

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.

Nguyễn Trịnh Đạt viết 13:59 ngày 01/10/2018

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

hunter viết 13:53 ngày 01/10/2018

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

rogp10 viết 13:57 ngày 01/10/2018

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

Nguyen Ca viết 13:48 ngày 01/10/2018

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

Nguyễn Trịnh Đạt viết 13:50 ngày 01/10/2018

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

The Pr Ince viết 13:53 ngày 01/10/2018

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

Bài liên quan
0