Метод половинного деления – это один из самых простейших и самых надёжных методов решения уравнений.
Обычно метод половинного деления в программах реализуют следующим образом:
{ Листинг 1.1 Turbo Pascal }
uses crt;
function f(x:real):real;
begin f:=x*x-16; end;
var
dx,x,y,a,b, ya,yb :real;
Begin clrscr;
dx:=0.1; a:=1; b:=11;
repeat
ya:=f(a); yb:=f(b);
x:=(a+b)/2;
y:=f(x);
if y*ya>0 then a:=x;
if y*yb>0 then b:=x;
if y=0 then
begin a:=x; b:=x; end;
until b-a<dx;
writeln(' x=',x:12:3, ' y=',y:7:3);
readln;
end.
Но если поставить задачу написать тот же метод без оператора IF, то это можно сделать так:
{ Листинг 2.1 Turbo Pascal }
uses crt;
function f(x:real):real;
begin f:=x*x-16; end;
function sign(x:real):integer;
begin
if x>0 then sign:=1; { этот "иф" не считается, то есть мы его как бы не "видим" }
if x=0 then sign:=0;
if x<0 then sign:=-1;
end;
var
dx,x :real; t:array[-1..1]of real;
Begin clrscr;
dx:=0.1;
t[-1]:=1; t[1]:=11; t[0]:=t[-1]-9;
repeat
x:=(t[-1]+t[1])/2;
t[ sign( f(x)*t[1] ) ]:=x;
until (t[1]-t[-1]<dx)OR(t[0]>t[-1]);
writeln('x=',x:12:3, ' y=',f(x):7:3);
readln;
end.
Получилась симпатичная программа…
Какая из этих двух маленьких программ лучше, сказать трудно. Это, так сказать, дело вкуса.
Павел Сапунов
15 декабря 2008 года
|