Xác định bài toán:•- Input: Các số thực a, b, c (a≠0).- Output: Các số thực X thoả mãn ax2 + bx + c = 0.- Ý tưởng:- Tính d = b2 - 4ac.- Lần lượt xét ba trường hợp cho giá trị d:nếu d <0 thì pt vô nghiệmnếu d = 0 thì kết luận phương trình có một nghiệm x =-b/2anếu d > 0 thì kết luận phương trình có hai nghiệm phân biệt là:x - (-b± √ d ) / 2a.Thuật toán:Mô tả thuật toán bằng cách liệt kê:Bước I. Nhập ba số a, b, c;Bước 2. d 4-(b*b - 4*a*c);Bước 3.nếu d < 0 thì đưa ra thông báo phương trình vô nghiệm rồi kết thúc;nếu d = 0 thì đưa ra thông báo phương trình có một nghiệm và tính nghiệmx = -b/(2*a), rồi kết thúc;
nếu (d> 0 thì đưa ra thông báo phương trình có hai nghiệm phân biệt, tính nghiệm X/= (-b + -√ d) / (2*a) và x2 = (-b - √ d ) / (2*a), rồi kết thúc;
Đề bài
Mô tả thuật toán tìm nghiệm của phương trình bậc hai tổng quát bằng cách liệt kê hoặc bằng sơ đồ khối.
Lời giải chi tiết
• Xác định bài toán:
- Input: Các số thực a, h, c (a≠0).
- Output: Các số thực X thoả mãn ax2 + bx + c = 0.
Xem thêm: V I Love Music - Vietnam'S Next Top Model
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àm sqrt()tại đây.
- Chúng ta tạo hàm giaiPT trả về kiểu int 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
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#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 biet\nx1=%.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++
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#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.