?? 銀行家算法程序.txt
字號(hào):
我把程序弄下來(lái)了
是我同學(xué)寫(xiě)的,我不懂的
應(yīng)該是沒(méi)錯(cuò)的,我同學(xué)用VC運(yùn)過(guò)
報(bào)告你就自己弄把
如果你會(huì)一點(diǎn)
最好改改
我的那份已經(jīng)寄到老師那了
所以。。。。。。
#include <stdio.h>
#define N 5
struct bank //定義數(shù)結(jié)構(gòu)體
{char num[6]; //進(jìn)程編號(hào)
int max[3]; //最大需求矩陣
int allocation[3]; //分配矩陣
int need[3]; //需求矩陣
int available[3]; //可利用資源向量
int work[3]; //工作向量
int wa[3]; // work+allocation
char finish;
}bank[N];
main()
{int i,j,k,number,p,t;
int request[3];
char h;
char a='T';
char b='F';
int q=0;
char finish1[5];
int m;
int record[5];
int work1[3];
char f[5];
for(i=0;i<N;i++)
finish1[i]=b;
for(i=0;i<N;i++)
{printf("\nInput data of bank %d:\n",i);
printf("NO.:");
scanf("%s",&bank[i].num);
for(j=0;j<3;j++)
{printf("max %d:\n",j+1);
scanf("%d",&bank[i].max[j]);}
for(j=0;j<3;j++)
{printf("allocation %d:\n",j+1);
scanf("%d",&bank[i].allocation[j]);}
printf("\n");}
for(i=0;i<N;i++)
{for(j=0;j<3;j++)
bank[i].need[j]=bank[i].max[j]-bank[i].allocation[j];}
//得到需求量
for(j=0;j<3;j++)
{printf("enter data of available:\n");
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 A B C A B C A B C\n");
for(i=0;i<N;i++)
{printf("%5s",bank[i].num);
for(j=0;j<3;j++)
printf("%4d",bank[i].max[j]);
for(j=0;j<3;j++)
printf("%4d",bank[i].allocation[j]);
for(j=0;j<3;j++)
printf("%4d",bank[i].need[j]);
if(i==0)
{for(j=0;j<3;j++)
printf("%4d",bank[i].available[j]);
printf("\n");}
else
{printf("\n");}
} //輸出資源分配表
loop: {printf("\n which number of request?\n");
scanf("%d",&number);
printf("\n");}
for(j=0;j<3;j++)
{printf("enter data of request %d:\n",j+1);
scanf("%d",&request[j]);} //輸入請(qǐng)求資源進(jìn)程號(hào)
q=0;
for(j=0;j<3;j++)
{if((request[j]<=bank[number].need[j])&&(request[j]<=bank[0].available[j]))
q++;
else
q+=0;}
{if (q==3)
{for(j=0;j<3;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];} //安全檢測(cè)
printf(" max allocation need available\n");
printf("NO. A B C A B C A B C A B C\n");
for(i=0;i<N;i++)
{printf("%5s",bank[i].num);
for(j=0;j<3;j++)
printf("%4d",bank[i].max[j]);
for(j=0;j<3;j++)
printf("%4d",bank[i].allocation[j]);
for(j=0;j<3;j++)
printf("%4d",bank[i].need[j]);
if (i==0)
{for(j=0;j<3;j++)
printf("%4d",bank[i].available[j]);
printf("\n");}
else
printf("\n");
}//請(qǐng)求資源分配后的資源分配表
for(j=0;j<3;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];
work1[0]=work1[0]+bank[i].allocation[0];
work1[1]=work1[1]+bank[i].allocation[1];
work1[2]=work1[2]+bank[i].allocation[2];
finish1[i]=a;
bank[i].wa[0]=work1[0];
bank[i].wa[1]=work1[1];
bank[i].wa[2]=work1[2];
bank[i].finish=finish1[i];
m++; }
else
continue;
}
t++;} //安全算法
printf("\n");
{if (m==5)
{printf(" work need allocation work+alloct finish\n");
printf("NO. A B C A B C A B C A B C \n");
for(k=0;k<N;k++)
{p=record[k];
printf("%5s",bank[p].num);
for(j=0;j<3;j++)
printf("%4d",bank[p].work[j]);
for(j=0;j<3;j++)
printf("%4d",bank[p].need[j]);
for(j=0;j<3;j++)
printf("%4d",bank[p].allocation[j]);
for(j=0;j<3;j++)
printf("%4d",bank[p].wa[j]);
printf("%4c",bank[p].finish);
printf("\n");} //輸出申請(qǐng)資源時(shí)的安全性檢查表
for(k=0;k<N;k++)
printf("%4d",record[k]); //安全序列輸出
printf("\n Contiune or not(Y/N)?");
getchar();
h=getchar();
if (h=='N'||h=='n')
{getchar();
exit(0);
else
for(i=0;i<N;i++)
{finish1[i]=f[i];}
goto loop;
} //選擇繼續(xù)或選擇退出
else
printf("it is not safe to assign");
printf("\n Contiune or not(Y/N)?");
getchar();
h=getchar();
if (h=='N'||h=='n')
{getchar();
exit(0);}
else
{printf("\n Enter the request\n");
for(j=0;j<3;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];
}//恢復(fù)判斷前的原始數(shù)據(jù)
for(i=0;i<N;i++)
{finish1[i]=f[i];}
goto loop;
}}}
else
{printf("\n Waring: Out the extent!");
printf("\n Contiune or not(Y/N)?");
getchar();
h=getchar();
if (h=='N'||h=='n')
{getchar();
exit(0); }
else
{printf("\n Rewrite the request\n");
goto loop; }//判斷選擇繼續(xù)或退出
}}}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -