📄 unit1.~pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Grids, Buttons;
type
TForm1 = class(TForm)
Label1: TLabel;
Panel1: TPanel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Panel2: TPanel;
Label4: TLabel;
StringGrid1: TStringGrid; //存放对策矩阵数据的控件
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
Panel3: TPanel;
Label5: TLabel;
Label6: TLabel;
Edit3: TEdit;
Edit4: TEdit;
Label7: TLabel;
Label8: TLabel;
Edit5: TEdit;
Edit6: TEdit;
RadioGroup1: TRadioGroup;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
Button1: TButton;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type array2=array[1..99,1..99] of real; //声明的数组类型数据:二维数组
type array1=array[1..99] of real; //声明的数组类型数据:一维数组
var
Form1: TForm1;
m,n,i,j,i1,j2:integer;
s1,s2:real;
a:array2;
b,c:array1;
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
m:=strtoint(edit1.Text);
n:=strtoint(edit2.Text);
stringgrid1.RowCount:=m+1; //stringgrid控件的行数(包括固定行)
stringgrid1.ColCount:=n+1; //stringgrid控件的列数(包括固定列)
for i:=1 to m do
begin
stringgrid1.Cells[0,i]:='α'+inttostr(i);
end;
for j:=1 to n do
begin
stringgrid1.Cells[j,0]:='β'+inttostr(j);
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
edit1.Text:='';
edit2.Text:=''; // 清空文本框中的数据
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
for i:=1 to m do
begin
for j:=1 to n do
a[j,i]:=strtofloat(stringgrid1.cells[j,i]);
//将stringgrid中所输入的矩阵数据映射到二维熟组中
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
edit5.Text:='';
for i:=1 to m do
begin
b[i]:=a[1,i]; //一维数组b[i]首先等于二维数组中的各行的第一个元素
for j:=1 to n do
begin
if a[j,i]<b[i] then b[i]:=a[j,i]; //b[i]是二维数组中的各行的最小元素
end;
edit5.Text:=edit5.Text+' '+floattostr(b[i]); //显示各行的最小元素
end;
s1:=b[1];
i1:=1;
for i:=2 to m do
begin
if b[i]>s1 then
begin
s1:=b[i]; //S1是各行最小元素中的最大者
i1:=i; //i1是所求的各行最小元素中的最大者在数组中所对应的行标
end;
end;
edit6.Text:='';
for j:=1 to n do
begin
c[j]:=a[j,1]; //一维数组c[j]首先等于二维数组中的各列的第一个元素
for i:=1 to m do
if a[j,i]>c[j] then c[j]:=a[j,i]; //c[j]是二维数组中的各列的最大元素
edit6.Text:=edit6.Text+' '+floattostr(c[j]); //显示各列的最大元素
end;
s2:=c[1];
j2:=1;
for j:=2 to n do
begin
if c[j]<s2 then
begin
s2:=c[j]; //S2是各列最大元素中的最小者
j2:=j; //j2是所求的各行最大元素中的最小者在数组中所对应的列标
end;
end;
if s1=s2 then
radiobutton1.checked:=true //如果s1=s2则表示存在最优纯策略
else radiobutton2.checked:=true; //如果s1<>s2则表示不存在最优纯策略
if s1=s2 then
begin
edit3.text:='(α'+inttostr(i1)+',β'+inttostr(j2)+')'; //输出最优策略
edit4.Text:=floattostr(s1); //输出对策值
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -