银行家.docx

上传人:b****5 文档编号:5656961 上传时间:2022-12-30 格式:DOCX 页数:14 大小:16.77KB
下载 相关 举报
银行家.docx_第1页
第1页 / 共14页
银行家.docx_第2页
第2页 / 共14页
银行家.docx_第3页
第3页 / 共14页
银行家.docx_第4页
第4页 / 共14页
银行家.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

银行家.docx

《银行家.docx》由会员分享,可在线阅读,更多相关《银行家.docx(14页珍藏版)》请在冰豆网上搜索。

银行家.docx

银行家

银行家算法

#include"malloc.h"

#include"stdio.h"

#include"stdlib.h"

#definealloclensizeof(structallocation)

#definemaxlensizeof(structmax)

#defineavalensizeof(structavailable)

#defineneedlensizeof(structneed)

#definefinilensizeof(structfinish)

#definepathlensizeof(structpath)

structallocation

{

intvalue;

structallocation*next;

};

structmax

{

intvalue;

structmax*next;

};

structavailable/*可用资源数*/

{

intvalue;

structavailable*next;

};

structneed/*需求资源数*/

{

intvalue;

structneed*next;

};

structpath

{

intvalue;

structpath*next;

};

structfinish

{

intstat;

structfinish*next;

};

intmain()

{

introw,colum,status=0,i,j,t,temp,processtest;

structallocation*allochead,*alloc1,*alloc2,*alloctemp;

structmax*maxhead,*maxium1,*maxium2,*maxtemp;

structavailable*avahead,*available1,*available2,*workhead,*work1,*work2,*worktemp,*worktemp1;

structneed*needhead,*need1,*need2,*needtemp;

structfinish*finihead,*finish1,*finish2,*finishtemp;

structpath*pathhead,*path1,*path2;

printf("\n请输入系统资源的种类数:

");

scanf("%d",&colum);

printf("请输入现时内存中的进程数:

");

scanf("%d",&row);

printf("请输入已分配资源矩阵:

\n");

for(i=0;i

{

for(j=0;j

{

printf("请输入已分配给进程p%d的%c种系统资源:

",i,'A'+j);

if(status==0)

{

allochead=alloc1=alloc2=(structallocation*)malloc(alloclen);

alloc1->next=alloc2->next=NULL;

scanf("%d",&allochead->value);

status++;

}

else

{

alloc2=(structallocation*)malloc(alloclen);

scanf("%d,%d",&alloc2->value);

if(status==1)

{

allochead->next=alloc2;

status++;

}

alloc1->next=alloc2;

alloc1=alloc2;

}

}

}

alloc2->next=NULL;

status=0;

printf("请输入最大需求矩阵:

\n");

for(i=0;i

{

for(j=0;j

{

printf("请输入进程p%d种类%c系统资源最大需求:

",i,'A'+j);

if(status==0)

{

maxhead=maxium1=maxium2=(structmax*)malloc(maxlen);

maxium1->next=maxium2->next=NULL;

scanf("%d",&maxium1->value);

status++;

}

else

{

maxium2=(structmax*)malloc(maxlen);

scanf("%d,%d",&maxium2->value);

if(status==1)

{

maxhead->next=maxium2;

status++;

}

maxium1->next=maxium2;

maxium1=maxium2;

}

}

}

maxium2->next=NULL;

status=0;

printf("请输入现时系统剩余的资源矩阵:

\n");

for(j=0;j

{

printf("种类%c的系统资源剩余:

",'A'+j);

if(status==0)

{

avahead=available1=available2=(structavailable*)malloc(avalen);

workhead=work1=work2=(structavailable*)malloc(avalen);

available1->next=available2->next=NULL;

work1->next=work2->next=NULL;

scanf("%d",&available1->value);

work1->value=available1->value;

status++;

}

else

{

available2=(structavailable*)malloc(avalen);

work2=(structavailable*)malloc(avalen);

scanf("%d,%d",&available2->value);

work2->value=available2->value;

if(status==1)

{

avahead->next=available2;

workhead->next=work2;

status++;

}

available1->next=available2;

available1=available2;

work1->next=work2;

work1=work2;

}

}

available2->next=NULL;

work2->next=NULL;

status=0;

alloctemp=allochead;

maxtemp=maxhead;

for(i=0;i

for(j=0;j

{

if(status==0)

{

needhead=need1=need2=(structneed*)malloc(needlen);

need1->next=need2->next=NULL;

need1->value=maxtemp->value-alloctemp->value;

status++;

}

else

{

need2=(structneed*)malloc(needlen);

need2->value=(maxtemp->value)-(alloctemp->value);

if(status==1)

{

needhead->next=need2;

status++;

}

need1->next=need2;

need1=need2;

}

maxtemp=maxtemp->next;

alloctemp=alloctemp->next;

}

need2->next=NULL;

status=0;

for(i=0;i

{

if(status==0)

{

finihead=finish1=finish2=(structfinish*)malloc(finilen);

finish1->next=finish2->next=NULL;

finish1->stat=0;

status++;

}

else

{

finish2=(structfinish*)malloc(finilen);

finish2->stat=0;

if(status==1)

{

finihead->next=finish2;

status++;

}

finish1->next=finish2;

finish1=finish2;

}

}

finish2->next=NULL;/*Initializationcompleated*/

status=0;

processtest=0;

for(temp=0;temp

{

alloctemp=allochead;

needtemp=needhead;

finishtemp=finihead;

worktemp=workhead;

for(i=0;i

{

worktemp1=worktemp;

if(finishtemp->stat==0)

{

for(j=0;jnext,worktemp=worktemp->next)

if(needtemp->value<=worktemp->value)

processtest++;

if(processtest==colum)

{

for(j=0;j

{

worktemp1->value+=alloctemp->value;

worktemp1=worktemp1->next;

alloctemp=alloctemp->next;

}

if(status==0)

{

pathhead=path1=path2=(structpath*)malloc(pathlen);

path1->next=path2->next=NULL;

path1->value=i;

status++;

}

else

{

path2=(structpath*)malloc(pathlen);

path2->value=i;

if(status==1)

{

pathhead->next=path2;

status++;

}

path1->next=path2;

path1=path2;

}

finishtemp->stat=1;

}

else

{

for(t=0;t

alloctemp=alloctemp->next;

finishtemp->stat=0;

}

}

else

for(t=0;t

{

needtemp=needtemp->next;

alloctemp=alloctemp->next;

}

processtest=0;

worktemp=workhead;

finishtemp=finishtemp->next;

}

}

path2->next=NULL;

finishtemp=finihead;

for(temp=0;temp

{

if(finishtemp->stat==0)

{

printf("\n系统处于非安全状态!

\n");

exit(0);

}

finishtemp=finishtemp->next;

}

printf("\n系统处于安全状态.\n");

printf("\n安全序列为:

\n");

do

{

printf("p%d",pathhead->value);

}

while(pathhead=pathhead->next);

printf("\n");

return0;

}

Togetstarted,selectMATLABHelporDemosfromtheHelpmenu.

?

?

?

Errorusing==>mrdivide

Matrixdimensionsmustagree.

Errorin==>touruchanchuat4

x=b/d

x=

139.2801

267.6056

208.1377

>>dx=inv(b)

dx=

1.34590.25040.3443

0.56341.26760.4930

0.43820.43041.2167

?

?

?

Inputargument"b"isundefined.

Errorin==>jacobiat7

N=length(b);

>>A=[4,1,-1;1,-5,-1;2,-1,-6]

b=[13;-8;-2]

P=[0;0;0]

X=jacobi(A,b,P,10^(-4),20)

A=

41-1

1-5-1

2-1-6

 

b=

13

-8

-2

 

P=

0

0

0

 

k=

9

 

err=

2.5713e-005

 

X=

3.0000

2.0000

1.0000

>>A=[1,-9,-10;-9,1,5;8,7,1]

A=

1-9-10

-915

871

>>a=[-1,0,4]

a=

-104

>>p=[1,1,1]

p=

111

>>X=jacobi(A,b,P,10^(-4),20)

k=

20

 

err=

4.3622e+018

 

X=

1.0e+018*

-2.7077

2.7842

-0.2643

>>X=jacobi(A,b,P,10^(-4),20)

k=

20

 

err=

4.3622e+018

 

X=

1.0e+018*

-2.7077

2.7842

-0.2643

>>X=jacobi(A,b,P,10^(-4),20)

k=

20

 

err=

4.3622e+018

 

X=

1.0e+018*

-2.7077

2.7842

-0.2643

>>

A=[10,4,5;4,10,7;5,7,10]

b=[-1,4,0]

p=[1,1,1]

X=jacobi(A,b,P,10^(-4),20)

A=[5,-1,13;-1,2,4;-3,4,15]

b=[-1,0,4]

p=[1,1,1]

X=jacobi(A,b,P,10^(-4),20)

functionX=jacobi(A,b,P,delta,max1)

%A是n维非奇异阵

%B是n维向量

%P是初值

%delta是误差界

%X为所求的方程组AX=B的近似解

N=length(b);

fork=1:

max1

forj=1:

N

X(j)=(b(j)-A(j,[1:

j-1,j+1:

N])*P([1:

j-1,j+1:

N]))/A(j,j);

end

err=abs(norm(X'-P));

P=X';

if(err

break

end

end

X=X';k,err

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 调查报告

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1