почему-то выводится max: y=-4, x=1, хотя ведь для y=x^(2/3)*(x-5) max: y=0, x=0
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons, Math; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; GroupBox2: TGroupBox; GroupBox3: TGroupBox; GroupBox4: TGroupBox; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; type TMyData = record U: real; J: real; end; var Form1: TForm1; var a,b,L: real; MyData: array of TMyData; implementation { TForm1 } function MyFunction(x:real): real; begin //power(x,2/3)*(x-5) Result:=exp(ln(x*x)/3)*(x-5) end; function Peresechenie(i:integer; L:real): real; begin Peresechenie:=(MyData[i].J-MyData[i+1].J+L*(MyData[i].U+MyData[i+1].U))/(2*L) end; procedure InsertNew(X: real); var i,j: integer; begin i:=0; while MyData[i].U<x do inc(i); SetLength(MyData,Length(MyData)+1); for j:=Length(MyData)-1 downto i+1 do begin MyData[j].U:=MyData[j-1].U; MyData[j].J:=MyData[j-1].J; end; MyData[i].U:=x; MyData[i].J:=MyFunction(x) end; function MaxIndex: integer; var i,j: integer; max: real; begin max:=MyData[0].J; for i:=1 to Length(MyData)-1 do begin if MyData[i].J>max then begin max:=MyData[i].J; j:=i end end; MaxIndex:=j end; procedure TForm1.Button1Click(Sender: TObject); var Un,Un2: real; i,k,N: integer; begin SetLength(MyData,2); a:=StrToFloat(Edit2.Text); b:=StrToFloat(Edit3.Text); N:=StrToInt(Edit4.Text); MyData[0].U:=a; MyData[0].J:=MyFunction(MyData[0].U); MyData[1].U:=b; MyData[1].J:=MyFunction(MyData[1].U); L:=abs(MyData[1].J- MyData[0].J)/abs(MyData[1].U-MyData[0].U); k:=1; i:=0; while i<N do begin inc(i); if k<Length(MyData) then begin Un:=Peresechenie(k-1,L); Un2:=Peresechenie(k,L) end; InsertNew(Un); InsertNew(Un2); k:=MaxIndex end; Edit5.Text:=FloatToStr(MyData[k].U); Edit6.Text:=FloatToStr(MyData[k].J) end; initialization {$I unit1.lrs} end.