操作系统课的实验(银里手算法)#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;inext=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;inext=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;jnext=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;inext=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;inext=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;tempstat==0)  {  for(j=0;jnext,worktemp=worktemp->next)  if(needtemp->valuevalue)  processtest++;  if(processtest==colum)  {  for(j=0;jvalue+=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;tnext;  finishtemp->stat=0;  }  }  else  for(t=0;tnext;  alloctemp=alloctemp->next;  }  processtest=0;  worktemp=workhead;  finishtemp=finishtemp->next;  }  }  path2->next=NULL;  finishtemp=finihead;  for(temp=0;tempstat==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;  }#include"string.h"#include#include#defineM5#defineN3#defineFALSE0#defineTRUE1/*M个进程对N类资源最大资源需求量*/intMAX[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};/*系统可用资源数*/intAVAILABLE[N]={10,5,7};/*M个进程对N类资源最大资源需求量*/intALLOCATION[M][N]={{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}};/*M个进程已经得到N类资源的资源量*/intNEED[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};/*M个进程还需要N类资源的资源量*/intRequest[N]={0,0,0};voidmain(){inti=0,j=0;charflag='Y';voidshowdata();voidchangdata(int);voidrstordata(int);intchkerr(int);showdata();while(flag=='Y'||flag=='y'){i=-1;while(i=M){printf("请输入需申请资源的进程号(从0到");printf("%d",M-1);printf(",否则重输入!):");scanf("%d",&i);if(i=M)printf("输入的进程号不存在,重新输入!\n");}printf("请输入进程");printf("%d",i);printf("申请的资源数\n");for(j=0;jNEED[i][j]){printf("进程");printf("%d",i);printf("申请的资源数大于进程");printf("%d",i);printf("还需要");printf("%d",j);printf("类资源的资源量!申请不合理,出错!请重新选择!\n");/*printf("申请不合理,出错!请重新选择!\n");*/flag='N';break;}else{if(Request[j]>AVAILABLE[j]){printf("进程");printf("%d",i);printf("申请的资源数大于系统可用");printf("%d",j);printf("类资源的资源量!申请不合理,出错!请重新选择!\n");/*printf("申请不合理,出错!请重新选择!\n");*/flag='N';break;}}}if(flag=='Y'||flag=='y'){changdata(i);if(chkerr(i)){rstordata(i);showdata();}elseshowdata();}elseshowdata();printf("\n");printf("是否继续银里手算法演示,按'Y'或'y'键继续,按'N'或'n'键退出演示:");scanf("%c",&flag);}}voidshowdata(){inti,j;printf("系统可用的资源数为:\n");printf("");for(j=0;j");}printf("\n");return0;}
2015/11/20 3:54:43 883KB 算法 银行家
1
设计思想(1)程序主体结构部分:说明部分%%规则部分%%辅助程序部分(2)主体结构的说明在这里说明部分告诉我们使用的LETTER,DIGIT,IDENT(标识符,通常定义为字母开头的字母数字串)和STR(字符串常量,通常定义为双引号括起来的一串字符)是什么意思.这部分也可以包含一些初始化代码.例如用#include来使用标准的头文件和前向说明(forward,references).这些代码应该再标记"%{"和"%}"之间;规则部分>可以包括任何你想用来分析的代码;我们这里包括了忽略所有注释中字符的功能,传送ID名称和字符串常量内容到主调函数和main函数的功能.(3)实现原理程序中先判断这个句语句中每个单元为关键字、常数、运算符、界符,对与不同的单词符号给出不同编码方式的编码,用以区分之。
PL/0语言的EBNF表示::==;::=={|};::=+|-::=*|/::==|#|=::=a|b|…|X|Y|Z::=0|1|2|…|8|9三:设计过程1.关键字:void,main,if,then,break,int,Char,float,include,for,while,printfscanf并为小写。
2."+”;”-”;”*”;”/”;”:=“;”:”;”=“;”“;”=“;”(“;”)”;”;”;”#”为运算符。
3.其他标记如字符串,表示以字母开头的标识符。
4.空格符跳过。
5.各符号对应种别码关键字分别对应1-13运算符分别对应401-418,501-513。
字符串对应100常量对应200结束符#四:举例说明目标:实现对常量的判别代码:digit[0-9]letter[A-Za-z]other_char[!-@\[-~]id({letter}|[_])({letter}|{digit}|[_])*string{({letter}|{digit}|{other_char})+}int_num{digit}+%%[|\t|\n]+"auto"|"double"|"int"|"struct"|"break"|"else"|"long"|"switch"|"case"|"enum"|"register"|"typedef"|"char"|"extern"|"return"|"union"|"const"|"float"|"short"|"unsigned"|"continue"|"for"|"signed"|"void"|"default"|"goto"|"sizeof"|"do"|"if"|"static"|"while"|"main"{Upper(yytext,yyleng);printf("%s,NULL\n",yytext);}\"([!-~])*\"{printf("CONST_string,%s\n",yytext);}-?{int_num}[.]{int_num}?([E][+|-]?{int_num})?{printf("CONST_real,%s\n",yytext);}"0x"?{int_num}{printf("CONST_int,%s\n",yytext);}","|";"|"("|")"|"{"|"}"|"["|"]"|"->"|"."|"!"|"~"|"++"|"--"|"*"|"&"|"sizeof"|"/"|"%"|"+"|"-"|">"|"="|">="|"<<="|"&="|"^="|"|="|"="{printf("%s,NULL\n",yytext);}{id}{printf("ID,%s\n",yytext);}{digit}({letter})+{printf("error1:%s\n",yytext);}%%#includeUpper(char*s,intl){inti;for(i=0;i<l;i++){s[i]=toupper(s[i])
2021/11/7 5:50:07 105KB 词法分析器制作
1
QT5.5.1串口实现在线热拔插检测。
另外加了一个Thread的例子预备些串口数据处理的。
这里直接给代码了,加入到工程里,include一下就可以了。
2019/7/11 19:36:25 3KB QT 串口 热拔插
1
本文所述的程序示例为VC++图象特效的截图示例,需要DirectX3.0以上版,代码中的GetScreen函数是本截图程序的关键。
运转这个程序可用Esc键结束。
代码中需要ddutil.h与ddutil.cpp文件,请自行下载添加。
关于InitDDraw()函数,功能是初始化DirectDraw环境,创建换页链(主页面,一个后台缓冲区),以及创建一个定时器。
具体的功能代码如下:#include#include#include#include#include<math.h>#include
2021/5/19 13:14:52 64KB rect 示例 程序
1
该安装包次要包含opencv2.1所需的资源,也可单独获取bin、include、lib等文件
2018/9/20 2:08:11 30.96MB OpenCV2.1 图形图像技术
1
程序名称:飞思卡尔智能车舵机调试工具v1.1程序作者:LinX时间:2009-03-07联系方式:QQ:408111919Email:linhaiwz@163.com"&vbCrLf&vbCrLf&_〖 本程序为方便舵机调试而编写,错误在所难免,如有建议欢迎和我联系!〗角度转换为高电平时间角度-45045(anger/度)高电平时间100015002000(t/us)计算公式为:T=1000+(anger+45)*(1000/90)该程序可以通过串口与单片机进行通讯,实时改变舵机的角度。
通讯协议为:0xfe0xMM0xNN(其中0xfe为包头,0xMM为PWMDTYx高8位,0xN为PWMDTYx低8位)在串口中缀中分三次接收,在第二次接收时保存数据到temp0中,在第三次接收到数据时将PWMDTY01=((unsignedint)temp0<<8)|RxData就可以完成PWM改变输出了。
下位机程序如下:#include/*commondefinesandmacros*/#include/*derivativeinformation*/#pragmaLINK_INFODERIVATIVE"mc9s12xs128"unsignedcharRX=0,temp0;voiduart_putchar(unsignedcharch){if(ch=='\n'){while(!(SCI0SR1&0x80));SCI0DRL=0x0d;return;}while(!(SCI0SR1&0x80));SCI0DRL=ch;}staticvoidPWM_Init(void){//SB,Bforch2367//SA,Aforch0145PWMCTL_CON01=1; //0和1联合成16位PWM;
PWMCAE_CAE1=0; //选择输出模式为左对齐输出模式PWMCNT01=0; //计数器清零;
PWMPOL_PPOL1=1; //先输出高电平,计数到DTY时,反转电平PWMPRCLK=0X40;//clockA不分频,clockA=busclock=16MHz;CLKB16分频:1MhzPWMSCLA=8;//对clockSA进行2*8=16分频;
pwmclock=clockA/16=1MHz;PWMCLK_PCLK1=1;//选择clockSA做时钟源PWMPER01=20000;//周期20ms;
50Hz;(可以使用的范围:50-200hz)PWMDTY01=1500;//高电平时间为1.5ms;PWME_PWME1=1;}voidsetbusclock(void)//PLLsetting{CLKSEL=0X00;//disengagePLLtosystemPLLCTL_PLLON=1;//turnonPLLSYNR=1;REFDV=1;//pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;_asm(nop);//BUSCLOCK=16M_asm(nop);while(!(CRGFLG_LOCK==1));//whenpllissteady,thenuseit;CLKSEL_PLLSEL=1;//engagePLLtosystem;}staticvoidSCI_Init(void)//SCI{SCI0CR1=0x00;SCI0CR2=0x2c;//enableReceiveFullInterrupt,RXenab
2017/9/26 2:39:53 273KB 飞思卡尔 智能车 舵机 调试工具
1
vc编写的酒店管理零碎,值得一看//MainFrm.h:interfaceoftheCMainFrameclass///////////////////////////////////////////////////////////////////////////////#if!defined(AFX_MAINFRM_H__E710476A_1E9E_4198_A902_2FA0B32BD707__INCLUDED_)#defineAFX_MAINFRM_H__E710476A_1E9E_4198_A902_2FA0B32BD707__INCLUDED_#if_MSC_VER>1000#pragmaonce#endif//_MSC_VER>1000#include"CoolTabBar.h"#include"CoolListBox.h"#include".\\3D-MaxTab\\RollupCtrl.h"#include".\\coolmenu\\CoolMenu.h"#include".\\TrayIco\\SystemIcon.h"#include"InfoLookDialog.h"#include".\\clock\\EDCLOCK.H"//工具栏上的时钟#include"Page3.h"classCMainFrame:publicCFrameWnd{ protected://createfromserializationonly CMainFrame(); DECLARE_DYNCREATE(CMainFrame)//Attributespublic://Operations
2019/1/3 4:58:28 1.42MB 酒店管理系统 源码 VC
1
QGIS二次开发包,省去了编译的大多数时间,使用环境VS2010+QT4.8+QGIS2.8.9。
使用方法,首先下载VS2010QT4.8的插件,然后新建工程,其次设置工程包含QGIS2.8.9的include和lib,在input下添加.lib文件。
有人说要把桌面QGIS的bin下的文件拷的工程release上面(.exe文件下),本人没有拷贝也可以编译,看情况而定吧,都上传给大家了
2017/3/24 13:34:57 6.1MB QGIS二次开发
1
C语言实现独一可译码,思路清晰,代码简单易懂。
#include#include#definemaxlen1024charinfo[maxlen][maxlen];chars[maxlen][maxlen];intnum=0;//s字符串计数boolinfo_check(intcount){ inti,j; for(i=0;i<count-1;i++) for(j=i+1;j<count;j++) if(!strcmp(info[i],info[j])) { returntrue; } returnfalse;}......
2016/9/22 10:46:52 2KB 唯一可译码 C语言
1
前几天下载了一个OpenGL的源码参详,无耐编译不过,提示错误为:errorC1083:无法打开包括文件:“gl\GLAux.h”:Nosuchfileordirectory原来是:#include出错====================================================处理方法如下:1:下载此资源包2:【glaux.dll】复制到C:\Windows\system323:【glaux.lib】复制到C:\ProgramFiles(x86)\MicrosoftSDKs\Windows\v7.0A\Lib4:【glaux.h】复制到C:\ProgramFiles(x86)\MicrosoftSDKs\Windows\v7.0A\Include\GL5:重新编译运行即可
2018/5/23 6:42:48 243KB OpenGL glaux
1
共 218 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡