Теперь уже знаю. Но встала другая проблема, как по функции построить график? Помогите, пожалуйста, исправить ошибку в коде.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids,Math, TeEngine, Series, ExtCtrls, TeeProcs, Chart;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Chart1: TChart;
Series1: TLineSeries;
Button2: TButton;
Edit4: TEdit;
Edit5: TEdit;
Label2: TLabel;
Label3: TLabel;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
xydata:array of array of real;
pddata,cddata:array of real;
implementation
{$R *.dfm}
procedure GetArray;
Var i:word;
n:integer;
begin
n:=strtoint(form1.Edit1.text);
Setlength(xydata,n,2);
for i:=1 to n do
begin
xydata[i-1,0]:=strtofloat(form1.Stringgrid1.Cells[0,i]);
xydata[i-1,1]:=strtofloat(form1.Stringgrid1.cells[1,i]);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
Var n:integer;
begin
n:=strtoint(Edit1.Text);
Stringgrid1.ColCount:=n+1;
Stringgrid1.RowCount:=n+2;
Stringgrid1.FixedCols:=0;
Stringgrid1.Cells[0,0]:='x';
Stringgrid1.Cells[1,0]:='y';
end;
procedure RR(Order:byte);
Var i:word;
n:integer;
begin
n:=strtoint(form1.Edit1.text);
if order>1 then
begin
Setlength(pddata,n-order+1);
for i:=0 to n-order do
pddata[i]:=cddata[i];
end;
Setlength(cddata,n-order);
for i:=0 to n-order-1 do //так как динамический массив начинается с нуля,то уменьшаем все на 1
if order>1 then
cddata[i]:=(pddata[i+1]-pddata[i])/(xydata[i+order,0]-xydata[i,0])
else
cddata[i]:=(xydata[i+1,1]-xydata[i,1])/(xydata[i+1,0]-xydata[i,0]);
end;
function GetRR(Order:byte;number:byte):real;
{Var i;integer}
begin
GetArray;
{for i:=1 to order do}
RR(Order);
result:=cddata[number];
end;
function Getdm(Order:byte):real;
Var i:integer;
min,max:real;
n:word;
begin
n:=strtoint(form1.Edit1.text);
GetArray;
for i:=1 to order do
RR(i);
min:=cddata[0];
max:=min;
for i := 1 to n-order do
begin
if cddata[i-1]<min then
min:=cddata[i];
if cddata[i-1]>max then
max:=cddata[i];
end;
result:=(max-min)*power(xydata[n-1,0]-xydata[0,0],order);
end;
function stepen(Order:byte):byte;
Var min:real;
i,n: Integer;
begin
n:=strtoint(form1.Edit1.text);
GetArray;
RR(Order);
min:=getdm(1);
result:=1;
for i := 2 to n - 1 do
begin
if Getdm(i)<min then
begin
min:=Getdm(i);
result:=i;
end;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var tf:textfile;
n:integer;
i:word;
begin
n:=strtoint(edit1.Text);
Assignfile(tf,'data.txt');
Rewrite(tf);
Writeln(tf,n);
for i:=1 to n do
begin
Writeln(tf,Stringgrid1.Cells[0,i]);
Writeln(tf,Stringgrid1.Cells[1,i]);
end;
Closefile(tf);
end;
procedure TForm1.FormCreate(Sender: TObject);
Var tf:textfile;
i:word;
s:string;
n:integer;
begin
n:=strtoint(Edit1.Text);
Assignfile(tf,'data.txt');
Reset(tf);
Readln(tf,n);
Stringgrid1.ColCount:=n+1;
Stringgrid1.Rowcount:=n+2;
For i:=1 to n do
begin
Readln(tf,s);
Stringgrid1.Cells[0,i]:=s;
Readln(tf,s);
Stringgrid1.Cells[1,i]:=s;
end;
closefile(tf);
end;
procedure TForm1.Button3Click(Sender: TObject);
Var i,j:word;
n:integer;
begin
n:=strtoint(Edit1.Text);
GetArray;
for i:=2 to n do
begin
RR(i-1);
for j:=1 to n-i+1 do
Stringgrid1.Cells[i,j]:=floattostr(cddata[j-1]);
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
Var i,n:integer;
begin
n:=strtoint(form1.Edit1.Text);
for i:=2 to n do
begin
getdm(i-1);
Stringgrid1.Cells[i,n+1]:=floattostr(getdm(i-1));
stepen(i-1);
Edit2.Text:=floattostr(stepen(i-1));
end;
end;
function PN(order:byte;x:real):real;
Var i,j:word;
k,m:real;
begin
GetArray;
k:=xydata[1,0];
for i:=1 to order do
begin
m:=GetRR(i,1);
for j:=1 to order do
begin
m:=m*(x-xydata[j-1,0]);
end;
k:=k+m;
end;
result:=k;
end;
procedure TForm1.Button2Click(Sender: TObject);
Var a,b,x:real;
n:integer;
i,j:word;
begin
n:=strtoint(Edit1.Text);
a:=strtofloat(Edit4.Text);
b:=strtofloat(Edit5.Text);
while b<a do
begin
x:=PN(i,j);
Chart1.SeriesList[0].AddXY(i,x,'',clblue);
end;
end;
end.