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.

viết 20:54 ngày 30/09/2018

có thấy sai chỗ nào đâu? @_@

có thể là thiếu thư viện ko compile được?
#include <cstdlib>

Nguyễn Văn Dũng viết 20:50 ngày 30/09/2018

Cao thủ @ltd có thể giúp mình bài này được không ạ? Haizzz

Nguyễn Văn Dũng viết 21:01 ngày 30/09/2018

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?

Nguyễn Văn Dũng viết 20:49 ngày 30/09/2018

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.

Gió viết 21:02 ngày 30/09/2018

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;
}

Nguyễn Văn Dũng viết 20:52 ngày 30/09/2018

Ý 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.

Gió viết 21:02 ngày 30/09/2018

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.

Bài liên quan
0