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

📄 main.cpp

📁 著名的操作系统经典算法
💻 CPP
字号:
#include <iostream> 
#include "safe.h" 
#include <stdlib.h> 
using namespace std;

int main() 
{ 
 cout<<"           --------------------------------------------------"<<endl; 
 cout<<"                                                             "<<endl; 
 cout<<"                   银行家算法  编程笨蛋版权所有                  "<<endl;  
 cout<<"                                                             "<<endl;  
 cout<<"           --------------------------------------------------"<<endl; 
 int k=0,r=0; 
 char b; 
 cout<<"输入进程的数量: ";//从此开始输入有关数据 
    cin>>n; 
    cout<<"输入资源种类数: "; 
 cin>>m; 
 cout<<"输入各种资源可利用的数量Available["<<m<<"]: "<<endl; 
    for (j=0; j<m; j++) 
 { 
  cin>>Available[j]; 
  Work[j]=Available[j];          //初始化Work[j] 
 } 
 //system("cls"); 
 cout<<"\n请输入各进程当前已分配的资源数量Allocation["<<n<<"]["<<m<<"]: "<<endl; 
 cout<<"\n请严格按照("<<n<<"×"<<m<<")的距阵输入:"<<endl; 
 for (i=0; i<n; i++) 
 { 
  for (j=0; j<m; j++) 
  { 
   cin>>Allocation[i][j]; 
  } 
  if(Available[j]<Allocation[i][j]) 
   { 
    cout<<"您输入的已分配的资源量大于资源总量!!请重新输入!!"<<endl; 
   }
  Finish[i]=0;//初始化Finish[i] 
  //break; 
 } 
 cout<<"\n输入各进程对各类资源的最大需求数Max["<<n<<"]["<<m<<"]: "<<endl; 
    cout<<"\n请严格按照("<<n<<"×"<<m<<")的距阵输入:"<<endl; 
 for (i=0; i<n; i++) 
 { 
  for (j=0; j<m; j++) 
  { 
   cin>>Max[i][j]; 
   Need[i][j] = Max[i][j]-Allocation[i][j]; 
  } 
 } 

 //判断当前状态的安全性 
 safe(); 
 if (l<n) 
 { 

  cout<<"\n当前状态不安全!!!!!"<<endl; 
  return 0; 
 } 
 else 
 { int i; 
  l=0; 
  cout<<"\n安全的状态!!!"<<endl; 
  cout<<"安全序列为:   "; 

  for (i=0; i<n; i++) 
  { 
   cout<<"进程"<<"("<<p[i]<<")"<<"==>>"; 
   Finish[i]=0; 
    
    
  } 
  cout<<endl; 
 } 

    do 
 { 
  //输入请求 
  cout<<"\n请输入申请资源的进程编号: "<<endl; 
  cin>>k; 
  if(k>n-1) 
  { 
  cout<<"您输入了错误的进程号,请检查!!"<<endl; 
  break; 
  } 
  cout<<"\n请输入申请各类资源的数量: "<<endl; 
  for (j=0; j<m; j++) 
  { 
   cout<<"进程"<<k<<"["<<j<<"]:"; 
   cin>>Request[j];  
  } 

  //判断输入的情况 
  for (j=0; j<m; j++) 
  { 
   if (Request[j] > Need[k][j]) 
   { 
    system("cls"); 
       cout<<"错误拉!申请量大于需要量~~"<<endl; 
       return 0; 
} 
  } 
  for (j=0; j<m; j++) 
  { 
   if (Request[j]>Available[j]) 
   { 
    cout<<"没足够多资源,请检查!!!"<<endl; 
    return 0; 
   } 
  } 

  //改变Avilable、Allocation、Need的值 
  for (j=0; j<m; j++) 
  { 
   Available[j] = Available[j]-Request[j]; 
   Allocation[k][j] = Allocation[k][j]+Request[j]; 
   Need[k][j] = Need[k][j]-Request[j]; 
   Work[j] = Available[j]; 
  } 

  //判断当前状态的安全性 
  safe(); 
  if (l<n) 
  { 
   l=0; 
   cout<<"\n当前状态不安全!!!!!!"; 
   //恢复数据  
   for (j=0; j<m; j++) 
   { 
    Available[j] = Available[j]+Request[j]; 
    Allocation[k][j] = Allocation[k][j]-Request[j]; 
    Need[k][j] = Need[k][j]+Request[j]; 
    Work[j] = Available[j]; 
   } 
   for (i=0; i<n; i++) 
    Finish[i]=0; 
  } 
  else 
  { system("cls"); 
   l=0; 
   cout<<"\n申请资源成功!!!"<<endl; 
   cout<<"\n安全的状态!!!"<<endl; 
      cout<<"安全序列为:   "; 
   for (i=0; i<n; i++) 
   { 
    cout<<"进程"<<"("<<p[i]<<")"<<"==>>"; 
    Finish[i]=0; 
   } 
   cout<<endl; 
  } 

        //显示输入各数组的值 
  cout<<"\n当前状态:"<<endl; 
     cout<<"资源量[m]:"<<endl; 
        for (j=0; j<m; j++) 
  { 
   cout<<Available[j]<<"    "; 
  } 
     cout<<endl; 
     cout<<"\n已分配资源[n][m]:"<<endl; 
     for (i=0; i<n; i++) 
  { 
   for (j=0; j<m; j++) 
   { 
    cout<<Allocation[i][j]<<"    ";  
   } 
      cout<<endl; 
  } 
     cout<<"\n最大需求[n][m]:"<<endl; 
     for (i=0; i<n; i++) 
  { 
   for (j=0; j<m; j++) 
   { 
    cout<<Max[i][j]<<"    "; 
   } 
      cout<<endl; 
  } 
 
  cout<<"\n要继续申请资源,请按'y'或'Y',否则按'n'或'N'"<<endl; 
  cin>>b; 
  if(b=='y'||b=='Y') 
  { 
   r=1; 
   //输入请求 
      cout<<"\n请输入申请资源的进程编号(0,1…,n-1):"<<endl; 
      cin>>k; 
   if(k>n-1) 
    { 
     cout<<"您输入了错误的进程号,请检查!!"<<endl; 
     break; 
    } 
      cout<<"\n请输入申请各类资源的数量:"<<endl; 
      for (j=0; j<m; j++) 
   { 
       cout<<"进程"<<k<<"["<<j<<"]:"; 
    cin>>Request[j]; 
   } 
  } 
  else 
  r=0; 
  system("cls"); 
 cout<<"           ----------------------------------------------------"<<endl; 
  cout<<"                                                              "<<endl;  
 cout<<"                           算法是有地,代码是复杂地!          "<<endl;  
 cout<<"                                                               "<<endl;  
 cout<<"           ----------------------------------------------------"<<endl;  
 }while (r==1); 
  
 return 0; 
} 

 
 
 

⌨️ 快捷键说明

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