01/10/2018, 17:21

Tìm lỗi sai code giải pt trùng phương

public static void main(String[] args) {


//nhap du lieu cho cac bien
        Scanner sc = new Scanner(System.in);
        System.out.print("nhap a = ");
        int a = sc.nextInt();
        System.out.print("nhap b = ");
        int b = sc.nextInt();
        System.out.print("nhap c = ");
        int c = sc.nextInt();
        double t1, t2, x2, x3, x4;
        double delta = Math.pow(b, 2) - (4 * a * c);
        if (delta < 0) {
            System.out.print("phuong trinh vo nghiem
");
        } else {
            if (delta == 0) {
                t1 = -b / (2 * a);
                t2 = t1;
                if (t1 < 0 && t2 < 0) {
                    System.out.print("phuong trinh vo nghiem
");
                } else {
                    if (t1 >= 0) {
                        double x1 = Math.sqrt(t1);
                        x2 = -x1;
                        System.out.println("x1 = " + x1);
                        System.out.println("x2 = " + x2);
                    }
                    if (t2 >= 0) {
                        x3 = Math.sqrt(t2);
                        x4 = -x3;
                        System.out.println("x3 = " + x3);
                        System.out.println("x4 = " + x4);
                    }

                }
            }
        }if (delta>0){t1 = (-b+Math.sqrt(delta))/ (2 * a);
                t2 = (-b-Math.sqrt(delta))/ (2 * a);
                if (t1 < 0 && t2 < 0) {
                    System.out.print("phuong trinh vo nghiem
");
                } else {
                    if (t1 >= 0) {
                        double x1 = Math.sqrt(t1);
                        x2 = -x1;
                        System.out.println("x1 = " + x1);
                        System.out.println("x2 = " + x2);
                    }
                    if (t2 >= 0) {
                        x3 = Math.sqrt(t2);
                        x4 = -x3;
                        System.out.println("x3 = " + x3);
                        System.out.println("x4 = " + x4);
                    }
            
        }
            
        }
    }}

em đã thử đúng mọi phương án nhưng giải pt giải nghiệm không được ạ, cứ x1 =0, x2=0 , các bro giúp e với

Nguyễn Đình Anh viết 19:35 ngày 01/10/2018

PT Trùng phương có phải là PT bậc 4(a.x^4 + b.x^2 + c = 0) đúng không nhỉ ? Vậy theo mình nhớ cách giải như sau:

  • Đặt t = x^2 => PT trở thành: a.t^2 +b.t + c = 0.
  • Giải pt bậc 2 để tìm t.
  • Rút x theo t.

Mình chạy code của bạn thì không thấy có vấn đề gì cả (có thể là do mình chưa chạy hết các trường hợp có thể). Nhưng mình thấy đoạn code của bạn có rất nhiều lỗi sai và một số đoạn chưa được Clean cho lắm Có lẽ chính về mấy lỗi này mà bạn bị sai

double t1, t2, x2, x3, x4;

Mấy cái này không cần khai báo trước đâu.

t1 = -b / (2 * a);
t2 = t1;

Tại sao phải thêm biến t2 nữa trong khi 2 cái này bằng nhau ? Chỉ cần 1 biến t1 thôi và bỏ luôn đoạn

if (t2 >= 0)
{
   x3 = Math.sqrt(t2);
   x4 = -x3;
   System.out.println("x3 = " + x3);
   System.out.println("x4 = " + x4);
}

Mà bạn đã có 1 đoạn if(t1 < 0) rồi thì tại sao ở else lại phải kiểm tra xem nó có >=0 nữa @@

Sau khi tính ra denta thì sẽ dùng if else để kiểm tra điều kiện đúng không? Nhưng theo đoạn code của bạn là :

if(denta < 0)
{
   //code
} 
else
{
   if(denta == 0) 
   {
     //code
   {
}
if(denta > 0)
{
   //code
}

Nhưng như vậy thì sẽ bị thừa một cái if ở cuối @@ Tại sao không phải là:

if(denta < 0)
{
   //code
} 
else
{
   if(denta == 0) 
   {
     //code
   {
   else
  {
     //code
  }
}

Ngoài ra mình cũng muốn đưa ra một hướng khác để giải quyết bài toàn này một cách “hoàn hảo” hơn
Bạn hãy viết một void để trả về một Array or ArrayList chứa các nghiệm của PT. Làm như vậy sẽ giúp bạn biết được là có chính xác bao nhiều nghiệm để in ra đẹp mắt hơn. Nhỡ đâu t1 < 0t2 > 0 thì nó lại in ra

x3 = ...
x4 = ...

Nhưng mà đã có x1, x2 đâu đúng không

Nếu bạn có gì thắc mắc thì cứ Reply ở dưới và nếu có trường hợp nào mà nó in ra nghiệm sai thì cũng đăng lên để mọi người xem nhé

Bài liên quan
0