Kiến thức

Kiểm tra số bất kỳ có là nghiệm của phương trình bậc 2-programming-Dạy Nhau Học

Bạn đang xem: Kiểm tra số bất kỳ có là nghiệm của phương trình bậc 2-programming-Dạy Nhau Học

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

java

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();
}

} 

}

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ì?

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!

  • 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'); }; 

3 Likes

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 :stuck_out_tongue: 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 :smile:

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

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.

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.

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ở!

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 ạ!

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.

1 Like

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.

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

Chuyên mục: Kiến thức

Related Articles

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Check Also
Close
Back to top button