📄 banker.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#define N 5
struct bank
{
char num[6];
int max[4];
int allocation[4];
int need[4];
int available[4];
int work[4];
int wa[4];
char finish;
}bank[N];
void main()
{
int i,j,k,number,p,t;
int request[4];
char S;
char a='T';
char b='F';
int q=0;
char finish1[5];
int m;
int record[5];
int work1[4];
char f[5];
for(i=0;i<N;i++)
finish1[i]=b; /*置初值False */
for(i=0;i<N;i++) /*输入进程的Max,Allocation值*/
{
printf("\nPlease Input data of course %d:\n",i);
printf("Please Input the NO.:");
scanf("%s",&bank[i].num);
for(j=0;j<4;j++)
{
printf("Please input the max %d:\n",j+1);
scanf("%d",&bank[i].max[j]);
}
for(j=0;j<4;j++)
{
printf("Please Input the Allocation %d:\n",j+1);
scanf("%d",&bank[i].allocation[j]);
}
printf("\n");
}
for(i=0;i<N;i++) /*计算出进程的Need值*/
{
for(j=0;j<4;j++)
bank[i].need[j]=bank[i].max[j]-bank[i].allocation[j];
}
for(j=0;j<4;j++) /*输入Available值*/
{
printf("Please Enter the data of available %d:\n",j+1);
scanf("%d",&bank[0].available[j]);
}
for(i=0;i<N;i++)
{
f[i]=finish1[i]; /*置初值*/
}
printf(" Max Allocation Need Available\n"); /*显示进程的信息*/
printf(" NO. A B C D A B C D A B C D A B C D\n");
for(i=0;i<N;i++)
{
printf("%5s",bank[i].num);
for(j=0;j<4;j++)
printf("%4d",bank[i].max[j]);
for(j=0;j<4;j++)
printf("%4d",bank[i].allocation[j]);
for(j=0;j<4;j++)
printf("%4d",bank[i].need[j]);
if(i==0)
{
for(j=0;j<4;j++)
printf("%4d",bank[i].available[j]);
printf("\n");
}
else
{
printf("\n");
}
}
loop:
{
printf("\n Which number of the course did the system request?\n");
scanf("%d",&number);
printf("\n");
}
for(j=0;j<4;j++)
{
printf("Please Enter the data of request %d:\n",j+1);
scanf("%d",&request[j]);
}
q=0; /*三类资源系统必须都满足*/
for(j=0;j<4;j++)
{
if ((request[j]<=bank[number].need[j])&&(request[j]<=bank[0].available[j]))
q++;
else
q+=0;
}
{ /*若三类资源系统都满足*/
if(q==4)
{
for(j=0;j<4;j++)
{
bank[number].need[j]=bank[number].need[j]-request[j];
bank[0].available[j]=bank[0].available[j]-request[j];
bank[number].allocation[j]=bank[number].allocation[j]+request[j];
}
printf(" Max Allocation Need Available\n");
printf(" NO. A B C D A B C D A B C D A B C D\n");
for(i=0;i<N;i++)
{
printf("%5s",bank[i].num);
for(j=0;j<4;j++)
printf("%4d",bank[i].max[j]);
for(j=0;j<4;j++)
printf("%4d",bank[i].allocation[j]);
for(j=0;j<4;j++)
printf("%4d",bank[i].need[j]);
if (i==0)
{
for(j=0;j<4;j++)
printf("%4d",bank[i].available[j]);
printf("\n");
}
else
printf("\n");
}
for(j=0;j<4;j++) /*检查系统是否处于安全性状态*/
{
work1[j]=bank[0].available[j]; /*初始化 */
}
m=0;
t=0;
while (t<5)
{
for(i=0;i<5;i++)
{
if((work1[0]>=bank[i].need[0])&&(work1[1]>=bank[i].need[1])&&(work1[2]>=bank[i].need[2])&&(finish1[i]==b)) /*找到满足条件的一个进程*/
{
record[m]=i; /*记录序列的先后顺序*/
bank[i].work[0]=work1[0];
bank[i].work[1]=work1[1];
bank[i].work[2]=work1[2];
bank[i].work[3]=work1[3];
work1[0]=work1[0]+bank[i].allocation[0];
work1[1]=work1[1]+bank[i].allocation[1];
work1[2]=work1[2]+bank[i].allocation[2];
work1[3]=work1[3]+bank[i].allocation[3];
finish1[i]=a; /*值为T则表示可行*/
bank[i].wa[0]=work1[0];
bank[i].wa[1]=work1[1];
bank[i].wa[2]=work1[2];
bank[i].wa[3]=work1[3];
bank[i].finish=finish1[i];
m++;
}
else
continue;
}
t++;
}
printf("\n");
{
if (m==5) /*m值为5则表示系统处于安全状态*/
{
printf(" Max Allocation Need Available\n");
printf(" NO. A B C D A B C D A B C D A B C D\n");
for(k=0;k<N;k++)
{
p=record[k];
printf("%5s",bank[p].num);
for(j=0;j<4;j++)
printf("%4d",bank[p].work[j]);
for(j=0;j<4;j++)
printf("%4d",bank[p].need[j]);
for(j=0;j<4;j++)
printf("%4d",bank[p].allocation[j]);
for(j=0;j<4;j++)
printf("%5d",bank[p].wa[j]);
printf("%5c",bank[p].finish);
printf("\n");
}
printf("\n");
printf("\n");
printf("The order is:");
for(k=0;k<N;k++)
printf("%d",record[k]);
printf("\n Contiune or Not(Y/N)?");
getchar();
S=getchar();
if(S=='N'||S=='n')
{
getchar();
exit(0);
}
else
for(i=0;i<N;i++)
{
finish1[i]=f[i];
}
goto loop;
}
else
printf("The system is not safe to assign!");
printf("\n Contiune or Not(Y/N)?");
getchar();
S=getchar();
if(S=='N'||S=='n')
{
getchar();
exit(0);
}
else
{
printf("\nPlease Enter the request:\n");
for(j=0;j<4;j++)
{
bank[number].need[j]=bank[number].need[j]+request[j];
bank[0].available[j]=bank[0].available[j]+request[j];
bank[number].allocation[j]=bank[number].allocation[j]-request[j];
}
for(i=0;i<N;i++)
{
finish1[i]=f[i];
}
goto loop;
}
}
}
else
{
printf("\nOut the extent!");
printf("\n Contiune or Not(Y/N)?");
getchar();
S=getchar();
if (S=='N'||S=='n')
{
getchar();
exit(0);
}
else
{
printf("\nPlease Rewrite the request\n");
goto loop;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -