实习2电梯算法c语言
#include
#include
#define t 0.1
void T_in_out(int a,int b,int i,float T,float T_check,float T_giveup);
void main()
{
int i,m,a1; //a1是开始运行时在第一层进入电梯的人数,m为电梯开门后的检测次数
int up_in[9],up_out[9];
int down_in[9],down_out[9];
float T=0.0,T_open,T_close,T_check,T_giveup,T_wait;
printf(" ------------------------------\n ");
printf("|---------模拟电梯系统--------| \n ");
printf("------------------------------ \n ");
label: printf("开始运行时从1楼进入电梯的人数: ");
scanf("%d",&a1);
for(i=0;i<9;i++)
{
printf("上楼时在第%d层进入电梯的人数:\n",i);
scanf("%d",&up_in[i]); //up_in[9]数组储存在上楼时各层进入的人情况
}
for(i=0;i<9;i++)
{
printf("上楼时从第%d层出电梯的人数:\n",i);
scanf("%d",&up_out[i]); //up_out[9]数组储存在上楼时各层出的人情况
}
for(i=7;i>=0;i--)
{
printf("下楼时从第%d层出电梯的人数:\n",i);
scanf("%d",&down_in[i]); //down_in[9]数组储存在下楼时各层进入的人情况
}
for(i=7;i>=0;i--)
{
printf("下楼时从第%d层出电梯的人数:\n\n",i);
scanf("%d",&down_out[i]); //down_out[9]数组储存在下楼时各层出的人情况
}
printf("电梯上楼时的情况(Up): \n \n");
T_open=20*t; //T_open为电梯开门所需时间
T_close=20*t; //T_close为电梯关门所需时间
T_check=40*t; //T_check为电梯每次开门是检测的时间间隔
T_giveup=150*t; //T_giveup为人能容忍的最长等待时间
T_wait=300*t; //T_wait为电梯在某一层能停留的最长时间
if(a1*25%40!=0) m=a1*25*t/T_check+1;
else m=a1*25*t/T_check;
T=T+T_open;
printf("电梯开始运行后在%f时刻开门! \n",T);
T=T+25*t*a1;
printf("电梯在%f时刻进入%d人! \n",T,a1);
T=T+m*T_check-a1*25*t+T_close;
printf("电梯开始运行后在%f时刻第一次关门! \n \n",T);
for(i=0;i<9;i++)
{
m=0;
printf("电梯上楼到达第%d层! \n",i);
if((T_open+25*t*up_out[i])>T_wait) //超过最长等待时间电梯就返回第1层待命
{
printf("等待时间过长,返回第一层待命! \n");
printf("在%f时刻电梯由于长时间停留重新回到第一层! \n",T);
goto label;
}
if((up_in[i]+up_out[i])*25%40!=0) m=(up_in[i]+up_out[i])*25*t/T_check+1;
else m=(up_in[i]+up_out[i])*25*t/T_check;
T_in_out(up_out[i],up_in[i],i,T,T_check,T_wait);
T=T+m*T_check;
T=T+T_open+T_close;
}
printf("电梯下楼时的情况(Down): \n \n");
for(i=7;i>=0;i--)
{
m=0;