Trong lập trình pascal để tinh căn bậc hai cảu một số ta chỉ cần dung hàm sqrt thật là đơn giản đúng không các bạn!!
Nhưng để tinh được một căn bậc hai ta phải dùng một thuật toán vô cùng ngắn gọn và đơn giản mà không cần sử dụng hàm sqrt!!!
Căn bậc hai của y được định nghĩa là số x sao cho: x^2 == y hay x = y /
x. Nếu x là kết quả thì x = y / x, còn nếu không kết quả sẽ phải là 1 số
x’ nằm trong khoảng x và y/x. Ta không biết số này là bao nhiêu, nhưng
ta có 1 cách để đoán lấy 1 số trong khoảng này đó là trung bình cộng!
Ví dụ: cần tính căn bậc 2 của 3. Ta đoán kết quả là 1.0. Kết quả này
không đúng rồi, nên đáp số sẽ nằm trong khoảng 1.0 và 3/1.0 = 2.0. Lấy
trung bình cộng lần 1 ta có kết quả là 1.5. Lại thử với 1.5 và 3/1.5 =
2.0 ta có kết quả là 1.75! Sau nhiều lần lặp ta sẽ có kết quả tiệm cận
với đáp số!
Vì ta không có kết quả chính xác, nên số lần lặp sẽ là vô
hạn. Tuy vậy tại mỗi bước lặp, ta sẽ thử xem kết quả đủ chính xác theo
yêu cầu chưa. Ví dụ nếu đáp số hiện tại là x = 1.73, x^2 = 2.99 và ta
chỉ cần độ chính xác đến 2 số sau dấu phẩy, thì 1.73 là đáp án phù hợp.
Do vậy ta sẽ có chương trình tính căn bậc 2 như sau:
program can_bac_hai;
uses crt;
var x,i:integer;
t:real;
begin
clrscr;
write('Nhap x: '); {hien thi cau lenh }
readln(x); {nhap so can tinh can }
t:=x / 2;
for i:=1 to x do {vong lap cho x}
if ((t*t-x)/2) <0 then
while ((t*t-x)/2)*-1 >=0.000001 do
t:=(x/t-t)/2+t
else
while (t*t-x)/2>=0.000001 do
t:=(x/t-t)/2+t;
writeln('Can bac 2 cua ',x,' la : ' ,t:2:2);
readln
end.
hay
Trả lờiXóa