01/10/2018, 14:17

Kiểm tra số bất kỳ có là nghiệm của phương trình bậc 2

package BT1_PTBac2;

public class PTBac2 {
private int a;
private int b;
private int c;

PTBac2()
{
	
}
PTBac2(int a, int b, int c)
{
	this.a = a;
	this.b = b;
	this.c = c;
}
public double getA()
{
	return a;
}
public void setA(int a)
{
	this.a = a;
}
public double getB()
{
	return b;
}
public void setB(int b)
{
	this.b = b;
}
public double  getC()
{
	return c;
}
public void setC(int c)
{
	this.c = c;
}

public void GiaiPTBac2()
{
double delta;
double x;
delta = Math.pow(b,2) - 4ac;
if(delta < 0)
{
System.out.println(" vo nghiem “);
}
else if(delta == 0)
{
x = -b/(2a);
System.out.println(" x1 = x2 = "+x);
}
else
{
x = (-b + Math.sqrt(delta) )/ (2
a);
System.out.println(” co 2 nghiem x1 = "+x);
x = (-b - Math.sqrt(delta)/(2*a));
System.out.println("x2 = "+x);

}

}
public void KiemtraPT(double x)
{
if(axx + b* x + c == 0)
{
System.out.println(“La phuong trinh bac 2”);
}
else
System.out.println(“ko la phuong trinh bac 2”);

}
public void KiemTraNghiemX(double y)
{
double delta = Math.pow(b,2) - 4ac;

if(delta == 0 || delta > 0)
{
	System.out.println(y +" la nghiem  ");
}
else
	System.out.println(y +" ko la nghiem ");

}
public String toString()
{
return a+"X^2 + "+b+"X + “+c+ " = 0”;
}

}
package BT1_PTBac2;

public class TestPTBac2 {
public static void main(String []args)
{
PTBac2 [] pt;
pt = new PTBac2[5];
pt[0] = new PTBac2(1, 5, 1);
pt[1] = new PTBac2(9, 3, 9);
pt[2] = new PTBac2(2,-1, 2);
pt[3] = new PTBac2(6, 2, 6);
pt[4] = new PTBac2(5, 3, 7);
double x = -0.20871215252208009;
pt[0].KiemTraNghiemX(x);
pt[0].KiemtraPT(x);
for(int i = 0; i < 5; i++)
{
System.out.println("Phuong trinh thu "+(i+1)+ " la: "+pt[i] );
System.out.print("Phuong trinh thu "+(i+1));
pt[i].GiaiPTBac2();
}

}

}

Qúy Cô Màu Mè viết 16:21 ngày 01/10/2018

Mọi người có thể cho em hỏi, điều kiện để 1 số bất kỳ trở thành nghiệm của phương trình bậc 2 là gì?

Qúy Cô Màu Mè viết 16:34 ngày 01/10/2018

Em làm bài tập như trên ra nghiệm của phương trình bậc 2 nhưng sau đó em lấy nghiệm đó thử lại, thì ra kết quả kiệm đó lại ko phải là nghiệm của phương trình bậc 2!

Chế Tiệp Chân Khoa viết 16:25 ngày 01/10/2018
  • a khác 0 thì là pt bậc 2, phải test trước khi tính delta nếu ko em sẽ chia cho 0
  • Kiểm tra nghiệm thì phải thay nghiệm vào phương trình

Em về đọc lại sách toán.

Mặc khác, các kiểu số thực trong lập trình không có độ chính xác tuyệt đối, nên em ko thể so sánh bằng, mà phải so chênh lệch nhỏ hơn một sai số nào đó.

Vd:

ket_qua = a*x*x + b*x + c;
mong_doi = 0;
if (Math.abs(ket_qua - mong_doi) <= 0.00001) {
  System.out.println(x, 'la nghiem');
};
Qúy Cô Màu Mè viết 16:18 ngày 01/10/2018

Dạ,em cảm ơn anh ạ! sở dĩ em hỏi điều kiện là vì mặc dù em đã thử nhưng nó không bằng em cũng nghĩ đến trường hợp số thực ko tuyệt đối hoặc có khả năng nào là nó tự làm tròn

Qúy Cô Màu Mè viết 16:34 ngày 01/10/2018

em kiểm tra lại rồi và đúng rồi cảm ơn anh nhiều ạ!

HK boy viết 16:20 ngày 01/10/2018

điều kiện để 1 số bất kỳ trở thành nghiệm của phương trình bậc 2 là gì?

Là khi thay số đó vào x thì phương trình đúng. Chỉ cần đơn giản

read(x0)
if (a*x0*x0 + b*x0 + c equals to 0)
    print("rõ ràng đây là nghiệm")
else
    print("rõ ràng đây không phải là nghiệm")

cần gì phải code dài như sớ thế kia.

Không hiểu bạn học toán kiểu gì mà phải hỏi 1 câu hết sức cơ bản về toán thế này.

Qúy Cô Màu Mè viết 16:32 ngày 01/10/2018

em đã thế vào phương trình và nó ra kết quả không đúng có thể do nghiệm em tìm ra là số thực và đã bị làm tròn hoặc hạn chế kí tự nên em mới hỏi vậy, và em nghĩ anh chị ko nên nói chuyện như vậy.

Qúy Cô Màu Mè viết 16:19 ngày 01/10/2018

còn về việc viết bài thì em xin lỗi từ sau em sẽ rút kinh nghiệm, cảm ơn anh chị đã nhắc nhở!

Qúy Cô Màu Mè viết 16:33 ngày 01/10/2018

vả lại code dài vì bài tập có nhiều phần, em muốn chia sẻ để mọi người có thể biết được em có sai ở CLASS TEST HAY class PT ko thôi ạ!

Văn Dương viết 16:20 ngày 01/10/2018

Nghiệm là gì ?
Nghiệm là tọa độ tính theo X của điểm giao cắt giữa đồ thị hàm số và trục OX. Khi đó tọa độ Y = 0. (tự chế định nghĩa :))) )

=> Môt số là nghiệm khi thay nó vào X và thay Y = 0 thì được giá trị đúng.

Theo đề bài thì cứ thay nó vào X và nếu nó cho giá trị biểu thức là 0 thì đó là nghiệm.

HK boy viết 16:27 ngày 01/10/2018

hạn chế kí tự

Lần đầu nghe thấy vụ “hạn chế kí tự” với số thực.

Rõ ràng việc thay 1 số thực vào biểu thức rồi tính chắc chẵn sẽ cho kết quả bị sai số, trong trường hợp đó không ai so sánh 2 số thực trực tiếp bằng toán tử == cả. Nếu cố tình sử dụng == để so sánh thì 99% kết quả sẽ cho ra không phải nghiệm.

Nếu bạn không dùng so sánh trực tiếp mà vẫn bị sai kết quả thì up test lên đây.

Qúy Cô Màu Mè viết 16:24 ngày 01/10/2018

Dạ bài này thì em hiểu rồi ạ!

Bài liên quan
0