?? shuju.pas
字號:
unit shuju;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Grids, Buttons,math;
const long=252;
type
Tfrmshuju = class(TForm)
panel2: TPanel;
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
BitBtn1: TBitBtn;
RadioGroup1: TRadioGroup;
Label3: TLabel;
StringGrid1: TStringGrid;
BitBtn4: TBitBtn;
BitBtn2: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmshuju: Tfrmshuju;
type myset=set of 1..long;//自定義集合類型,集合元素類型為整型,
//范圍1..long。
var m,n:integer; //m供應站的數量;n需求站的數量
a:array[1..long] of Integer;//供應站的供應量(以單位計算)
b:array[1..long] of Integer;//需求站的需要量(以單位計算)
c:array[1..long] of array[1..long] of real;//運價矩陣
//c[i,j]表示從第i個供應站到第j個需求站單位產品的運輸成本
x:array[1..long] of array[1..long] of Real;//運輸矩陣
//x[i,j]表示從第i個供應站供應給第j個需求站x[i,j]個單位的產品
z:real;//目標函數值,即總的運輸成本
r:Integer;//關鍵行,當前供應站的下標
s:Integer;//關鍵列,當前需求站的下標
rr:myset;//有待分配的供應站的下標的集合
ss:myset;//有待分配的需求站的下標的集合
u:array[1..long] of Real;//供應站的位勢值
v:array[1..long] of Real;//需求站的位勢值
d:array[1..long] of array[1..long] of real;//可能運費矩陣
biaoshi:array[1..long] of array[1..long] of Char;//標識符
implementation
{$R *.dfm}
uses jisuan;
procedure chushihuabianliang;
var i,j:Integer;
begin
for i:=1 to long do
begin
for j:=1 to long do
begin
c[i,j]:=0;
x[i,j]:=0;
d[i,j]:=0;
biaoshi[i,j]:=#0;
end;
a[i]:=0;
b[i]:=0;
u[i]:=0;
v[i]:=0;
end;
r:=0;
s:=0;
rr:=[];//空集合
ss:=[];//空集合
z:=0; //目標函數值,最小運費
end;
{-------------初始化所有全局變量變量----------------------------------}
procedure Tfrmshuju.BitBtn1Click(Sender: TObject);
var i,j:Integer;
begin
m:=StrToInt(Edit1.Text);//讀取供應站的數量
n:=StrToInt(Edit2.Text);//讀取需求站的數量
with StringGrid1 do
begin
RowCount:=m+2;
ColCount:=n+2;//動態設置行數和列數
Width:=ColCount*(DefaultColWidth+2);
Height:=RowCount*(DefaultRowHeight+2);//動態調整寬度和高度
top:=(panel2.Height-Height) div 2-20;
Left:=(panel2.Width-Width) div 2;//動態調整位置
for i:=1 to m do
Cells[0,i]:='A'+IntToStr(i);
for j:=1 to n do
Cells[j,0]:='B'+IntToStr(j);
Cells[0,0]:='供\需';
Cells[0,m+1]:='需求量';
Cells[n+1,0]:='供應量';//設置表框
end;
end;
{-------------------控制調整輸入界面----------------------------------}
procedure Tfrmshuju.BitBtn4Click(Sender: TObject);
var i,j:Integer;
begin
chushihuabianliang;
m:=StrToInt(Edit1.Text);//讀取供應站的數量
n:=StrToInt(Edit2.Text);//讀取需求站的數量
for i:=1 to m do
for j:=1 to n do
if StringGrid1.Cells[j,i]<>'' then
c[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
//讀取運價矩陣
for i:=1 to m do
if StringGrid1.Cells[n+1,i]<>'' then
a[i]:=StrToint(StringGrid1.Cells[n+1,i]);
//讀取供應量
for j:=1 to n do
if StringGrid1.Cells[j,m+1]<>'' then
b[j]:=StrToint(StringGrid1.Cells[j,m+1]);
//讀取需求量
frmjisan.Show;
frmshuju.Hide;
end;
{----------讀取已知條件,運價矩陣、供應量、需求量------------}
procedure Tfrmshuju.BitBtn2Click(Sender: TObject);
var i,j:Integer;
begin
for i:=1 to StringGrid1.RowCount-1 do
for j:=1 to StringGrid1.ColCount-1 do
StringGrid1.Cells[j,i]:='';
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -