Cách giải phương trình bậc 2 thì chúng ta đã được học ở lớp dưới rồi phải không nào ? Vậy giải phương trình bậc 2 trong C/C++ thì sẽ như thế nào ? Hôm nay chúng ta sẽ cùng tìm hiểu.
Cách giải phương trình bậc 2
Phương trình bậc 2 là phương trình có dạng: ax² +bx + c = 0. (a≠0) (1)
Ở các lớp dưới ta đã có phương pháp giải bằng cách tính delta:
- Đầu tiên tính delta = b² – 4ac
- Nếu delta < 0 thì kết luận vô nghiệm
- Nếu delta = 0 thì có nghiệm kép
- Nếu delta > 0 thì sẽ có 2 nghiệm phân biệt
Ý tưởng
- Dùng một vòng
do while
để nhập a, b, c nếu a = 0, thì nhập lại. - Chúng ta dùng hàm
sqrt()
trong thư viện math.h để tính căn delta hoặc tính căn không dùng hàmsqrt()
tại đây. - Chúng ta tạo hàm
giaiPT
trả về kiểuint
chính là số nghiệm của phương trình (1). - Chúng ta sẽ đưa tham chiếu 2 biến x1 , x2 vào hàm
giaiPT
để gán giá trị hai nghiệm. - Nếu pt (1) vô nghiện thì
giaiPT
sẽ trả về 0 , đồng thời gán x1 = x2 =0 . - Nếu pt (1) có nghiệm kép thì
giaiPT
sẽ trả về 1 , đồng thời gán x1 = x2 = -b/2a . - Nếu pt (1) có 2 nghiệm thì
giaiPT
sẽ trả về 2 , gán x1 = (-b+√delta ) / 2a x = (-b-√delta ) / 2a .
Code C
#include<stdio.h> #include<math.h> int giaiPT(float a, float b, float c,float &x1, float &x2){ float delta = b*b - 4*a*c; if(delta<0){ x1=x2=0.0; return 0; } else if(delta==0){ x1 = x2 = -b/(2*a); return 1; } else{ delta = sqrt(delta); x1 = (-b + delta) / (2*a); x2 = (-b - delta) / (2*a); return 2; } } int main(){ float a,b,c; float x1,x2; do{ printf("Nhap a (a!=0): "); scanf("%f",&a); printf("Nhap b: "); scanf("%f",&b); printf("Nhap c: "); scanf("%f",&c); } while(!a);// Nếu a=0 thì nhập lại int numNo = giaiPT(a,b,c,x1,x2); if(numNo == 0) { printf("Phuong trinh da cho vo nghiem"); } else if(numNo == 1){ printf("Phuong trinh da cho co nghiem kep x=%.4f",x1); } else{ printf("Phuong trinh da cho co hai nghiem phan bietnx1=%.4f nx2=%.4f",x1,x2); } }
Nhap a (a!=0): 3 Nhap b: -5 Nhap c: 2 Phuong trinh da cho co hai nghiem phan biet x1=1.0000 x2=0.6667
Code C++
#include<iostream> #include<math.h> using namespace std; int giaiPT(float a, float b, float c,float &x1, float &x2){ float delta = b*b - 4*a*c; if(delta<0){ x1=x2=0.0; return 0; } else if(delta==0){ x1 = x2 = -b/(2*a); return 1; } else{ delta = sqrt(delta); x1 = (-b + delta) / (2*a); x2 = (-b - delta) / (2*a); return 2; } } int main(){ float a,b,c; float x1,x2; do{ cout<<"Nhap a (a!=0): "; cin>>a; cout<<"Nhap b: "; cin>>b; cout<<"Nhap c: "; cin>>c; } while(!a); int numNo = giaiPT(a,b,c,x1,x2); if(numNo ==0 ) { cout<<"Phuong trinh da cho vo nghiem"; } else if(numNo==1){ cout<<"Phuong trinh da cho co nghiem kep x=%.4f" << x1; } else{ cout<<"Phuong trinh da cho co hai nghiem phan biet"<<endl; cout<< "x1=" << x1<<endl; cout<< "x2=" << x2<<endl; } }
Nhap a (a!=0): 3 Nhap b: -5 Nhap c: 2 Phuong trinh da cho co hai nghiem phan biet x1=1 x2=0.666667
Bài học của mình đến đây là kết thúc.
Để lại một bình luận