const
fib:array [1..15] of integer=(1,1,2,3,5,8,13,21,34,55,89,144,233,377,610);
...
Function fac(a,x:extended):extended;
begin
result:=-a*exp(x);
end;
Function Fibonachi(a,e,x1,x2:string):TStringList;
Function NomberFib(Fibc:extended):integer;
var i:integer;
begin
i:=0;
repeat
i:=i+1;
until Fibc<Fib[i];
result:=i;
end;
var
ma,me,dx,d,F,nx1,nx2,mx1,mx2:extended;
N:integer;
begin
result:=TstringList.Create;
result.Clear;
ma:=strtofloat(a);
me:=strtofloat(e);
mx1:=strtofloat(x1);
mx2:=strtofloat(x2);
dx:=me;
repeat
F:=(mx2-mx1)/dx;
result.Add('Число Фибаночи = '+floattostr(f));
N:=NomberFib(F);
result.Add('Берем N = '+inttostr(N));
nx1:=mx1+(mx2-mx1)*(fib[N-2]/fib[N]);
nx2:=mx1+(mx2-mx1)*(fib[N-1]/fib[N]);
result.Add('Получаем интервал:');
result.Add(floattostr(nx1)+' '+floattostr(nx2));
if fac(ma,nx1)<fac(ma,nx2) then begin
mx2:=nx2;
result.Add('Отбрасываем правый интервал.');
end;
if fac(ma,nx1)>=fac(ma,nx2) then begin
mx1:=nx1;
result.Add('Отбрасываем левый интервал.');
end;
result.Add('');
d:=mx2-mx1;
until d<me;
result.Add('Ответ: '+floattostr((mx2+mx1)/2)+'; '+floattostr(fac(ma,(mx2+mx1)/2)));
end