⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dianti.txt

📁 对操作系统里的电梯调度算法进行的仿真
💻 TXT
📖 第 1 页 / 共 2 页
字号:
    m=POSETION/10;
    switch(m)
    {
     case 1:outtextxy(232,50,"1");break;
     case 2:outtextxy(232,50,"2");break;
     case 3:outtextxy(232,50,"3");break;
     case 4:outtextxy(232,50,"4");break;
     case 5:outtextxy(232,50,"5");break;
     case 6:outtextxy(232,50,"6");break;
     case 7:outtextxy(232,50,"7");break;
     case 8:outtextxy(232,50,"8");break;
     case 9:outtextxy(232,50,"9");break;
    }
}

void drawlift()
{
    setcolor(RED);
    rectangle(60,280,120,310);
    setfillstyle(SOLID_FILL,BLUE);
    floodfill(70,300,RED);
}

void directionlight_control()
{
    if(AIMFLOOR!=10&&(POSETION%10!=0||POSETION/10!=AIMFLOOR))
    {if(DIRECTION==1)
     {
      setfillstyle(SOLID_FILL,YELLOW);
      floodfill(arr_instructioncoordinate[1][0],arr_instructioncoordinate[1][1],RED);
     }
     else if(DIRECTION==2)
     {
      setfillstyle(SOLID_FILL,YELLOW);
      floodfill(arr_instructioncoordinate[0][0],arr_instructioncoordinate[0][1],RED);
     }
   }
    else if(AIMFLOOR==10||(POSETION%10==0&&POSETION/10==AIMFLOOR))
    {
     setfillstyle(SOLID_FILL,BLACK);
     floodfill(arr_instructioncoordinate[0][0],arr_instructioncoordinate[0][1],RED);
     setfillstyle(SOLID_FILL,BLACK);
     floodfill(arr_instructioncoordinate[1][0],arr_instructioncoordinate[1][1],RED);
    }
}
void buttonon_control()
{
int i,record;
for(i=1;i<=9;i++)
{if(request.callin[i]!=0)record=i;
  switch(record)
  {
   case 1:setfillstyle(SOLID_FILL,YELLOW);floodfill(211,100,RED);
          setcolor(GREEN);settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
          outtextxy(212,100,"1");break;
   case 2:setfillstyle(SOLID_FILL,YELLOW);floodfill(231,100,RED);
          setcolor(GREEN);settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
          outtextxy(232,100,"2");break;
   case 3:setfillstyle(SOLID_FILL,YELLOW);floodfill(211,140,RED);
          setcolor(GREEN);settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
          outtextxy(212,140,"3");break;
   case 4:setfillstyle(SOLID_FILL,YELLOW);floodfill(231,140,RED);
          setcolor(GREEN);settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
          outtextxy(232,140,"4");break;
   case 5:setfillstyle(SOLID_FILL,YELLOW);floodfill(211,180,RED);
          setcolor(GREEN);settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
          outtextxy(212,180,"5");break;
   case 6:setfillstyle(SOLID_FILL,YELLOW);floodfill(231,180,RED);
          setcolor(GREEN);settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
          outtextxy(232,180,"6");break;
   case 7:setfillstyle(SOLID_FILL,YELLOW);floodfill(211,220,RED);
          setcolor(GREEN);settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
          outtextxy(212,220,"7");break;
   case 8:setfillstyle(SOLID_FILL,YELLOW);floodfill(231,220,RED);
          setcolor(GREEN);settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
          outtextxy(232,220,"8");break;
   case 9:setfillstyle(SOLID_FILL,YELLOW);floodfill(211,260,RED);
          setcolor(GREEN);settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
          outtextxy(212,260,"9");break;
  }
}
}

void buttonoff_control()
{
int i,record;
for(i=1;i<=9;i++)
{
  if(request.callin[i]==0)record=i;
  setcolor(GREEN);
  settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
  switch(record)
  {
   case 1:setfillstyle(SOLID_FILL,BLACK);floodfill(211,100,RED);
          outtextxy(212,100,"1");break;
   case 2:setfillstyle(SOLID_FILL,BLACK);floodfill(231,100,RED);
          outtextxy(232,100,"2");break;
   case 3:setfillstyle(SOLID_FILL,BLACK);floodfill(211,140,RED);
          outtextxy(212,140,"3");break;
   case 4:setfillstyle(SOLID_FILL,BLACK);floodfill(231,140,RED);
          outtextxy(232,140,"4");break;
   case 5:setfillstyle(SOLID_FILL,BLACK);floodfill(211,180,RED);
          outtextxy(212,180,"5");break;
   case 6:setfillstyle(SOLID_FILL,BLACK);floodfill(231,180,RED);
          outtextxy(232,180,"6");break;
   case 7:setfillstyle(SOLID_FILL,BLACK);floodfill(211,220,RED);
          outtextxy(212,220,"7");break;
   case 8:setfillstyle(SOLID_FILL,BLACK);floodfill(231,220,RED);
          outtextxy(232,220,"8");break;
   case 9:setfillstyle(SOLID_FILL,BLACK);floodfill(211,260,RED);
          outtextxy(212,260,"9");break;
  }
}
}


void instructionlight_control()
{int i;
    for(i=1;i<=8;i++)
    {
     if(request.callup[i]!=0)
     {
      setfillstyle(SOLID_FILL,YELLOW);
      floodfill(arr_upcoordinate[i][0],arr_upcoordinate[i][1],RED);
     }
     if(request.callup[i]==0)
     {
      setfillstyle(SOLID_FILL,BLACK);
      floodfill(arr_upcoordinate[i][0],arr_upcoordinate[i][1],RED);
     }
   }
    for(i=2;i<=9;i++)
    {
     if(request.calldown[i]!=0)
     {
      setfillstyle(SOLID_FILL,YELLOW);
      floodfill(arr_downcoordinate[i][0],arr_downcoordinate[i][1],RED);
     }
     if(request.calldown[i]==0)
     {
      setfillstyle(SOLID_FILL,BLACK);
      floodfill(arr_downcoordinate[i][0],arr_downcoordinate[i][1],RED);
     }
    }
}


void movelift()
{
div_t x;
x=div(POSETION,10);
putimage(60,280-35*(x.quot-1)-7*(x.rem/2),buf,COPY_PUT);
if(POSETION/10>1)
{setfillstyle(SOLID_FILL,BLACK);
  floodfill(70,300,RED);
}
}

void Output()  /*图形输出*/
{
cleardevice();
drawfloor();
drawinlift();
drawarrow();
instructionlight_control();
directionlight_control();
buttonon_control();
buttonoff_control();
movelift();
}


Tactics()      /*策略(顺便服务)*/
{
int a[3][9]={{0},{0},{0}},i,j1=0,j2=0,j3=0;
AIMFLOOR=10;
for(i=1;i<=10;i++)     /*查找呼叫并记录*/
    {
     if(request.callin[i]==1) a[0][j1++]=i;
     if(request.callup[i]==1) a[1][j2++]=i;
     if(request.calldown[i]==1) a[2][j3++]=i;
    }
if(DIRECTION==2) up(a);    /*向上运行策略*/
if(DIRECTION==1) down(a);    /*向下运行策略*/
if(DIRECTION==2) up(a);    /*向上运行策略*/
if(AIMFLOOR==10) DIRECTION=2;    /*无呼叫*/
}
up(int a[3][9])        /*向上运行策略*/
{
int i;
int currentfloor=POSETION/10;      /*当前楼层*/
AIMFLOOR=10;
for(i=0;i<9;i++)       /*在向上呼叫中确定目标楼层*/
     {
      if(a[0][i]>currentfloor&&a[0][i]<AIMFLOOR) AIMFLOOR=a[0][i];
      if(a[1][i]>currentfloor&&a[1][i]<AIMFLOOR) AIMFLOOR=a[1][i];
     }
if(AIMFLOOR==10)       /*若未找到目标楼层,在向下呼叫中确定目标楼层*/
     for(i=0;i<9;i++)
        if(a[2][i]>currentfloor&&a[2][i]<AIMFLOOR) AIMFLOOR=a[2][i];
   
if(AIMFLOOR==10) DIRECTION=1;      /*若未找到目标楼层,反向*/
}
down(int a[3][9])       /*向下运行策略*/
{
int i;
int currentfloor=POSETION/10+1;
AIMFLOOR=0;
for(i=0;i<9;i++)
    {
     if(a[0][i]<currentfloor && a[0][i]>AIMFLOOR) AIMFLOOR=a[0][i];
     if(a[2][i]<currentfloor && a[2][i]>AIMFLOOR) AIMFLOOR=a[2][i];
    }
if(AIMFLOOR==0)
  for(i=0;i<9;i++)
     if(a[1][i]<currentfloor &&a [1][i]>AIMFLOOR)  { AIMFLOOR=a[1][i]; break;}
if(AIMFLOOR==0) DIRECTION=2;
}


Tactics_xl()        /*策略(先来先服务)*/
{
int i;
if((AIMFLOOR==POSETION/10)&&(POSETION%10==0))    /*若到达目标楼层,删除请求记录,计数加一*/
{
  for(i=1;i<10;i++)if(request.callin[i]==K2)request.callin[i]=0;
  for(i=1;i<9;i++)if(request.callup[i]==K2)request.callup[i]=0;
  for(i=2;i<10;i++)if(request.calldown[i]==K2)request.calldown[i]=0;
  K2++;
}
AIMFLOOR=10;
for(i=1;i<10;i++)if(request.callin[i]==K2)AIMFLOOR=i;   /*根据呼叫顺序找出目标楼层*/
for(i=1;i<9;i++)if(request.callup[i]==K2)AIMFLOOR=i;
for(i=2;i<10;i++)if(request.calldown[i]==K2)AIMFLOOR=i;
if((AIMFLOOR==POSETION/10)&&(POSETION%10==0))DIRECTION=0;  /*如目标楼层为当前楼层,无方向*/
if(AIMFLOOR*10>POSETION)DIRECTION=2;     /*根据目标楼层改变运行方向*/
if(AIMFLOOR*10<POSETION)DIRECTION=1;
}


void menu()  /*选择菜单*/
{int gdriver=DETECT,gmode,errorcode;
int yes;
int oyes=1;
while(oyes)
{
  initgraph(&gdriver,&gmode,"");
  errorcode=graphresult();
  if(errorcode!=grOk)
  {
   printf("Graphics error:%s\n",grapherrormsg(errorcode));
   printf("Press any key to halt:");
   getch();
   exit(1);
  }
  setbkcolor(BLUE);
  cleardevice();
  yes=1;
  setcolor(CYAN);
  setfillstyle(SOLID_FILL,LIGHTGREEN);
  bar(60,60,550,400);
  setcolor(BLACK);
  settextstyle(TRIPLEX_FONT,HORIZ_DIR,5);
  outtextxy(80,80," Simulative  Elevator");
  settextstyle(TRIPLEX_FONT,HORIZ_DIR,4);
  setcolor(WHITE);
  outtextxy(160,160,"Incidental service");
  setcolor(RED);
  outtextxy(160,220,"First arrive first served");
  setcolor(YELLOW);
  outtextxy(160,280,"Quit");
  setcolor(MAGENTA);
  settextstyle(TRIPLEX_FONT,HORIZ_DIR,1);
  outtextxy(180,360,"Copyright @ Dengyi Zhutienan Dengbin");
  drawball(keyx,keyy,BROWN);
while(yes)
  {key=bioskey(0);
   if(key==UP)
   {drawball(keyx,keyy,LIGHTGREEN);
    if(keyy!=180)
       keyy-=60;
    else
       keyy=300;
    drawball(keyx,keyy,BROWN);
   }
   if(key==DOWN)
   {
    drawball(keyx,keyy,LIGHTGREEN);
    if(keyy!=300)
       keyy+=60;
    else
       keyy=180;
   drawball(keyx,keyy,BROWN);
   }
   if(key==ENTER)
   {switch(keyy)
    {case 180:
     case 240:yes=0;oyes=0;break;
     case 300:yes=0;oyes=0;closegraph();
    }
   }
}
}
}

save()
{ FILE *fp;
  time_t second;
  int margin,min,sec;
  second = time(NULL);
  margin=(int)difftime(second,first);
  min=margin/60;
  sec=margin%60;
  fp=fopen("e:\RS.txt","a");
  if(fp==NULL) { printf("cannot open this file\n"); exit(0);}
  fprintf(fp,"%2d:%2d   %d\n",min,sec,POSETION/10);
  fclose(fp);
}

main()
{
FILE *fp;
int i;
int a;
m:menu();     /*显示菜单*/
if(keyy==180)
{ fp=fopen("e:\RS.txt","a");
   if(fp==NULL) { printf("cannot open this file\n"); exit(0);}
   fprintf(fp,"\n\nIncidental service\n");
   fprintf(fp,"stop time  stopfloor\n");
   fclose(fp);
}
if(keyy==240)
{ fp=fopen("e:\RS.txt","a");
   if(fp==NULL) { printf("cannot open this file\n"); exit(0);}
   fprintf(fp,"\n\nFirst think first\n");
   fprintf(fp,"stop time  stopfloor\n");
   fclose(fp);
}
Initialize();     /*初始化*/
first=time(NULL);
while(keyy==180)    /*若选择执行顺便服务策略*/
{Input();    /*输入*/
         if(EXIT==1){EXIT=0;goto m;}  /*若退出,跳回选择菜单*/
  Lift_status();    /*改变电梯位置*/
  Output();    /*输出*/
}
Initialize();
while(keyy==240)    /*若选择执行先来先服务策略*/
{Input_xl();
         if(EXIT==1){EXIT=0;goto m;}  /*若退出,跳回选择菜单*/
  Lift_status_xl();
  Output();
}
}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -