red2003
Если целочисленный, то исправь real на integer.
Вот тебе вторая задачка:
program test2;
function f(const x:real):real;
begin
f:=cos (x-exp(x));
end;
procedure root(const a0,b0,tol:real;var _root:real);
var a,b,c,delta:real;
{ a0 < b0 !!! and root exists}
begin
a:=a0;
b:=b0;
repeat
c:=(a+b)/2;
if (f(a)*f(c))<0 then
b:=c
else
a:=c;
delta:=abs(f(c));
until (delta<tol);
_root:=c;
end;
{main}
var x,a,b,tol:real;
begin
tol:=1e-06;
a:=0;
b:=2;
root(a,b,tol,x);
writeln ('root=',x);
end.
Только если будешь подставлять другие функции убедись, что они на заданном промежутке имеют 1 корень и переменная a содержит левый конец интервала, а переменная b -- правый конец интервала. В противном случае у тебя программа зависнет.
(т.е. можно написать умную прогу, но, по-моему, это не требуется)
Добавлено
red2003
Цитата:
А это что за зверь???
...положительных элементов массива X?
Если целочисленный, то исправь real на integer.
Вот тебе вторая задачка:
program test2;
function f(const x:real):real;
begin
f:=cos (x-exp(x));
end;
procedure root(const a0,b0,tol:real;var _root:real);
var a,b,c,delta:real;
{ a0 < b0 !!! and root exists}
begin
a:=a0;
b:=b0;
repeat
c:=(a+b)/2;
if (f(a)*f(c))<0 then
b:=c
else
a:=c;
delta:=abs(f(c));
until (delta<tol);
_root:=c;
end;
{main}
var x,a,b,tol:real;
begin
tol:=1e-06;
a:=0;
b:=2;
root(a,b,tol,x);
writeln ('root=',x);
end.
Только если будешь подставлять другие функции убедись, что они на заданном промежутке имеют 1 корень и переменная a содержит левый конец интервала, а переменная b -- правый конец интервала. В противном случае у тебя программа зависнет.
(т.е. можно написать умную прогу, но, по-моему, это не требуется)
Добавлено
red2003
Цитата:
положительного массива Х
А это что за зверь???
...положительных элементов массива X?