作业帮 > 综合 > 作业

急求一个关于洗车仿真的编程代码,题目如下要用C语言做.

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/28 15:31:54
急求一个关于洗车仿真的编程代码,题目如下要用C语言做.
5.5 课题C5:洗车仿真1.设计目的(1)复习队列的存储和实现方法.(2)进一步掌握队列的实际应用.(3)掌握利用时间函数模拟产生离散事件的方法.2.主要内容假设洗车站有三个洗车处,每个洗车处可构成一个等待队列.根据系统时间随机生成每辆车的到达时间,相邻两辆车的到达时间间隔为[2,15]分钟之间的随机值,每辆车接受服务的时间选项为10、15或25分钟其中之一(随机产生).第一辆车的到达时间在洗车站开门30分钟之内(随机产生).平均等待时间是将每辆车的等待时间加起来再除以车的数量.下面是关于车辆到达和离开的具体条件:(1)如果当队列为空且没有车被清洗时,到达了一辆车,那么就马上开始清洗这辆车;它无需进入队列.每当一辆车通过清洗后,它就马上离开洗车处,随之相应队头的车辆出队进入清洗过程.(2)每当一辆车到达时,它直接进入三个队列中等待时间最短的队列.(3)每个队列中每次至多有5辆车在等待洗车.当正在清洗并且三个队列中均有5辆车时,如果此时有一辆车到达,那么它将作为“溢出”不准入内且不计算在内.(4)每辆车的等待时间不含其接受服务的时间.3.设计要求(1)产生6个小时内车辆的随机到达时刻和接受服务时间.(2)列举出所有车辆(包括未能进队洗车的车辆)的洗车情况(到达时间、所处等待队列及等待时间、接受服务时间、离开时间等).(3)计算所有车辆的平均等待时间.
#include
#include
#include
#include
#define QUENELEN 6
#define QUENENUM 3
#define MAXTIME 360
struct cCar
{
int num;
int waitTime;
int serverTime;
int arriveTime;
int leaveTime;
int quene;
struct cCar * next;
} ;
struct cQuene
{
\x05int quene;
int queneNum;
int num[QUENELEN];
int waitTime[QUENELEN];
int serverTime[QUENELEN];
};
void initCar(struct cCar * s)
{
s->num = 0;
s->waitTime = 0;
s->serverTime = 0;
s->arriveTime = 0;
s->leaveTime = 0;
s->quene = 0;
s->next = NULL;
}
void printQuene(struct cQuene * s)
{
\x05int i;
\x05printf("%d\t%d\n",s->queneNum ,s->quene );
\x05for(i=0;iserverTime [i]);
\x05printf("\n");
\x05for(i=0;iwaitTime [i]);
\x05printf("\n");
\x05for(i=0;inum [i]);
\x05printf("\n");
\x05printf("\n");
}
void initQuene(struct cQuene * s,int n)
{
int i;
\x05s->quene = n;
s->queneNum = 0;
for(i = 0; i < QUENELEN; i++)
{
s->num[i] = 0;
s->waitTime[i] = 0;
s->serverTime[i] = 0;
}
}
int curTime=0,Num=1;
struct cCar firstCar;
struct cQuene Quene[QUENENUM];
void initQuene()
{
\x05int i;
\x05for(i=0; iserverTime[i];
return count;
}
void updataQuene(struct cQuene * s)
{
int i;
\x05struct cCar *p = &firstCar;
s->serverTime[0]--; //洗车时间减1
if(s->serverTime[0] next)
\x05\x05\x05{
\x05\x05\x05\x05if(p->num == s->num [0]) break;
\x05\x05\x05\x05p = p ->next ;
\x05\x05\x05}
\x05\x05}
\x05\x05if(p)
\x05\x05{
\x05\x05\x05p->leaveTime = curTime+1; //记录离开时间
\x05\x05\x05p->waitTime = s->waitTime[0]; //记录等待时间
\x05\x05}
\x05\x05else printf("没有找到编号为%d的车",s->num [0]);
for(i = 0; i < s->queneNum; i++) //队列移动
{
s->num[i] = s->num[i+1];
s->waitTime[i] = s->waitTime[i+1];
s->serverTime[i] = s->serverTime[i+1];
}
s->num[i] = 0;
s->waitTime[i] = 0;
s->serverTime[i] = 0;
if(s->queneNum>0) s->queneNum--; //队列数减1
}
\x05for(i = 1; i queneNum; i++) s->waitTime[i]++; //等待时间加1
}
void updataQuene()
{
\x05int i;
\x05for(i=0;i 0) updataQuene(&Quene[i]);
\x05\x05//printQuene(&Quene[i]);
\x05}
}
void addCar()
{
\x05const int serverTime[3] = {10,15,25};
\x05struct cCar * p = &firstCar;
\x05int i,j,queneWait[QUENENUM],index[QUENENUM],minpos,tmp;
\x05while(p->next) p = p ->next ; //最后一条记录
\x05p->next = (struct cCar *)malloc(sizeof(struct cCar)); //添加新车
\x05p = p ->next;
\x05p->arriveTime = curTime; //车到达时间
\x05p->num = Num++; //到达序号
\x05p->next = NULL;
\x05p->serverTime = serverTime[rand() % 3]; //服务时间
\x05p->leaveTime = curTime;
\x05p->waitTime = 0;
\x05p->quene = -1;
\x05
\x05for(i=0; iquene = index[i];
\x05\x05\x05\x05break;
\x05\x05\x05}
\x05\x05}
\x05}
}
void main()
{
\x05int i,num=0,count=0;
\x05int wait = rand() % 30;
\x05struct cCar * p = &firstCar,*p2;
\x05srand(time(NULL));
\x05initQuene();
\x05while(curTimenext ;
\x05printf("编号\t队列号\t到达\t离开\t服务\t等待\n");
\x05while(p)
\x05{
\x05\x05printf("%d\t%d\t%d\t%d\t%d\t%d\n",p->num ,p->quene ,p->arriveTime ,p->leaveTime ,p->serverTime ,p->waitTime );
\x05\x05if( p->arriveTime != p->leaveTime)
\x05\x05{
\x05\x05\x05num ++;
\x05\x05\x05count += p->waitTime;
\x05\x05}
\x05\x05p = p->next ;
\x05}
\x05printf("平均等待时间%f\n",(double) count / (num+1));
\x05p = firstCar.next ;
\x05while(p )//释放空间
\x05{
\x05\x05p2 = p;
\x05\x05p = p->next ;
\x05\x05free(p2);
\x05}
}