操作系统课程设计银行家算法流程图+源代码+设计报告Word格式.docx
- 文档编号:8390669
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:18
- 大小:65.10KB
操作系统课程设计银行家算法流程图+源代码+设计报告Word格式.docx
《操作系统课程设计银行家算法流程图+源代码+设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计银行家算法流程图+源代码+设计报告Word格式.docx(18页珍藏版)》请在冰点文库上搜索。
intact;
intip=0;
int
line=0;
/*line为要写的行号,全局变量*/
intwriteok;
intright;
charwel[30]={"
WelcomeToUseAn_LiSystem"
};
charente[76]={"
警告:
未经作者同意不得随意复制更改!
charrights[40]={"
Copyright(c)2002"
structdatetoday;
structtimenow;
typedefstruct
{intdata[maxsize];
inttop;
}stack;
intemptystack(stack*S)
{if(S->
top==48&
&
S->
data[S->
top]==35)return
(1);
/*35is'
#'
*/
elsereturn(0);
}
intpush(stack*S,intx)
top>
=maxsize-1)return(-1);
else{S->
top++;
top]=x;
return(0);
}
intgettop(stack*S)
{returnS->
top];
intpop(stack*S)
{if(emptystack(S)){
printf("
thestackisempty\n"
);
exit
(1);
elseS->
top--;
returnS->
top+1];
voidinitstack(stack*S)
{inti;
top=0;
top]=35;
/*****模拟打字机的效果*********/
delay_fun()
{
inti;
voidmusic();
for(i=0;
;
i++)
if(wel!
='
\0'
)
{
delay(1000);
textcolor(YELLOW);
gotoxy(26+i,8);
cprintf("
%c"
wel);
谢谢"
网络"
music(1,60);
elsebreak;
delay(500000);
;
i++)
if(ente!
textcolor(RED);
/*显示警告及版权*/
gotoxy(2+i,11);
ente);
delay(40000);
if(rights!
='
gotoxy(30+i,14);
rights);
music(1,60);
else
break;
getch();
/*********登陆后的效果**********/
logined()
{
clrscr();
gotoxy(28,10);
textcolor(YELLOW);
cprintf("
程序正在载入
请稍候....."
gotoxy(35,12);
i<
=50;
gotoxy(40,12);
delay(8000);
%02d%已完成"
i*2);
gotoxy(i+15,13);
\n"
|"
main0();
/*********对PC扬声器操作的函数****/
voidmusic(intloop,intf)
/*f为频率*/
30*loop;
sound(f*20);
delay(200);
nosound();
intanalys(ints,inta)
{inthh,pos;
switch(a)
{case(int)'
i'
hh=0;
break;
case(int)'
+'
hh=1;
*'
hh=2;
('
hh=3;
)'
hh=4;
hh=5;
E'
hh=6;
T'
hh=7;
F'
hh=8;
default:
{printf("
\nanalys()分析发现不该有的字符%c!
(位置:
%d)"
a,ip+1);
writeerror('
0'
"
\n............分析出现错误!
!
writeerror(a,"
\n错误类型:
不该有字符"
网"
returnERROR;
pos=(s-48)*10+hh;
switch(pos)
{case3:
case43:
case63:
case73:
act=4;
returnMOVEIN;
case0:
case40:
case60:
case70:
act=5;
case11:
case81:
act=6;
case92:
case22:
act=7;
case84:
act=11;
/*-------------------------------------------*/
case91:
case94:
case95:
act=1;
returnGUIYUE;
case21:
case24:
case25:
act=2;
case101:
case102:
case104:
case105:
act=3;
case31:
case32:
case34:
case35:
case111:
case112:
case114:
case115:
case51:
case52:
case54:
case55:
act=6;
/*+++++++++++++++++*/
case15:
returnACC;
/*******************************/
case6:
return1;
case7:
case47:
return2;
case8:
case48:
case68:
return3;
case46:
return8;
case67:
return9;
case78:
return10;
{if(a=='
)printf("
elseprintf("
\nanalys()分析发现字符%c不是所期望的!
writeerror('
\n...........分析出现错误!
writeerror(a,"
字符"
不是所期望的!
"
intwritefile(inta,char*st)
{FILE*fp;
fp=fopen("
an_slr.txt"
a"
if(fp==0){printf("
\nwriteerror!
writeok=0;
else{if(a==-1)
{fprintf(fp,"
%s"
st);
/*若a==-1则为添加的注释*/
elseif(a==-2)
{getdate(&
today);
gettime(&
now);
fprintf(fp,"
\n测试日期:
%d-%d-%d"
today.da_year,today.da_mon,today.da_day);
测试时间:
%02d:
%02d:
%02d"
now.ti_hour,now.ti_min,now.ti_sec);
elseif(a>
=0)fprintf(fp,"
\nstep:
%02d,%s"
a,st);
writeok=1;
fclose(fp);
returnwriteok;
intwriteerror(chara,char*st)
/*错误类型文件*/
{FILE*fpp;
fpp=fopen("
if(fpp==0){printf("
else{if(a=='
)fprintf(fpp,"
/*若a=='
则为添加的注释*/
elsefprintf(fpp,"
%s\'
%c\'
%d)"
st,a,ip+1);
fclose(fpp);
/*^^^^^^^^^^^^^^^^^^^^^^*/
main0()
{intan,flag=1,action,lenr;
chara,w[MAXINPUT];
intlen,s,ss,aa,ana;
stack*st;
charr[MAXSH][MAXSHL];
/*初始化产生式*/
strcpy(r[0],"
E"
strcpy(r[1],"
E->
E+T"
strcpy(r[2],"
T"
strcpy(r[3],"
T->
T*F"
strcpy(r[4],"
F"
strcpy(r[5],"
F->
(E)"
strcpy(r[6],"
i"
\npleaseinputanalysestring:
gets(w);
len=strlen(w);
w[len]='
w[len+1]='
initstack(st);
push(st,48);
/*(int)0进栈*/
writefile(-1,"
\n------------------------SLR
(1)词法分析器-------------------------"
\n
计本003
安完成于2003.01.1214:
04"
\n谢谢"
\n以下为串"
writefile(-1,w);
为系统添加)的分析结果:
writefile(-2,"
do{
s=gettop(st);
aa=(int)w[ip];
action=analys(s,aa);
if(action==MOVEIN)
{ss=48+act;
push(st,aa);
push(st,ss);
/*ifss=4int=52*/
ip++;
elseif(action==GUIYUE)
{lenr=strlen(r[act])-3;
for(an=0;
an<
=2*lenr-1;
an++)
pop(st);
/*#0
*/
s=gettop(st);
/*s=0*/
push(st,(int)r[act][0]);
/*将产生式左端F进栈*/
ana=analys(s,(int)r[act][0])+48;
if(ana>
59)printf("
\分析出错:
ana>
59!
push(st,ana);
/*analys(s,aa)即为goto(s'
aa)*/
if((line+1)%20==0)
{printf("
\nThisscreenisfull,pressanykeytocontinue!
getche();
printf("
step%02d:
%s\n"
line++,r[act]);
writefile(line,r[act]);
elseif(action==ACC)
{flag=0;
right=1;
elseif(action==ERROR)
right=0;
}/*接受成功*/
else
{flag=0;
right=0;
}
/*出错*/
}while(flag==1);
if(right==1)printf("
\nok,输入串%s为可接受串!
w);
if(right==0)printf("
\nsorry,输入串%s分析出错!
if(writeok==1){printf("
\nAnWinsofthavewroteafilean_slr.txt"
if(right==1)writefile(-1,"
\n最终结果:
输入串为可接受串!
main()
/*主函数*/
{clrscr();
delay_fun();
logined();
六、测试报告-操作系统课程设计-银行家算法(流程图+源代码+设计报告)
六、测试报告:
(测试结果保存于系统生成的an.txt文件中)
以下为课本上的实例:
:
-------------------------------------------------------------------------------------
========================银行家算法测试结果=========================
T0时刻可用资源(Available)A:
3,B:
3,C:
2
测试日期:
2003-6-28
请求分配时间:
14:
07:
29
经测试,可为该进程分配资源。
以下为资源分配表
资源
Work
Need
AllocationWork+Alloc
Finish
ID
A
B
C
C
P01
030302
010202
020000
050302
TRUE
P03
000101
020101
070403
P00
000100
070503
P02
060000
030002
100505
P04
040301
000002
100507
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 银行家 算法 流程图 源代码 设计 报告