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

📄 unit1.pas

📁 运筹学算法与编程实践附书源码
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Mask, ExtCtrls, Grids, Buttons;
const long=250;//定义常量控制数组长度
type
  TForm1 = class(TForm)
    Panel3: TPanel;
    Panel2: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    StringGrid1: TStringGrid;
    Panel1: TPanel;
    RadioGroup1: TRadioGroup;
    Panel4: TPanel;
    StringGrid2: TStringGrid;
    Edit1: TEdit;
    Edit2: TEdit;
    Panel5: TPanel;
    BitBtn1: TBitBtn;
    Panel6: TPanel;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
   
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
var
  VarNum,ConNum:integer;//定义整形变量,存放变量个数和约束条件个数}
  leixing:String;//存放目标函数类型
  x:array[1..long] of integer;//存放变量的值
  z:array of real;//存放每次枚举的函数值
  meijucishu:integer;//枚举次数,即所有取值的可能组合的个数
  biaoshi:array of char;//用于标识当前组合是否是可行解
  a:array[1..long,1..long] of real;//存放系数矩阵
  b:array[1..long] of real;//存放限定向量
  c:array[1..long] of real;//存放目标函数系数
  opt:array[1..long] of integer;//存放操作符
implementation

uses Unit2;//调用unit2单元的数据

{$R *.DFM}

procedure  chushihuabianliang;
var i,j:Integer;
begin
for i:=1 to long do
  for j:=1 to long do
    a[i,j]:=0;
for i:=1 to long do
 begin
  b[i]:=0;
  opt[i]:=0;
 end;
for j:=1 to long do
  begin
   c[j]:=0;
   x[j]:=0;
  end;
end;
{------------初始化变量-------------------------}

procedure TForm1.BitBtn2Click(Sender: TObject);
var  i,j:integer;
     heli:Boolean;//判断输入的数据是否合理
begin
heli:=true;//赋初值
try
  VarNum:=strtoint(edit1.text);
  ConNum:=strtoint(edit2.text);  {输入变量个数和约束条件个数}
except
 begin
  heli:=False;
  showmessage('输入有误!'+#13+'请确定您输入的是整数并且没有空格');
  //数据的合理性检验
  exit;
 end;
end;
if not heli then exit;
  stringgrid1.ColCount:=VarNum+1;
  stringgrid1.Cells[0,0]:='变量';
  stringgrid1.Cells[0,1]:='系数';
  //表格1的列数=变量数+1; (第一列用作标签) }
  for i:=1 to VarNum do
    begin
     stringgrid1.Cells[i,0]:='X'+inttostr(i);
     stringgrid1.Cells[i,1]:='';
    end;
      //表格1外观,第一行显示变量名,第二行用来输入系数,这里赋初值为0
      //第一行、第一列用作标签}
  stringgrid2.ColCount:=VarNum+2;
  stringgrid2.RowCount:=ConNum+1;
  //表格2的列数=变量数+2;(最后两列为运算符及常数项)
   //表格2的行数=约束条件数+1;(第一行用作标签)}
  for i:=0 to VarNum-1 do
    stringgrid2.Cells[i,0]:='X'+inttostr(i+1);
    //表格2第一行,显示变量名X1,X2,…
    stringgrid2.Cells[VarNum,0]:=  '运算符';
    //表格2第一行倒数第二列,显示约束条件中的运算符
    stringgrid2.Cells[VarNum+1,0]:='b';
    //表格2第一行最后一列,显示约束条件的常数项b
  for j:=1 to ConNum do
    for i:=0 to VarNum-1 do
    stringgrid2.Cells[i,j]:='';
    //约束条件系数矩阵赋初值为空,等待用户输入
  for j:=1 to ConNum do
   begin
    stringgrid2.Cells[VarNum,j]:= '';
    //表格2倒数第二列,用来输入约束条件中的符号,默认为等号
    stringgrid2.Cells[VarNum+1,j]:='';
    //表格2最后一列,用来输入约束条件中的常数项b,默认为空}
   end;
  StringGrid1.SetFocus;
end;
{-----------设置初始输入表格------------------------}

procedure  duqushuju;
var i,j:Integer;
begin
for i:=1 to  ConNum do
  for j:=0 to VarNum-1 do
    if  Form1.StringGrid2.Cells[j,i]<>'' then
      a[i,j+1]:=StrToFloat(Form1.StringGrid2.Cells[j,i]);
 //读取0-1整数规划的系数矩阵
for i:=1 to ConNum do
  if Form1.StringGrid2.Cells[VarNum+1,i]<>'' then
    b[i]:=StrToFloat(Form1.StringGrid2.Cells[varnum+1,i]);
 //读取0-1整数规划的限定向量
for i:=1 to ConNum do
  if Form1.StringGrid2.Cells[VarNum,i]<>'' then
    opt[i]:=StrToInt(Form1.StringGrid2.Cells[varnum,i]);
  //读取0-1整数规划的操作符,用-1,0,1分别表示小于、等于、大于
for j:=1 to VarNum do
  if Form1.StringGrid1.Cells[j,1]<>'' then
    c[j]:=StrToFloat(Form1.StringGrid1.Cells[j,1]);
 //读取0-1整数规划目标函数系数
end;
{-----------自定义过程读取初始化数据------------------}


procedure TForm1.BitBtn3Click(Sender: TObject);
begin
chushihuabianliang;
 //调用自定义过程初始化变量
RadioGroup1Click(Sender);//改变目标函数类型
duqushuju;//读取输入的数据
form2.show;
end;

procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
if RadioGroup1.ItemIndex=0 then
  leixing:='Max'
else
 leixing:='Min';
 //使目标函数的类型不断更新
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
Edit1.SetFocus;
end;

end.

⌨️ 快捷键说明

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