您的位置:首页 > 编程语言 > C语言/C++

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

2015-08-10 11:51 246 查看
#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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: