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

📄 wyf.cpp

📁 有两个程序
💻 CPP
字号:
#include<stdio.h>  
   #include "windows.h" 
   #define    M    5                          
   #define    N    3                        
   #define    FALSE    0    
   #define    TRUE    1    
   int    Max[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};    
   int    Available[N]={2,3,0};      
   int    Allocation[M][N]={{0,1,0},{3,0,2},{3,0,2},{2,1,1},{0,0,2}};    
   int    Need[M][N]={{7,4,3},{0,2,0},{6,0,0},{0,1,1},{4,3,1}};    
   int    Request[N]={0};    
   int    Finish[M]={FALSE}; 
   int    Work[N]={0}; 
void showdata()  
 {  
int i,j;  
 printf("●系统可用的资源数为:\n ");  
  
  
for (j=0;j<N;j++)  
printf("资源%c: %d ",j+65, Available[j]);  
printf("\n");  
printf("★★进程还需要的资源量: \n");  
printf(" A B C\n" ); 
for(i=0;i<M;i++)  
 {  
printf("进程%d:",i);  
for(j=0;j<N;j++)  
printf(" %d ", Need[i][j]);  
printf("\n");  
 }  
  
printf("★★进程已经得到的资源量:\n");  
printf(" A B C\n" ); 
for(i=0;i<M;i++)  
 {  
printf("进程%d:",i);  
for(j=0;j<N;j++)  
printf(" %d ",Allocation[i][j]);  
printf("\n");  
 }  
 }  
  


 void changdata(int k)  
 {  
for(int j=0;j<N;j++)  
 {  
Available[j]-=Request[j];  
Allocation[k][j]+=Request[j];  
Need[k][j]-=Request[j];  
 }  
 }  
  
int checkFinish(int k) 
{ 
for(int j=0;j<N;j++) 
 if(Allocation[k][j]!=Max[k][j]) break; 
if(j<N) return 0; 
else{ 
   Finish[k]=TRUE; 
 return 1; 
 } 
}  

void release(int k) 
{ 
 int j; 
 for(j=0;j<N;j++) 
{ 
 Available[j]+=Allocation[k][j]; 
 Allocation[k][j]=0; 
 Need[k][j]=0; 
} 
} 
void rstordata(int k)  
 {  
for(int j=0;j<N;j++)  
 {  
Available[j]+=Request[j];  
Allocation[k][j]-=Request[j];  
Need[k][j]+=Request[j];  
 }  
 }  
  
int chkerr(int i,int Work[])  
 {  
int j,count=15; 
int signal[N]={FALSE} ; 
while(count){  
for(j=0;j<N;j++)  
{  
if (Finish[i]==FALSE&&Need[i][j]<=Work[j])  
{  
signal[j]=TRUE;  
  }  
} 
for(int m=0;m<N;m++)  
if(signal[m]==FALSE) break; 
if(m==N)  
 { Finish[i]=TRUE; 
for(j=0;j<N;j++) 
Work[j]+=Allocation[i][j]; } 

count--; 
 i++;  
 if(i==M) i=0; 
      
}  



 for(i=0;i<M;i++)  
 if(Finish[i]==FALSE)  
 {  
printf("====================\n系统不安全!!! \n本次资源申请不成功!!!\n=================\n");  
return 1;  
 }  
printf("=============================================================RIGHT!\n经安全性检查,系统安全,本次分配成功。\n");  
 printf("\n=============================================================RIGHT!\n"); 
 printf("\n");  
 return 0;  
 } 
//#include "Bank.h" 
//#include "BankTest.h"  
 void main(){  
 int j=0;  
 char flag='Y';  
 showdata();  
 while(flag=='Y'||flag=='y')  
 {  
int i=M+1;  
while(i<0||i>=M)  
 {  
printf("请输入申请资源的进程号(0--4):");  
scanf("%d",&i);  
 if(i<0||i>=M)  
 printf("\n=========================ERROR!\n输入的进程号不存在,重新输入!\n=========================ERROR!\n");  
  
} 
  
 printf("请输入进程%d申请的资源数",i);  
  
 for(j=0;j<N;j++)  
 {  
printf("\n资源%c:",j+65);  
scanf("%d",&Request[j]);  
  
 if(Request[j]>Need[i][j])  
{  
printf("=========================ERROR!\n进程%d申请的资源数大于进程%d还需要%c类资源的资源量!\n",i,i,j+65);  
printf("申请不合理!请重新选择!\n=========================ERROR!\n");  
flag='N';  
break;  
}  
 else  
{  
if(Request[j]>Available[j])  
 {  
printf("=========================ERROR!\n进程%d申请的资源数大于系统可用%c类资源的资源量!\n",i,j+65);  
printf("申请不合理!请重新选择!\n=========================ERROR!\n");  
flag='N';  
break;  
}  
}  
 }  
 if(flag=='Y'||flag=='y')  
 {  
changdata(i); 

if(checkFinish(i)) {release(i) ; printf("====================================================================\n进程%d已经完成!\n",i);}  
for(j=0;j<N;j++) Work[j]=Available[j]; 
if(chkerr(i,Work))  
{  
rstordata(i);  
showdata();  
}  
else  
showdata();  
}  
 else  
 showdata();  
 printf("\n");  
 printf("是否继续银行家算法演示?(按'Y'或'y'键继续,按其它任意键退出演示): ");  
 getchar();  

 flag=getc(stdin); 
 }  
  
 }  
 
 

⌨️ 快捷键说明

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