📄 bank.txt
字号:
7 5 3
3 2 2
9 0 2
2 2 2
4 3 3
0 1 0
2 0 0
3 0 2
2 1 1
0 0 2
#include <iostream>
using namespace std;
int Sum[3] = {10, 5, 7};
int Available[3];
int Max[5][3];
int Allocation[5][3];
int Need[5][3];
int Request[5][3];
bool Finish[5];
int p[5];
void Printmenu();
void Init();
bool Safe();
void Bank();
void Print();
int main()
{
int n;
Printmenu();
while (1)
{
cin>>n;
switch (n)
{
case 1:
system("cls");
Init();
Printmenu();
continue;
case 2:
system("cls");
Safe();
Printmenu();
continue;
case 3:
system("cls");
Print();
Printmenu();
continue;
case 4:
system("cls");
Bank();
Printmenu();
continue;
case 5:
exit(1);
}
system("cls");
}
return 0;
}
void Printmenu()
{
cout<<" ---------"<<"银行家算法模拟"<<"--------------"<<endl<<endl;
cout<<"1.初始化分配"<<endl;
cout<<"2.判断是否安全并输出"<<endl;
cout<<"3.显示资源分配表"<<endl;
cout<<"4.动态分配资源"<<endl;
cout<<"5.退出"<<endl;
cout<<"输入:";
}
void Init() //初始化分配
{
int i,j;
cout<<"输入最大需求矩阵Max"<<endl;
for(i = 0; i < 5; i++)
for(j = 0; j < 3; j++)
cin>>Max[i][j];
cout<<"输入分配矩阵Allocation"<<endl;
for(i = 0; i < 5; i++)
{
for(j = 0; j < 3; j++)
{
cin>>Allocation[i][j];
Need[i][j]=Max[i][j]-Allocation[i][j];
if(Need[i][j] < 0)
{
cout<<"您输入的第"<<i+1<<"个进程的第"<<j+1<<"个资源数大于最大需求数,请重新输入:"<<endl;
j--;
continue;
}
}
}
for(i = 0; i < 3; i++)
{
Available[i] = Sum[i] - Allocation[0][i] - Allocation[1][i] - Allocation[2][i] - Allocation[3][i]-Allocation[4][i];
// cout<<Available[i]<<endl;
}
cout<<"输入完毕"<<endl;
}
void Print() //显示资源分配表
{
int i, j;
cout<<"最大需求矩阵Max"<<endl;
for(i = 0; i < 5; i++)
{
for(j = 0; j < 3; j++)
cout<<Max[i][j]<<" ";
cout<<endl;
}
cout<<"分配矩阵Allocation"<<endl;
for(i = 0; i < 5; i++)
{
for(j = 0; j < 3; j++)
cout<<Allocation[i][j]<<" ";
cout<<endl;
}
}
void Bank() //银行家算法
{
int i, process;
while(1)
{
cout<<"请输入要分配资源的进程号(输入-1退出)"<<endl;
cin>>process;
if(process == -1)
break;
cout<<"请输入进程所分配的各资源的数量"<<endl;
for(i = 0; i < 3; i++)
{
cin>>Request[process][i];
}
for(i = 0; i < 3; i++)
{
if(Request[process][i] > Need[process][i]) //step 1
{
cout<<"您输入的请求数超过进程的需求量!请重新输入!"<<endl;
continue;
}
if(Request[process][i] > Available[i]) //step 2
{
cout<<"您输入的请求数超过系统有的资源数!请重新输入!"<<endl;
continue;
}
}
for(i = 0; i < 3; i++) //step 3
{
Available[i] -= Request[process][i];
Allocation[process][i] += Request[process][i];
Need[process][i] -= Request[process][i];
}
if(Safe())
{
cout<<"安全状态同意分配请求!"<<endl;
}
else
{
cout<<"不安全状态"<<endl;
for(i = 0; i < 3; i++) //系统不安全,分配作废
{
Available[i] += Request[process][i];
Allocation[process][i] -= Request[process][i];
Need[process][i] += Request[process][i];
}
}
for(i = 0;i < 5; i++)
{
Finish[i] = false;
}
}
}
bool Safe() //安全性算法
{
int i, j, k, l=0;
int Work[3];
for(i = 0; i < 3; i++)
{
Work[i]=Available[i];
}
for(i = 0; i < 5; i++)
{
Finish[i] = false;
}
for(i = 0; i < 5; i++)
{
if(Finish[i] == true)
{
continue;
}
else
{
for(j = 0; j < 3; j++)
{
if(Need[i][j] > Work[j])
{
break;
}
}
if(j == 3)
{
Finish[i] = true;
for(k = 0; k < 3; k++)
{
Work[k] += Allocation[i][k];
}
p[l++] = i;
if(i == 4) //循环查看
i = -1;
}
else
{
continue;
}
}
if(l == 5)
{
cout<<"安全序列:"<<endl;
for(i = 0; i < l; i++)
{
cout<<p[i];
if(i != l-1)
{
cout<<"-->";
}
}
cout<<""<<endl;
return true;
}
}
cout<<"系统是不安全的"<<endl;
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -