📄 unit1.~pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, ImgList, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
GroupBox1: TGroupBox;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
M11: TEdit;
M12: TEdit;
M13: TEdit;
Y11: TEdit;
Y12: TEdit;
Y13: TEdit;
N11: TEdit;
N12: TEdit;
N13: TEdit;
M21: TEdit;
M22: TEdit;
M23: TEdit;
Y21: TEdit;
Y22: TEdit;
Y23: TEdit;
N21: TEdit;
N22: TEdit;
N23: TEdit;
M31: TEdit;
M32: TEdit;
M33: TEdit;
Y31: TEdit;
Y32: TEdit;
Y33: TEdit;
N31: TEdit;
N32: TEdit;
N33: TEdit;
Edit8: TEdit;
Edit9: TEdit;
M41: TEdit;
M42: TEdit;
M43: TEdit;
M51: TEdit;
M52: TEdit;
M53: TEdit;
Y41: TEdit;
Y42: TEdit;
Y43: TEdit;
Y51: TEdit;
Y52: TEdit;
Y53: TEdit;
N41: TEdit;
N42: TEdit;
N43: TEdit;
N51: TEdit;
N52: TEdit;
N53: TEdit;
K11: TEdit;
K12: TEdit;
K13: TEdit;
Edit10: TEdit;
F1: TEdit;
F2: TEdit;
F3: TEdit;
F4: TEdit;
F5: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
BitBtn5: TBitBtn;
GroupBox2: TGroupBox;
Memo1: TMemo;
BitBtn6: TBitBtn;
Edit11: TEdit;
TabSheet2: TTabSheet;
Image1: TImage;
Image2: TImage;
Image3: TImage;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
GroupBox3: TGroupBox;
Label19: TLabel;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
Label23: TLabel;
Label24: TLabel;
S1: TEdit;
R1: TEdit;
D1: TEdit;
W1: TEdit;
Label25: TLabel;
s2: TEdit;
R2: TEdit;
D2: TEdit;
W2: TEdit;
Label26: TLabel;
Label27: TLabel;
Label28: TLabel;
Label29: TLabel;
Label30: TLabel;
Label31: TLabel;
Label32: TLabel;
s3: TEdit;
S4: TEdit;
S5: TEdit;
S6: TEdit;
S7: TEdit;
S8: TEdit;
S9: TEdit;
S10: TEdit;
Label33: TLabel;
R3: TEdit;
R4: TEdit;
R5: TEdit;
R6: TEdit;
R7: TEdit;
R8: TEdit;
R9: TEdit;
R10: TEdit;
D3: TEdit;
D4: TEdit;
D5: TEdit;
D6: TEdit;
D7: TEdit;
D8: TEdit;
D9: TEdit;
D10: TEdit;
W3: TEdit;
W4: TEdit;
W5: TEdit;
W6: TEdit;
W7: TEdit;
W8: TEdit;
W9: TEdit;
W10: TEdit;
GroupBox4: TGroupBox;
BitBtn10: TBitBtn;
BitBtn11: TBitBtn;
BitBtn12: TBitBtn;
Label34: TLabel;
FT1: TEdit;
FT2: TEdit;
FT3: TEdit;
FT4: TEdit;
FT5: TEdit;
FT6: TEdit;
FT7: TEdit;
FT8: TEdit;
FT9: TEdit;
FT10: TEdit;
info: TEdit;
GroupBox5: TGroupBox;
GroupBox6: TGroupBox;
ListView1: TListView;
ListView2: TListView;
TabSheet3: TTabSheet;
GroupBox7: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
P1: TEdit;
P2: TEdit;
P3: TEdit;
P4: TEdit;
P5: TEdit;
P6: TEdit;
P7: TEdit;
P8: TEdit;
P9: TEdit;
P10: TEdit;
P11: TEdit;
P12: TEdit;
PP: TEdit;
UP: TBitBtn;
GroupBox8: TGroupBox;
RadioButton3: TRadioButton;
RadioButton4: TRadioButton;
ListView3: TListView;
Label35: TLabel;
Memery: TEdit;
Label36: TLabel;
E: TBitBtn;
Label37: TLabel;
Label38: TLabel;
procedure FormCreate(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure asdClick(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
procedure BitBtn7Click(Sender: TObject);
procedure BitBtn8Click(Sender: TObject);
procedure nextClick(Sender: TObject);
procedure BitBtn10Click(Sender: TObject);
procedure BitBtn11Click(Sender: TObject);
procedure BitBtn12Click(Sender: TObject);
procedure UPClick(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure RadioButton3Click(Sender: TObject);
procedure RadioButton4Click(Sender: TObject);
procedure EClick(Sender: TObject);
procedure BitBtn6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
//银行家算法
procedure ChangeMColor(clr:TColor);
procedure ChangeYColor(clr:TColor);
procedure ChangeNColor(clr:TColor);
procedure ChangeEnableM(en:boolean);
procedure ChangeEnableY(en:boolean);
procedure test;
Procedure InitialData;
Procedure IntToText1;
Procedure TextToInt1;
//可变分区
Procedure InitialData2;
procedure IntToText;
procedure TextToInt;
procedure printf;
procedure AddToTable;
function HandUpWork(NowWork:integer):boolean;
procedure DeleteWork(WorkNum:integer);
procedure OrderTable;
//LRU,FIFO
procedure InitialData3;
procedure Fifo_Lru;
procedure printf3;
function TextToInt3:boolean;
end;
var
Form1: TForm1;
process:integer=5; //*实际进程数*/
factsource:integer=3; //*实际资源种类*/
available:array[0..2] of integer=(3,3,2); //*资源向量*/
max:array[0..4] of array[0..2] of integer=((7,5,3),
(3,2,2),
(9,0,2),
(2,2,2),
(4,3,3)); //*进程所需的最大资数数*/
allocation:array[0..4] of array[0..2]of integer=((0,1,0),
(2,0,0),
(3,0,2),
(2,1,1),
(0,0,2)); //*已分配的资源*/
need:array[0..4]of array[0..2] of integer=((7,4,3),
(1,2,2),
(6,0,0),
(0,1,1),
(4,3,1)); //*还需的资源数*/
finish:array[0..4,0..2] of boolean;
success:boolean; //*success=1表示所有进程都可完成*/
//以下是中间变量
where: array[0..4]of integer; //*where为进程完成顺序*/
m:integer; //*已完成的进程数*/
PriorM:integer;
MiddleNeed:array[0..4]of array[0..2] of integer; //*还需的资源数*/
MiddleAvailable:array[0..4,0..2] of integer; //*资源向量*/
//可变分区
//作业队列
group:array[0..9] of record
size:integer;
ReachTime:integer;
DoTime:integer;
FinishTime:integer;
Position:integer;//被分配的内存起始地址
Finish:string;
end;
//已分配表
Table,Tableed:array[0..50] of record
Number:integer;
Size:integer;
Position:integer;
WorkNum:integer;//作业号
finish:string;
end;
Num:integer;//未分配表的记录数
Numed:integer;//已分配表的记录数
NowHandUpWork:integer;//当前提交的作业号
ExitData:boolean;//标明程序是否终止
//FIFO,LRU
ml:array[0..30,0..100] of integer;
Mnum:Integer;
Pnum:INteger;
Parray:array[0..100] of Integer;
implementation
{$R *.dfm}
procedure TForm1.ChangeMColor(clr: TColor);
begin
M11.Color:=clr; M12.Color:=clr; M13.Color:=clr;
M21.Color:=clr; M22.Color:=clr; M23.Color:=clr;
M31.Color:=clr; M32.Color:=clr; M33.Color:=clr;
M41.Color:=clr; M42.Color:=clr; M43.Color:=clr;
M51.Color:=clr; M52.Color:=clr; M53.Color:=clr;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
InitialData;
ChangeMColor(cl3DLight);
ChangeYColor(cl3DLight);
ChangeNColor(cl3DLight);
ChangeEnableM(false);
ChangeEnableY(false);
K11.Enabled:=false; K12.Enabled:=false; K13.Enabled:=false;
Form1.Left:=130; Form1.Top:=100;
form1.test;//银行家算法
Memo1.Text:='欢迎使用多项资源银行家算法的模拟软件!';
//可变分区
InitialData2;
IntToText;
//FIFO,LRU
InitialData3;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
//初始化界面
BitBtn1.Caption:='开始';
BitBtn1.Enabled:=false;
BitBtn5.Enabled:=false;
F1.Text:='×'; F2.Text:='×'; F3.Text:='×';
F4.Text:='×'; F5.Text:='×';
K11.Enabled:=true; K12.Enabled:=true; K13.Enabled:=true;
K11.Color:=clWindow; K12.Color:=clWindow; K13.Color:=clWindow;
BitBtn3.Enabled:=true;
ChangeEnableM(true);
ChangeEnableY(true);
ChangeMColor(clWindow);
ChangeYColor(clWindow);
//对全局变量初始化
K11.Text:='3';
K12.Text:='3';
K13.Text:='2';
end;
procedure TForm1.asdClick(Sender: TObject);
begin
BitBtn3.Enabled:=true;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
close;
end;
procedure TForm1.ChangeNColor(clr: TColor);
begin
N11.Color:=clr; N12.Color:=clr; N13.Color:=clr;
N21.Color:=clr; N22.Color:=clr; N23.Color:=clr;
N31.Color:=clr; N32.Color:=clr; N33.Color:=clr;
N41.Color:=clr; N42.Color:=clr; N43.Color:=clr;
N51.Color:=clr; N52.Color:=clr; N53.Color:=clr;
end;
procedure TForm1.ChangeYColor(clr: TColor);
begin
Y11.Color:=clr; Y12.Color:=clr; Y13.Color:=clr;
Y21.Color:=clr; Y22.Color:=clr; Y23.Color:=clr;
Y31.Color:=clr; Y32.Color:=clr; Y33.Color:=clr;
Y41.Color:=clr; Y42.Color:=clr; Y43.Color:=clr;
Y51.Color:=clr; Y52.Color:=clr; Y53.Color:=clr;
end;
procedure TForm1.ChangeEnableM(en: boolean);
begin
M11.Enabled:=en; M12.Enabled:=en; M13.Enabled:=en;
M21.Enabled:=en; M22.Enabled:=en; M23.Enabled:=en;
M31.Enabled:=en; M32.Enabled:=en; M33.Enabled:=en;
M41.Enabled:=en; M42.Enabled:=en; M43.Enabled:=en;
M51.Enabled:=en; M52.Enabled:=en; M53.Enabled:=en;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
//界面状态更新
BitBtn1.Enabled:=true;
BitBtn5.Enabled:=true;
ChangeEnableM(false);
ChangeEnableY(false);
ChangeMColor(cl3DLight);
ChangeYColor(cl3DLight);
K11.Color:=cl3DLight; K12.Color:=cl3DLight; K13.Color:=cl3DLight;
K11.Enabled:=false; K12.Enabled:=false; K13.Enabled:=false;
BitBtn3.Enabled:=false;
//输入已变化的参数
TextToInt1;
IntToText1;
form1.test;//银行家算法
end;
procedure TForm1.ChangeEnableY(en: boolean);
begin
Y11.Enabled:=en; Y12.Enabled:=en; Y13.Enabled:=en;
Y21.Enabled:=en; Y22.Enabled:=en; Y23.Enabled:=en;
Y31.Enabled:=en; Y32.Enabled:=en; Y33.Enabled:=en;
Y41.Enabled:=en; Y42.Enabled:=en; Y43.Enabled:=en;
Y51.Enabled:=en; Y52.Enabled:=en; Y53.Enabled:=en;
end;
procedure TForm1.test;
var
i,j,k:integer; //*循环控制变量*/
ok: array[0..4]of boolean; //*用于标示第j个进程是否完成*/
HaveProcessFinish:boolean;
str:string;
begin
//初始化数据
str:='';
success:=true;
m:=0;
HaveProcessFinish:=false; //退出while的控制变量
for i:=0 to 4 do
ok[i]:=false;
for i:=0 to process-1 do //*初始化:所有进程均未完成 */
ok[i]:=false;
for i:=0 to process-1 do
for j:=0 to factsource-1 do
finish[i][j]:=false; //*初始化:第i个进程的第j个资源还未完全分配*/
i:=1;
while(true) do
begin
HaveProcessFinish:=false;
for j:=0 to process-1 do //*判断第j个进程是否能完成*/ /*原来:j<process&&ok[j]==0有错*/
begin
if(ok[j]=true)then continue;
for k:=0 to factsource-1 do
if(available[k]>=need[j][k]) then finish[j][k]:=true;
if(finish[j][0]=true) and (finish[j][1]=true) and (finish[j][2]=true) then
begin
ok[j]:=true; //*第j个进程可完成*/
where[m]:=j;
str:=str+'P'+intToStr(j+1)+',';
HaveProcessFinish:=true;
m:=m+1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -