医院病床分配仿真 举例(c语言)

#include <stdio.h>
#include <stdlib.h>
# define ep  9           //每天人数
# define ws 17 
# define bd 20
# define bs 23
# define qg 12
# define sw 28
# define weekbe 1 //第一天周一
# define ws2 7
# define bd2 4
# define bs2 9
# define qg2 10
# define sw2 7
# define day 150 //天数
main()
{

int allpe[ep*day]; //所有病人    
    int eveti[ep*day]; // 被服务时间
int namber[ep*day]; //编号
int timeing[ep*day]; //等待时间
    int a,i;
int k=0;


 int farst[5][7]={{4,4,4,4,4,4,4},{1,1,2,2,2,3,3},{3,3,1,1,1,2,2},{2,2,3,3,3,1,1},{2,2,3,3,3,1,1}};             //优先级矩阵
      int farstall[ep*day]={0};                                                                                            //最后一天
 
 int badday[78]; //病床占用时间
 int bad0[78];
 int days=1;
 int badnull=0;
 //int numbersos=0; //急诊位置
      //int numberple=0; //普通位置
 int j=0;    //空床位位置
      int weekbes; //记录周几


   FILE *fp1;
        FILE *fp2;
        FILE *fp3;  
        FILE *fp4;
 

for(i=0;i<5;i++)         //每个病人至少等待一天
  {   
for(j=0;j<7;j++)
printf("%d  ",farst[i][j]);
        printf("\n");
  }

for(i=0;i<ep*day;i++)         //每个病人至少等待一天
  {   
    timeing[i]=1;
  }
      for(i=0;i<ep*day;i++) //产生病人     a
{ a=rand()%100;
if((a>=0)&&(a<ws))
                allpe[i]=1;
if((a>=ws)&&(a<ws+bd))
allpe[i]=2;
if((a>=ws+bd)&&(a<ws+bd+bs))
allpe[i]=3;
if((a>=ws+bd+bs)&&(a<ws+bd+bs+qg))
   allpe[i]=4;
if((a>=ws+bd+bs+qg)&&(a<=ws+bd+bs+qg+sw))
   allpe[i]=5;
}


 for(i=0;i<ep*day;i++)     //病人被服务时间
 {     
 switch(allpe[i])
{
                case 1: eveti[i]=7;     break;
                case 2: eveti[i]=7;     break;
case 3: eveti[i]=9;     break;
case 4: eveti[i]=10;    break;
case 5: eveti[i]=13;    break;
}
 
 }


      for(i=0;i<ep*day;i++)         //病人编号
 {   
    namber[i]=i+1;
  
 }
 for(i=0;i<78;i++)
 {
 badday[i]=1;
 
 }
 
       for(days;days<=day;days++) //第days 天开始了
  {  
  
           weekbes=days%7+weekbe; //今天周几 weekbes
  
  for(i=0;i<ep*days;i++) //根据周几对所有病人分优先级
  { 
    if(allpe[i]==1)
                 farstall[i]=farst[0][weekbes-1];
    if(allpe[i]==2)
    farstall[i]=farst[2][weekbes-1];
    if(allpe[i]==3)
    farstall[i]=farst[1][weekbes-1];
    if(allpe[i]==4)
    farstall[i]=farst[3][weekbes-1];
    if(allpe[i]==5)
    farstall[i]=farst[4][weekbes-1];

  }

  for(i=0;i<78;i++) //1 床位服务时间减少一天
{
   if(badday[i]!=0)
      badday[i]--;
 
}
    
  for(i=0;i<=77;i++) //  2  检查空床数
  {                         
  if (badday[i]==0)   
  {
  bad0[badnull]=i; //  床位编号
                   badnull++; //   空床数
  }


}

  
 //printf("%d\n",badnull);
    if(badnull!=0)   //  3 如果有空床位为候诊者分配床位
    for(i=0;(i<days*ep)&&(j<badnull);i++)   //       3.1  分给4     分配床位没有床位或搜索完毕停止


if (namber[i]!=0)     
{
if(farstall[i]==4)
{
badday[bad0[j++]]=eveti[i]; // 安排病床                                 
namber[i]=0;
}
}

              if(j<badnull)         //     3.2     3
for(i=0;(i<days*ep)&&(j<badnull);i++)  
{    
if(namber[i]!=0)
{
   if(farstall[i]==3)
{
badday[bad0[j++]]=eveti[i]; // 安排病床
                                 
namber[i]=0;
}
}


}
               if(j<badnull) //   3.3    2
for(i=0;(i<days*ep)&&(j<badnull);i++)  
{    
if(namber[i]!=0)
{
    if(farstall[i]==2)
{
badday[bad0[j++]]=eveti[i]; // 安排病床                                  
namber[i]=0;
}
}


}
               if(j<badnull) //   3.4    1
for(i=0;(i<days*ep)&&(j<badnull);i++)  
{    
if(namber[i]!=0)
{
   if(farstall[i]==1)
{
badday[bad0[j++]]=eveti[i]; // 安排病床                                  
namber[i]=0;
}
}


}


           for(i=0;i<days*ep;i++)    //    4未安排床位病人加一天
{    
if (namber[i]!=0)     
{    
    k++;
timeing[i]++;
}

}
               //printf("%d\n",j);
           j=0;
                badnull=0;


  }


   
        fp1=fopen("a.txt","w"); //打开文件以便写入数据
fp2=fopen("b.txt","w");
fp3=fopen("c.txt","w");
fp4=fopen("d.txt","w");
for (i = 0; i<ep*day; i++)                                 //

fprintf(fp1,"%d\n", namber[i]);
}
for (i = 0; i<ep*day; i++)                                 //

  fprintf(fp2,"%d\n",eveti[i]);
}


for (i = 0; i<ep*day; i++)                                 //等待时间

fprintf(fp3,"%d\n",timeing[i]);
}
        for (i = 0; i<ep*day; i++)                                 //

  fprintf(fp4,"%d\n", allpe[i]);
}
        fclose(fp1);                                                //写入完毕,关闭文件
fclose(fp2);
fclose(fp3);
        fclose(fp4);
        printf("%d/day\nday %d day\n",ep,day);
        printf("%d\n",k);


 }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值