почему-то выводится 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.
М | Почему вопрос по Дельфи в разделе Паскаль?? Переношу в Дельфи |
Я бы все-таки в функции MaxIndex начальное значение J установил в 0, Дельфи же дает предупреждение, почему не обращаем внимание?
А вообще - неплохо бы узнать, какие значения вводятся в Edit-ы...