unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
EditA: TEdit;
EditB: TEdit;
EditC: TEdit;
EditD: TEdit;
EditF: TEdit;
EditG: TEdit;
EditX: TEdit;
EditY: TEdit;
EditN: TEdit;
Image1: TImage;
Label1: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
LabelOR: TLabel;
Label2: TLabel;
LabelNR: TLabel;
LabelORO: TLabel;
LabelX_Y: TLabel;
LabelY_X: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
procedure Button1Click(Sender: TObject);
procedure EditAChange(Sender: TObject);
procedure Label4Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
A: real; // коэффициент роста популяции
B: real; // коэффициент уменьшения популяции
C: real; // коэффициент отлова
D: real; // коэффициент уменьшения численности хищников в отсутствие жертв
G: real; // коэффициент увеличения численности хищников при наличии жертв
F: real; // коэффициент уменьшения численности жертв при наличии хищников
X: real; // первоначальное количество жертв
Y: real; // первоначальное количество хищников
N: integer; // количество циклов(лет)
I: integer; // счётчик цикла
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Label4Click(Sender: TObject);
begin
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
//Ввод данных
A:=StrToFloat(EditA.Text);
B:=StrToFloat(EditB.Text);
C:=StrToFloat(EditC.Text);
D:=StrToFloat(EditD.Text);
G:=StrToFloat(EditG.Text);
F:=StrToFloat(EditF.Text);
X:=StrToFloat(EditX.Text);
Y:=StrToFloat(EditY.Text);
N:=StrToInt(EditN.Text);
//Установка ширины линии рисования
Image1.Canvas.Pen.Width:=3;
brush.style:= bsSolid; // Присваиваем кисти тип заливки - "полная"
brush.color:= clWhite; //делаем цвет холста белым
//Неограниченный рост
X:=StrToFloat(EditX.Text);
Image1.Canvas.MoveTo(0,250);
Image1.Canvas.Pen.Color:=clDkGray;
For I:=1 to N Do
begin
Image1.Canvas.LineTo(25*I-25, 250-Round(25*X)+25);
X:=A*X;
end;
LabelNR.Caption:=FloatToStr(X);
//Ограниченный рост
X:=StrToFloat(EditX.Text);
Image1.Canvas.MoveTo(0,250);
Image1.Canvas.Pen.Color:=clYellow;
For I:=1 to N Do
begin
Image1.Canvas.LineTo(25*I-25, 250-Round(25*X)+25);
X:=(A-B*X)*X;
end;
LabelOR.Caption:=FloatToStr(X);
//Ограниченный рост с отловом
X:=StrToFloat(EditX.Text);
Image1.Canvas.MoveTo(0,250);
Image1.Canvas.Pen.Color:=clBlue;
For I:=1 to N Do
begin
Image1.Canvas.LineTo(25*I-25, 250-Round(25*X)+25);
X:=(A-B*X)*X-C;
LabelORO.Caption:=FloatToStr(X);
end;
LabelORO.Caption:=FloatToStr(X);
//Жертвы
X:=StrToFloat(EditX.Text);
Y:=StrToFloat(EditY.Text);
Image1.Canvas.MoveTo(0,250);
Image1.Canvas.Pen.Color:=clGreen;
For I:=1 to N Do
begin
Image1.Canvas.LineTo(25*I-25, 250-Round(25*X)+25);
X:=(A-B*X)*X-C-F*X*Y;
Y:=D*Y+G*X*Y
end;
LabelX_Y.Caption:=FloatToStr(X);
//Хищники
X:=StrToFloat(EditX.Text);
Y:=StrToFloat(EditY.Text);
Image1.Canvas.MoveTo(0,250);
Image1.Canvas.Pen.Color:=clRed;
For I:=1 to N Do
begin
Image1.Canvas.LineTo(25*I-25, 250-Round(25*X)+25);
X:=(A-B*X)*X-C-F*X*Y;
Y:=D*Y+G*X*Y
end;
LabelY_X.Caption:=FloatToStr(X);
end;
procedure TForm1.EditAChange(Sender: TObject);
begin
end;
end.