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
giaiPTtrả về kiểuintchí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ì
giaiPTsẽ trả về 0 , đồng thời gán x1 = x2 =0 . - Nếu pt (1) có nghiệm kép thì
giaiPTsẽ trả về 1 , đồng thời gán x1 = x2 = -b/2a . - Nếu pt (1) có 2 nghiệm thì
giaiPTsẽ 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