数据结构与算法--离散事件模拟

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
因为有些部分错误,得不到正确的结果,此实验失败 。
2、 编写程序如下: #include<stdio.h> #include<stdlib.h> #define WQUE_T 20 #define INF 2000 struct stu {
int reach_t,eat_t,que_t; }stu[2001]; int compare(const void *a,const void *b)/*如果是升序,那么就是 如果a比b大返回一个正值,小则负值,相等返回0,*/ {
win_t[k]+=WQUE_T;
stu[i].que_t=win_t[k];
Байду номын сангаас
}
}
if (!flag)//若等待时间超过3分钟
{
printf("排队时间为:%d\n",time);
printf("服务窗口不能满足要求\n");
}
else
{
printf("服务窗口能满足要求\n");
}
printf("请输入一张桌子能坐的人数:");
实验报告
课程名称:数据结构与算法 实验名称: 离散事件模拟
1、 实验目的
1 掌握队列的基本原理 2 灵活使用队列 3 培养解决实际问题的能力
2、 实验内容
假设在某校要开设一个食堂,学校希望能够建立一个程序,模拟学 生到达食堂排队买饭,用餐的基本过程。假设要求排队时间不多于3分 钟,请你编写事件模拟程序,从而辅助确定食堂开设服务窗口数目是否 能够满足要求。
{
seat[j]=stu[i].que_t+stu[i].eat_t*60;
break;
}
} ans=0; for (j=1;j<=num_tab*t;j++)
if (seat[j]&&(j-1)/t+1>ans) ans=(j-1)/t+1;
printf("餐桌数:%d\n",ans); }
五、实验结果和总结
元素个数,3参数是单个元素的大

第四个参数是比较函数*/
flag=1;
for (i=1;i<=num_stu;i++)
{
int min=INF,k;
for (j=1;j<=num_win;j++)
if (win_t[j]<min)//若窗口服务时间小于20
{
k=j;
min=win_t[i];
}
time=min-stu[i].reach_t;
基本约定:学生下课后陆陆续续进入食堂,进入食堂后直接到人数 最少的窗口前排队,买完饭菜后直接到餐桌用餐。每一个学生的用餐时 间各异,用餐完成后离开食堂。同时,假设每个窗口服务一个学生需要 时间为20秒。 输入:第一行一个整数n,表示学生数量
餐桌数 服务窗口数 第四行开始的n行表示每个学生到达的时间(从餐厅开始营业计起, 单位秒)、用餐时间(可以用分钟计)。 输出: 排队等候时间 使用餐桌数量 三、加深(提供给有进一步探讨的同学) 如果要统计食堂需要的餐桌数,如何做?(例如:一个餐桌供4人使 用,每个人用餐时间在10-20分钟内随机分布。找餐桌的方法是:先假 设有足够餐桌,如果已经被使用过的餐桌有空位,则在空位坐下,如果 没有空位的餐桌,则考虑增加使用的餐桌数量。)
if (time>0)
{
printf("同学%d排队花%d秒\n",i,time);
}
else //printf("该同学不用排队\n");
if (time>180)//若等待时间超过3分钟
{
flag=0;
//break;
}
if (stu[i].reach_t>win_t[k])
{
win_t[k]=stu[i].reach_t;
四、例(实际例子要求至少2000名学生信息): 3 2 2 30 15 120 14 400 16
3、 实验环境
硬件:Windows XP计算机、鼠标、键盘、显示器 开发环境:Microsoft Visual C++ 6.0
4、 实验步骤
1、 点击开始菜单中的程序-Microsoft Visual C++ 6.0 点击菜单栏中的文件—新建—文件—C++ Source File ,在文 件名(N)中写入8.cpp,再点击确定.
printf("餐桌数为: %d\n",num_tab);
fscanf(fp,"%d",&num_win);
printf("窗口数为: %d\n",num_win);
printf("从文件读入每个学生的到达时间和用餐时间
\n");
for(i=1;i<=num_stu;i++)
{
fscanf(fp,"%d",&stu[i].reach_t,&stu[i].eat_t);
scanf("%d",&t);
qsort((void
*)(stu+1),num_stu,sizeof(struct
stu),compare2);//按升序排列,看哪一个最早离开
for(i=1;i<=num_stu;i++)
{
for(j=1;j<=num_tab*t;j++)
if(stu[i].que_t>=seat[j])
int i,j,t,win_t[21]={0},flag,time,seat[1000]={0},ans; int num_stu,num_tab,num_win; /*----------------------------文件读入------------------------------*/ printf("从文件中可得 学生数,餐桌数和窗口数如下:\n"); FILE *fp;
return ((struct stu *)a)->reach_t-((struct stu *)b)>reach_t; } int compare2(const void *a,const void *b) {
return ((struct stu *)a)->que_t-((struct stu *)b)->que_t; } void main() {
}
}
fclose(fp);
/*---------------------------------------------------------
------*/
qsort((void
*)(stu+1),num_stu,sizeof(struct
stu),compare);/*第一个参数是参与排序的数组名,2参数是参与排序的
fp=fopen("E:\\Data.txt","r"); if(fp==NULL) {
printf("file can not be opened!");
}
else
{
fscanf(fp,"%d",&num_stu);
printf("学生人数为: %d\n",num_stu);
fscanf(fp,"%d",&num_tab);
相关文档
最新文档