unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart;
 
type
  TForm1 = class(TForm)
    Chart1: TChart;
    Series1: TLineSeries;
    Memo1: TMemo;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
      private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
    y0, x0, a, b, h: extended;
 
implementation
 
{$R *.dfm}
   function fxy(x,y: extended): extended;
begin
 fxy:=-(2*x+ y)/(1+cos(y));
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
 x,y : extended;
 k1,x1,y1,k2,y2,
   k3,y3,x2,k4,dy       :extended;
begin
y0 := StrToFloat(Edit1.Text);
x0 := 0;
 a  := StrToFloat(Edit2.Text);
 b  := StrToFloat(Edit3.Text);
 h  := StrToFloat(Edit4.Text);
 memo1.Lines.Add('Метод Рунге-Кутта');
 x:=x0;
 y:=y0;
 memo1.Lines.Add('  x='+floattostr(x)+';                y='+floattostr(y));
 Chart1.SeriesList[0].AddXY(x,y,'',clblue);
 while x<=b do
  begin
 
   k1:=h*fxy(x,y);
   x1:=x+h/2;
   y1:=y+k1/2;
 
   k2:=h*fxy(x1,y1);
   y2:=y+k2/2;
 
   k3:=h*fxy(x1,y2);
   y3:=y+k3;
 
        x2:=x+h;
   k4:=h*fxy(x2,y3);
   dy:=(k1+2*k2+2*k3+k4)/6;
   y:=y+dy;
   x:=x+h;
   memo1.Lines.Add('  x='+floattostr(x)+';              y='+floattostr(y));
   Chart1.SeriesList[0].AddXY(x,y,'',clblack);
  end;