⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.~pas

📁 很好运筹学的DEOPHI原代码.包括动态规划,原始单纯形法,对策论,决策论等
💻 ~PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ExtCtrls, StdCtrls, Buttons;
const long=20;//定义常量控制数组长度
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Pgmain: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    Label1: TLabel;
    Edit1: TEdit;
    BitBtn2: TBitBtn;
    Button1: TButton;
    Button2: TButton;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    Label8: TLabel;
    Edit2: TEdit;
    Label11: TLabel;
    Edit8: TEdit;
    GroupBox3: TGroupBox;
    Label3: TLabel;
    Label4: TLabel;
    Edit4: TEdit;
    Edit5: TEdit;
    Label5: TLabel;
    Label6: TLabel;
    Edit6: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure FormActivate(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type  myarray1=array[1..long]  of  array[1..long]  of  tedit;
type  myarray2=array[1..long]  of  Tlabel;              //自定义两种类型,分别供输入数据和显示信息使用
type  yuansu=record            //记录类型有两个返回值
      zhi: real;
      xuhao:integer;
end;
var
  Form1: TForm1;

implementation
{$R *.dfm}
var n:integer;     //全局
    Cp,Cd,D:real;  //全局
    shuru1:myarray1;   //edit
    shuru2: myarray2; //label

function feiyong(a,b:real):real;
begin
  result:=b*Cp/2+D*Cd/b+D*a;
end;

function zuixiaoyuansu(shuzu:array of real;m:integer):yuansu;  //返回数组中的最小元素以及此元素的序号
var i,j:integer;
    min:real;
begin
   min:=shuzu[0];
   for i:=0 to m-1  do
     if  min>shuzu[i] then
       begin
          min:=shuzu[i];
          j:=i;
       end;
   result.zhi:=min;
   result.xuhao:=j;
end;



procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
  for i:= 0 to pgMain.PageCount - 1 do
    pgMain.Pages[I].TabVisible := False;
  pgmain.ActivePageIndex:=0 ;

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (key in ['1'..'9']) then          //拒绝非整数输入
    key:=chr(0);
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  
  if pgmain.ActivePageIndex=0 then
    button1.Enabled:=false;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i,j,finalxuhao:integer;
    jiage: array[1..long] of real;     //价格数组存放各级单价
    Q,N1,N2,f: array[1..long] of real;  //分别存放各级单价对应的订购批量,区间端点值,订购批量所对应的费用
    finalF,finalQ:real;
begin
  if pgmain.ActivePageIndex<>pgMain.PageCount-1 then
    pgmain.ActivePageIndex:= pgmain.ActivePageIndex+1 ;
  if  pgmain.ActivePageIndex=1 then      //根据Index为零时的数据动态生成间断点edit框 和label
      begin
         button1.Enabled:=true;
         button2.Enabled:=true;
         if edit1.text<>'' then
          begin
             try
               for i:=1 to n do
                 begin
                   shuru2[i].free;
                   for j:=1 to 3  do
                     shuru1[i,j].free;
                 end;
                 
             finally
               n:=0;
               n:=strtoint(edit1.text);


               for i:=1  to  n  do
                  begin
                   shuru2[i]:=Tlabel.Create(self);
                   shuru2[i].parent:=tabsheet2;
                   shuru2[i].Width:=40;
                   shuru2[i].Height:=24;
                   shuru2[i].left:=66;
                   shuru2[i].top:=54+(i-1)*(shuru2[i].Height+5);
                   shuru2[i].Caption:='K'+inttostr(i)+'=                       ,                        <Q<    ' ;


                  for j:=1  to 3  do
                     begin
                        shuru1[i,j]:=tedit.Create(self);
                        shuru1[i,j].parent:=tabsheet2;
                        shuru1[i,j].Width:=62;
                        shuru1[i,j].Height:=24;
                        shuru1[i,j].left:=90+(j-1)*(shuru1[i,j].Width+28);  //90代表[1,1]离左边框的距离宽度宽度,+28表示各edit框之间的左右距离
                        shuru1[i,j].top:=50+(i-1)*(shuru1[i,j].Height+5);
                     end;
                  end;
          end;
          shuru1[1,1].SetFocus;
          shuru1[1,2].text:='0' ; shuru1[1,2].enabled:=false;
          shuru1[n,3].text:='∞'; shuru1[n,3].enabled:=false;
         end;
      end;
  if pgmain.ActivePageIndex=2 then      //根据Index为1时的输入数据开始计算
    begin
      button1.Enabled:=true;
      button2.Enabled:=false;
      Cd:=StrTofloat(Edit4.Text);                //订货费
      Cp:=StrTofloat(Edit5.Text);                //存储费
      D:=StrTofloat(Edit6.Text);                 //需求量
      shuru1[n,3].text:=inttostr(maxint);
      for i:=1  to  n  do
        for j:=1  to 3  do
          if shuru1[i,j].text<>'' then
            begin
              jiage[i]:=strtofloat(shuru1[i,1].text);    //取出价格列

              N1[i]:=strtofloat(shuru1[i,2].text);    //取出edit第2列批量区间下端点

              N2[i]:=strtofloat(shuru1[i,3].text);    //取出edit第3列批量区间上端点

              Q[i]:=sqrt(2*Cd*D/Cp);           //根据以上数据计算各级价格对应的最优订购批量!!!!!!
              if (Q[i]>=N2[i]) or (Q[i]<N1[i]) then      // N1[i]<Q[i]<N2[i])
                Q[i]:=N1[i] ;
              {else                       //若在(N1,N2)内的话,不用变Q[i]了,就是已经计算好的Q:=sqrt(2*Cd*D/Cp)
                finalQ:=Q[i];      //记录最优订购批量 }
              f[i]:=feiyong(jiage[i],Q[i]);//调用费用函数 计算费用并存储
            end
          else
            begin
               showmessage('输入不能为空!');
               pgmain.ActivePageIndex:=1;
               exit;
            end;
      finalF:=zuixiaoyuansu(f,n).zhi;             //输出F()数组中最小的元素
      finalQ:= Q[zuixiaoyuansu(f,n).xuhao+1];      //输出最优批量
      edit2.Text:=formatfloat('0.###',finalQ);     //格式化输出结果
      edit8.Text:=formatfloat('0.###',finalF);
    end;
end;
procedure TForm1.Button1Click(Sender: TObject);

begin
  if pgmain.ActivePageIndex<>0 then
    pgmain.ActivePageIndex:= pgmain.ActivePageIndex-1 ;
  if  pgmain.ActivePageIndex=0 then
    button1.Enabled:=false;
  if  pgmain.ActivePageIndex=1 then
  begin
    button2.Enabled:=true;
    button1.Enabled:=true
  end;

end;

end.


 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -