30/09/2018, 18:47
Tính căn bậc hai bằng vòng lặp
Chương trình của mình như sau:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double a, b, d, kq;
cout << "Nhap vao gia tri can tinh: " << endl;
cin >> a;
b = a;
d = 0;
kq = (b + d) / 2;
while (abs (kq * kq - a) > 0.001){
if (kq * kq > a) {
b = kq;
}
else {
d = kq;
}
kq = (b + d) / 2;
}
cout << "sqrt(" << a << ") = " << kq;
return 0;
}
Cho mình hỏi là mình sai ở chỗ nào và sửa lại như thế nào cho đúng. Xin cảm ơn mọi người.
Bài liên quan
có thấy sai chỗ nào đâu? @_@
có thể là thiếu thư viện ko compile được?
#include <cstdlib>
Cao thủ @ltd có thể giúp mình bài này được không ạ? Haizzz
Cảm ơn rất nhiều. Vậy bạn nghĩ sao về ý tưởng của mình. Nó có bị sai lệch chỗ nào không?
Nói chung là mình thì lại thấy mình code không sai nhưng mà lại không ra được kết quả đúng nên hơi nghi ngờ bản thân.
Dùng thuật toán newton hay hơn là tìm kiếm nhị phân này.
#include
#include
using namespace std;
int main() {
double x,y,a;
cin>>a;
x=0;y=a;
while(abs(y-x)>0.0001){
x=y;
y=(y+a/y)/2;
}
cout<<x<<endl;
return 0;
}
Ý mình là mình muốn làm cách này xem thế nào. Mình nghĩ là cách của mình không sai.
Cách này có thể tính căn của số >1 thôi, còn số < 1 nó không hội tụ nên bị lặp vô hạn.