Giải phương trình bậc 2 ax² + bx + c = 0
Chào các bạn, ở bài trước chúng ta đã giải phương trình bậc nhất rồi, bài này chúng ta sẽ giải phương trình bậc 2 nhé.
Chúng ta nhớ lại kiến thức về giải phương trình bậc 2 với a ≠ 0 như sau:
B1: Tính delta: Δ = b^2 – 4ac
B2: Kiểm tra delta cho từng trường hợp từ dễ đến khó
TH1: Δ < 0 => Phương trình vô nghiệm.
TH2: Δ = 0 => Phương trình có nghiệm kép
TH3: Δ > 0 => Phương trình có 2 nghiệm
Từ đây chúng ta sẽ dần biết phải làm như thế nào, nó dúng như các bước chúng ta làm. Trong này có 1 vấn đề là làm sao tính được căn bậc 2?. Các bạn có thể xem bài viết trong link của mình, nhưng đó là thuật toán đơn thuần, trong C cung cấp cho chúng ta thư viện math.h để tính căn bậc 2 bằng lệnh sqrt(x) – tính căn bậc 2 của số x rồi. Giờ chỉ việc code thôi.
/* * Giai phuong trinh bac 2: ax² + bx + c = 0 */ #include <stdio.h> #include <math.h> int main() { float a, b, c; float delta; printf("Enter a, b and c:\n"); scanf("%f%f%f", &a, &b, &c); delta = b * b - 4 * a * c; if(a == 0) { printf("You must enter a > 0\n"); return 0; // finish } if(delta < 0) { printf("Impossible equation (No result for x)\n"); } if(delta == 0) { float x = -b / (2 * a); printf("x = %.2f\n", x); } if(delta > 0) { float x1 = (-b + sqrt(delta) ) / (2 * a); float x2 = (-b - sqrt(delta) ) / (2 * a); printf("x1 = %.2f\n", x1); printf("x2 = %.2f\n", x2); } return 0; }
Chào anh , bài anh gửi rất có ích cho tụi em vì thế em rất mong có bài tiếp theo và vài ví dụ làm app của anh , nhưng em cũng xin lần sau viết code , xin anh viết chữ lớn tí , chữ hơi bị nhỏ ạ.
Em xin cảm ơn
Ah, chào bạn, đây là kích thước chữ mặc định, mình thấy như thế nhìn cũng phù hợp rồi, to lên chút nhiều khi nhìn nó xấu. 🙂 Cảm ơn bạn đã ủng hộ nhé.
float x1 = (-b + sqrt(delta) ) / (2 * a);
e chạy bị lỗi a ơi
à sr anh em nhầm đôi chút ^^!
float x1 = (-b + sqrt(delta) ) / (2 * a);
sao nó bị lỗi ở chỗ sqrt vậy ad
Bạn khai báo thư viện chưa?
Chào anh, cho em hỏi là tại sao nếu đổi float thành double thì kết quả sẽ cho ra kết quả bị sai trong khi các phép toán vẫn đúng vậy anh.
Cảm ơn anh trc
cái này có thể do sai số giữa 2 kiểu.