unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,StrUtils;type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    Edit4: TEdit;
    Button1: TButton;
    Button2: TButton;
    GroupBox2: TGroupBox;
    Edit5: TEdit;
    procedure FunOne();
    function Lagrange(xf:double;nnum:Integer):double;
    procedure Button1Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Edit2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit3KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Edit4Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;
  xa,ya : array[0..3] of double;
  temp_x,temp_y:array of double;
  sum:double;
  ReceiveNode_Num:Integer;
  Received:integer;  //记录空格键的次数
  Self_Var:double;   //节点自变量
  Judge_FunOne_once:integer;implementation{$R *.dfm}procedure TForm1.FunOne();var  n:integer;
     num:Integer ;
     t: double;
     str:string;
begin
     if temp_x=nil  then
     begin
     showmessage('请输入相应的数');
     Edit1.Text:='' ;
     Edit2.Text:='' ;
     Edit3.Text:='' ;
     Edit4.Text:='';
     Edit5.Text:='';
     exit;
     end;
     if temp_y=nil  then
     begin
     showmessage('请输入相应的数');
      Edit1.Text:='' ;
     Edit2.Text:='' ;
     Edit3.Text:='' ;
     Edit4.Text:='';
     Edit5.Text:='';
     exit;
     end;
     if  ReceiveNode_Num=0  then
     begin
     showmessage('请输入相应的数');
     Edit1.Text:='' ;
     Edit2.Text:='' ;
     Edit3.Text:='' ;
     Edit4.Text:='';
     Edit5.Text:='';
     exit;
     end;
     if Self_Var=0 then
     begin
     showmessage('请输入相应的数');
     Edit1.Text:='' ;
     Edit2.Text:='' ;
     Edit3.Text:='' ;
     Edit4.Text:='';
     Edit5.Text:='';
     exit;
     end;
     sum:=0;
     for num:=0 to 4 do
     begin
     t:= temp_x[num];
     temp_x[num]:=temp_x[0];
     temp_x[0]:=t;
     sum:=Lagrange(Self_Var,ReceiveNode_Num)*temp_y[num]+sum;
     end;
     str:=Floattostr(sum);
     Edit5.Text:=str;
    // xa:=nil;
    // ya:=nil;
end;
function TForm1.Lagrange(xf:double;nnum:Integer):double;
var i:integer;
    s1,s2:double;
begin
    s1:=1;
    s2:=1;
    for i:=1 to nnum do
    begin
    s1:=(Self_Var-temp_x[i])*s1;
    s2:=(temp_x[0]-temp_x[i])*s2
    end;
    Lagrange:=s1/s2;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
     
     if Judge_FunOne_once=0 then
     begin
     Judge_FunOne_once:=1;
     FunOne ;
     end;
end;procedure TForm1.Edit1Change(Sender: TObject);   //为节点数组和
begin                                            //节点函数值数组分配空间
     if Edit1.Text<>''then
     begin
     ReceiveNode_Num:=Trunc(StrtoFloat(Edit1.Text)) ;
     Edit5.Text:=FloattoStr(ReceiveNode_Num);
     SetLength(temp_x,ReceiveNode_Num);
     SetLength(temp_y,ReceiveNode_Num);  
     end;
end;procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
     if ReceiveNode_Num=0 then              //录入节点值放在数组中
     begin
     showmessage('请先输入节点个数');
     Edit2.Text:='';
     exit
     end;
     if Received=ReceiveNode_Num then
     begin
     showMessage('够了!你这头猪!');
     Edit2.Text:='';
     Received:=0;
     exit;
     end;
     if key=VK_SPACE then
     begin
     temp_x[received]:=StrtoFloat(Edit2.Text);
     Received:=Received+1;
     Edit2.Text:='';
       if Received=ReceiveNode_Num then
       Received:=0;
     end;end;procedure TForm1.Edit3KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
     if ReceiveNode_Num=0 then              //录入节点值放在数组中
     begin
     showmessage('请先输入节点个数');
     Edit3.Text:='';
     exit
     end;
     if Received=ReceiveNode_Num then
     begin
     showMessage('够了!你这头猪!');
     Edit3.Text:='';
     Received:=0;
     exit;
     end;
     if key=VK_SPACE then
     begin
     temp_y[received]:=StrtoFloat(Edit3.Text);
     Received:=Received+1;
     Edit3.Text:='';
     end;end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    if temp_x<>nil then
    temp_x:=nil;
    if temp_y<>nil then
    temp_y:=nil;
end;procedure TForm1.Edit4Change(Sender: TObject);
begin
    Self_Var:=StrtoFloat(Edit4.Text);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
     Judge_FunOne_once:=0 ;
end;end.