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

📄 yinhangjia.cpp

📁 自己写的银行家算法
💻 CPP
字号:
#include "iomanip.h"
#include "iostream.h"
int Resourse[3]={14,8,11};
int Available[3];
int Finish[5]={0,0,0,0,0};
int Claim[5][3]={8,6,4,4,3,3,10,1,3,3,3,3,5,4,6},Allocation[5][3];
int Needs[5][3],Needss[5][3],Need[5][3];
void main()
{
	int i,j;
	int count=0,counts=0;


	void Init();
	Init();
	while(1)
	{
		int flag[5]={0,0,0,0,0};
	    int flags[5]={0,0,0,0,0};
		count=0;
		counts=0;

		cout<<"开始扫描还没有执行的进程"<<endl<<endl;
	 
		for(i=0;i<5;i++)
		{
			if(Finish[i]==0)
			{
				count++;
				for(j=0;j<3;j++)
					Needs[count-1][j]=Need[i][j];
				flag[count-1]=i;
			}
		}

		//测试
		//for(i=0;i<5;i++)
		//{
		//	cout<<"flag="<<flag[i]<<endl;
		//}


		cout<<"完成对未执行的进程的扫描"<<endl<<"当前有"<<count<<"个进程还未执行"<<endl<<endl;


		if(count==0)
		{
			cout<<"所有进程执行完毕,安全序列与上面输出的进程执行顺序一致"<<endl<<endl;
			break;
		}

		cout<<"开始扫描当前可以执行的进程"<<endl<<endl;
		for(i=0;i<count;i++)
		{
			if(Needs[i][0]<=Available[0]&&Needs[i][1]<=Available[1]&&Needs[i][2]<=Available[2])
			{
				counts++;
				for(j=0;j<3;j++)
					Needss[counts-1][j]=Needs[i][j];
				flags[counts-1]=i;
			}
		}

        cout<<"完成对可以执行的进程的扫描"<<endl<<"当前可以执行的进程有"<<counts<<"个"<<endl<<endl;


		if(counts==0)
		{
			cout<<"没有足够的资源来执行余下的进程"<<endl<<endl;
			
			
			//可以在这里输出当先进程和资源列表
			cout<<"当前还未执行的进程尚需的资源列表为"<<endl<<endl;
			cout<<"表"<<setw(5);
	        for(i=0;i<3;i++)
			{
		        cout<<"R"<<i+1<<setw(5);
			}
	        cout<<endl;
	        for(i=0;i<count;i++)
			{
		      cout<<"P"<<flag[i]+1<<setw(5);
		      for(int j=0;j<3;j++)
			      cout<<Needs[i][j]<<setw(5);
		      cout<<endl;
			}
	        cout<<endl<<endl;
			cout<<"当前可用资源列表"<<endl;
			for(i=0;i<3;i++)
			{
		        cout<<"R"<<i+1<<setw(5);
			}
	            cout<<endl;
	        for(i=0;i<3;i++)
		        cout<<Available[i]<<setw(5);
	        cout<<endl<<endl;


			break;
		}
		for(i=0;i<counts;i++)
		{
			{
				for(j=0;j<3;j++)
					Available[j]=Available[j]+Allocation[flag[flags[i]]][j];
				Finish[flag[flags[i]]]=1;
				cout<<"进程p"<<flag[flags[i]]+1<<"执行完毕"<<endl<<endl;
			}
		}
		//for(i=0;i<5;i++)
		  //  cout<<"Finish为"<<endl<<Finish[i]<<setw(5);
		//cout<<endl;

	}
}


void Init()
{
	//输入模拟系统的现有可用资源总表
	cout<<"请输入你要模拟的系统现有可用资源R1,R2,R3的数量"<<endl;
	for(int i=0;i<3;i++)
	{
		cout<<"R"<<i+1<<setw(2);
	}
	cout<<endl;
	for(i=0;i<3;i++)
		cin>>Resourse[i];






	//输出系统资源总表
    cout<<"总共的系统资源列表"<<endl;
	for(i=0;i<3;i++)
	{
		cout<<"R"<<i+1<<setw(5);
	}
	cout<<endl;
	for(i=0;i<3;i++)
		cout<<Resourse[i]<<setw(5);
	cout<<endl<<endl;
	
	
	//输出进程最大需求
	cout<<"进程最大需求量"<<endl;
	cout<<"表"<<setw(5);
	for(i=0;i<3;i++)
	{
		cout<<"R"<<i+1<<setw(5);
	}
	cout<<endl;
	for(i=0;i<5;i++)
	{
		cout<<"P"<<i+1<<setw(5);
		for(int j=0;j<3;j++)
			cout<<Claim[i][j]<<setw(5);
		cout<<endl;
	}
	cout<<endl<<endl;


	//输入已分配资源列表
loop:cout<<"请输入系统为进程P1已分配的资源列表"<<endl;
	 	for(i=0;i<3;i++)
	{
		cout<<"R"<<i+1<<setw(2);
	}
	cout<<endl;
	for(i=0;i<3;i++)
        cin>>Allocation[0][i];
	//错误效验
	for(i=0;i<3;i++)
	{
		if(Allocation[0][i]>Claim[0][i])
		{
			cout<<"已分配给进程的资源比进程最大需求还大,请认真重新输入"<<endl;
			goto loop;
		}
	}
loop1:cout<<"请输入系统为进程P2已分配的资源列表"<<endl;
	  	for(i=0;i<3;i++)
	{
		cout<<"R"<<i+1<<setw(2);
	}
	cout<<endl;
	for(i=0;i<3;i++)
        cin>>Allocation[1][i];
		//错误效验
	for(i=0;i<3;i++)
	{
		if(Allocation[1][i]>Claim[1][i])
		{
			cout<<"已分配给进程的资源比进程最大需求还大,请认真重新输入"<<endl;
			goto loop1;
		}
	}
loop2:cout<<"请输入系统为进程P3已分配的资源列表"<<endl;
	  	for(i=0;i<3;i++)
	{
		cout<<"R"<<i+1<<setw(2);
	}
	cout<<endl;
	for(i=0;i<3;i++)
        cin>>Allocation[2][i];
		//错误效验
	for(i=0;i<3;i++)
	{
		if(Allocation[2][i]>Claim[2][i])
		{
			cout<<"已分配给进程的资源比进程最大需求还大,请认真重新输入"<<endl;
			goto loop2;
		}
	}
loop3:cout<<"请输入系统为进程P4已分配的资源列表"<<endl;
	  	for(i=0;i<3;i++)
	{
		cout<<"R"<<i+1<<setw(2);
	}
	cout<<endl;
	for(i=0;i<3;i++)
        cin>>Allocation[3][i];
		//错误效验
	for(i=0;i<3;i++)
	{
		if(Allocation[3][i]>Claim[3][i])
		{
			cout<<"已分配给进程的资源比进程最大需求还大,请认真重新输入"<<endl;
			goto loop3;
		}
	}
loop4:cout<<"请输入系统为进程P5已分配的资源列表"<<endl;
	  	for(i=0;i<3;i++)
	{
		cout<<"R"<<i+1<<setw(2);
	}
	cout<<endl;
	for(i=0;i<3;i++)
        cin>>Allocation[4][i];
		//错误效验
	for(i=0;i<3;i++)
	{
		if(Allocation[4][i]>Claim[4][i])
		{
			cout<<"已分配给进程的资源比进程最大需求还大,请认真重新输入"<<endl;
			goto loop4;
		}
	}


		//错误效验,检测输入数据是否符合要求,若不符合,要求从新输入;
	for(i=0;i<3;i++)
	{
			if(Allocation[0][i]+Allocation[1][i]+Allocation[2][i]+Allocation[3][i]+Allocation[4][i]>Resourse[0])
			{
		        cout<<"输入错误!!!系统不可能提供这么多资源给进程。请重新输入"<<endl;
		        goto loop;
			}
	}
	

	//输出已分配资源列表
    cout<<"进程已分配资源列表"<<endl;
	cout<<"表"<<setw(5);
	for(i=0;i<3;i++)
	{
		cout<<"R"<<i+1<<setw(5);
	}
	cout<<endl;
	for(i=0;i<5;i++)
	{
		cout<<"P"<<i+1<<setw(5);
		for(int j=0;j<3;j++)
			cout<<Allocation[i][j]<<setw(5);
		cout<<endl;
	}
	cout<<endl<<endl;


	//计算矩阵Need的具体值
    for(i=0;i<5;i++)
		for(int j=0;j<3;j++)
			Need[i][j]=Claim[i][j]-Allocation[i][j];


    //输出各个进程对各个资源的需求列表
    cout<<"进程对各个资源的需求列表"<<endl;
	cout<<"表"<<setw(5);
	for(i=0;i<3;i++)
	{
		cout<<"R"<<i+1<<setw(5);
	}
	cout<<endl;
	for(i=0;i<5;i++)
	{
		cout<<"P"<<i+1<<setw(5);
		for(int j=0;j<3;j++)
			cout<<Need[i][j]<<setw(5);
		cout<<endl;
	}
	cout<<endl<<endl;

	//计算现有可用资源
	for(i=0;i<3;i++)
	{
		Available[i]=Resourse[i]-Allocation[0][i]-Allocation[1][i]-Allocation[2][i]-Allocation[3][i]-Allocation[4][i];
	}


	//输出系统现有资源列表
	cout<<"系统现有可用资源列表"<<endl;
	for(i=0;i<3;i++)
	{
		cout<<"R"<<i+1<<setw(5);
	}
	cout<<endl;
	for(i=0;i<3;i++)
		cout<<Available[i]<<setw(5);
	cout<<endl<<endl;
}




/*void Init()
{
	//输出系统资源总表
    cout<<"总共的系统资源列表"<<endl;
	for(int i=0;i<3;i++)
	{
		cout<<"R"<<i+1<<setw(5);
	}
	cout<<endl;
	for(i=0;i<3;i++)
		cout<<Resourse[i]<<setw(5);
	cout<<endl<<endl;
	
	
	//输出进程最大需求
	cout<<"进程最大需求量"<<endl;
	cout<<"表"<<setw(5);
	for(i=0;i<3;i++)
	{
		cout<<"R"<<i+1<<setw(5);
	}
	cout<<endl;
	for(i=0;i<5;i++)
	{
		cout<<"P"<<i+1<<setw(5);
		for(int j=0;j<3;j++)
			cout<<Claim[i][j]<<setw(5);
		cout<<endl;
	}
	cout<<endl<<endl;


	//输入已分配资源列表
loop:cout<<"请输入系统为进程P1已分配的资源列表"<<endl;
	for(i=0;i<3;i++)
	{
        cin>>Allocation[0][i];
	//错误效验
		if(Allocation[0][i]>Claim[0][i])
		{
			cout<<"你所输入的已分配给进程的资源甚至比进程对资源的最大需求量还大,是不可用的的数据,请您认真重新输入"<<endl;
			goto loop;
		}
	}



loop1:cout<<"请输入系统为进程P2已分配的资源列表"<<endl;
	for(i=0;i<3;i++)
	{
		cin>>Allocation[1][i];
			//错误效验
		if(Allocation[1][i]>Claim[1][i])
		{
			cout<<"你所输入的已分配给进程的资源甚至比进程对资源的最大需求量还大,是不可用的的数据,请您认真重新输入"<<endl<<endl;
			goto loop1;
		}
loop2:cout<<"请输入系统为进程P3已分配的资源列表"<<endl;
    for(i=0;i<3;i++)
	{
        cin>>Allocation[2][i];
			//错误效验
		if(Allocation[2][i]>Claim[2][i])
		{
			cout<<"你所输入的已分配给进程的资源甚至比进程对资源的最大需求量还大,是不可用的的数据,请您认真重新输入"<<endl;
			goto loop2;
		}
	}
loop3:cout<<"请输入系统为进程P4已分配的资源列表"<<endl;
	for(i=0;i<3;i++)
	{
        cin>>Allocation[3][i];
			//错误效验
		if(Allocation[3][i]>Claim[3][i])
		{
			cout<<"你所输入的已分配给进程的资源甚至比进程对资源的最大需求量还大,是不可用的的数据,请您认真重新输入"<<endl;
			goto loop3;
		}
	}
loop4:cout<<"请输入系统为进程P5已分配的资源列表"<<endl;
	for(i=0;i<3;i++)
	{
        cin>>Allocation[4][i];
			//错误效验
		if(Allocation[4][i]>Claim[4][i])
		{
			cout<<"你所输入的已分配给进程的资源甚至比进程对资源的最大需求量还大,是不可用的的数据,请您认真重新输入"<<endl;
			goto loop4;
		}
	}

	//错误效验,检测输入数据是否符合要求,若不符合,要求从新输入;
	for(i=0;i<3;i++)
	{
			if(Allocation[0][i]+Allocation[1][i]+Allocation[2][i]+Allocation[3][i]+Allocation[4][i]>Resourse[0])
			{
		        cout<<"输入错误!!!系统不可能提供这么多资源给进程。请重新输入"<<endl;
		        goto loop;
			}
	}
	
	
	
	//输出已分配资源列表
    cout<<"进程已分配资源列表"<<endl;
	cout<<"表"<<setw(5);
	for(i=0;i<3;i++)
	{
		cout<<"R"<<i+1<<setw(5);
	}
	cout<<endl;
	for(i=0;i<5;i++)
	{
		cout<<"P"<<i+1<<setw(5);
		for(int j=0;j<3;j++)
			cout<<Allocation[i][j]<<setw(5);
		cout<<endl;
	}
	cout<<endl<<endl;


	//计算矩阵Need的具体值
    for(i=0;i<5;i++)
		for(int j=0;j<3;j++)
			Need[i][j]=Claim[i][j]-Allocation[i][j];


    //输出各个进程对各个资源的需求列表
    cout<<"进程对各个资源的需求列表"<<endl;
	cout<<"表"<<setw(5);
	for(i=0;i<3;i++)
	{
		cout<<"R"<<i+1<<setw(5);
	}
	cout<<endl;
	for(i=0;i<5;i++)
	{
		cout<<"P"<<i+1<<setw(5);
		for(int j=0;j<3;j++)
			cout<<Need[i][j]<<setw(5);
		cout<<endl;
	}
	cout<<endl<<endl;


	//计算现有可用资源
	for(i=0;i<3;i++)
	{
		Available[i]=Resourse[i]-Allocation[0][i]-Allocation[1][i]-Allocation[2][i]-Allocation[3][i]-Allocation[4][i];
	}


	//输出系统现有资源列表
	cout<<"系统现有资源列表"<<endl;
	for(i=0;i<3;i++)
	{
		cout<<"R"<<i+1<<setw(5);
	}
	cout<<endl;
	for(i=0;i<3;i++)
		cout<<Available[i]<<setw(5);
	cout<<endl<<endl;

}*/

⌨️ 快捷键说明

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