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

📄 yhj.cpp

📁 自己的人工智能课程设计~~银行家算法~很简洁~
💻 CPP
字号:
#include <iostream.h>

#define MAX 100
class YHJ
{
	int numOfPro;
	int numOfTyp;
	int Available[MAX];
	int Max[MAX][MAX];
	int Allocation[MAX][MAX];
	int Need[MAX][MAX];
	int Save[MAX];
public:
	void ProTypInsert()
	{
		cout<<"请输入系统进程个数:";
		cin>>numOfPro;
		cout<<"请输入资源类型的种类数:";
		cin>>numOfTyp;
	}
	
	void Set()
	{
		int i,j;
		for(i=0;i<numOfPro;i++)
		{
			cout<<"请输入第"<<i<<"号进程现在所分配的各种资源类型的实例数量:";
			for(j=0;j<numOfTyp;j++)
				cin>>Allocation[i][j];
			cout<<"其各资源最大需求为:";
			for(j=0;j<numOfTyp;j++)
				cin>>Max[i][j];
		}
		
		cout<<"请输入各资源现有实例数量:";
		for(i=0;i<numOfTyp;i++)
			cin>>Available[i];

		for(i=0;i<numOfPro;i++)
			for(j=0;j<numOfTyp;j++)
				Need[i][j]=Max[i][j]-Allocation[i][j];
	}

	int Compare(int a[],int b[])
	{
		int i;
		int temp=1;

		for(i=0;i<numOfTyp;i++)
			if(a[i]>b[i])
			{
				temp=0;
				break;
			}
		return temp;
	}

	void CheckSave()
	{
		int Work[MAX],Finish[MAX];
		int i,j,k;
		int worning=0;
		int Temp;

		for(i=0;i<numOfTyp;i++)
			Work[i]=Available[i];

		for(i=0;i<numOfPro;i++)
			Finish[i]=0;

		for(i=0;i<numOfPro;i++)
		{
			for(j=0;j<numOfPro;j++)
			{
				if(Finish[j]==0&&Compare(Need[j],Work)==1)
				{
					for(k=0;k<numOfTyp;k++)
						Work[k]=Work[k]+Allocation[j][k];
					Finish[j]=1;
					Temp=j;
					break;
				}

			}

			Save[i]=Temp;
		}
		for(i=0;i<numOfPro;i++)
		{
			if(Finish[i]==0)
				cout<<"注意!当前系统处于非安全状态!"<<endl;
			break;
		}
		cout<<"当前系统处于安全状态!"<<endl;

		Disp();
	}

	void Disp()
	{
		int i;

		cout<<"安全序例为:";
		for(i=0;i<numOfPro;i++)
			cout<<Save[i];
		cout<<endl;
	}

	void Request()
	{
		int Pro,Typ[MAX];
		int i;

		cout<<"请输入几号进程发出资源请求:";
		cin>>Pro;
		cout<<"请输入其各资源请求量:";
		for(i=0;i<numOfTyp;i++)
			cin>>Typ[i];

		for(i=0;i<numOfTyp;i++)
			if(Typ[i]>Need[Pro][i])
			{
				cout<<"资源请求量大于其需求量了!"<<endl;
				break;
			}

		for(i=0;i<numOfTyp;i++)
			if(Typ[i]<=Available[i])
			{
				Available[i]=Available[i]-Typ[i];
				Allocation[Pro][i]=Allocation[Pro][i]+Typ[i];
				Need[Pro][i]=Need[Pro][i]-Typ[i];
			}
			else
			{
				cout<<"目前尚无这么多资源可供分配,请等待!"<<endl;
				break;
			}

		cout<<"分配所申请的资源后,";
		CheckSave();		
	}
};

void main()
{
	YHJ yhj;
	int i;

	do
	{
		cout<<"===========================请选择欲要进行操作的序号==========================="<<endl;
		cout<<"                           1.初始化系统资源"<<endl;
		cout<<"                           2.检测系统资源分配安全性"<<endl;
		cout<<"                           3.进程对资源发出请求"<<endl;
		cout<<"                           0.退出程序"<<endl;
		cin>>i;

		switch(i)
		{
		case 1:
			yhj.ProTypInsert();
			yhj.Set();			
			break;
		case 2:
			yhj.CheckSave();
			break;
		case 3:
			yhj.Request();
			break;
		case 0:
			break;
		}
	}while(i!=0);
}

⌨️ 快捷键说明

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