| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 983 人关注过本帖
标题:[求助]一道填空题,应该怎么填?
只看楼主 加入收藏
露露
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-7-5
收藏
 问题点数:0 回复次数:9 
[求助]一道填空题,应该怎么填?
1、医务室模拟。
问题描述:假设只有—个医生,在一段时间内随机地来几位病人;假设病人到达的时间间隔为0~14分钟之间的某个随机值,每个病人所需处理时间为1—9分钟之间的某个随机值。试用队列结构进行模拟。
实现要求: 要求输出医生的总等待时间和病人的平均等待时间。
程序设计思想:计算机模拟事件处理时.程序按模拟环境中的事件出现顺序逐一处理,在本程序中体现为医生逐个为到达的病人看病。当一个病人就诊完毕而下一位还未到达时,时间立即推进为下一位病人服务,中间时间为医生空闲时间。当一个病人还未结束之前.另有一位病人到达,则这些病人应依次排队,等候就诊。

要流程图和算法!大哥们帮个忙啊!
搜索更多相关主题的帖子: 填空 
2006-07-09 20:19
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

我帮你做了:
#include <iostream>
#include <queue>
#include <ctime>
using namespace std;
class CPatient
{
int appear_time; //病人出现的时间间隔
int manage_time; //病人诊病耗时
public:
CPatient():appear_time(0),manage_time(0){}
~CPatient()
{
cout<<"appear_time is "<<appear_time<<endl<<"Manage_time is: "<<manage_time<<endl<<endl;
}
friend float enqueue(int &total_time,int max_time);
};

float enqueue(int &total_time,int max_time)
{
srand((unsigned)time( NULL ));
total_time=0;
queue<CPatient> queue_patient;
while(total_time<max_time)
{
//用随机产生的数字来初始化对象
CPatient p;
p.appear_time=rand()%15;
p.manage_time=rand()%9+1;
//如果次人为第一人,那么总时间直接加上他的出现间隔时间和他的诊病耗时
if(queue_patient.size()==0)total_time+=(p.appear_time+p.manage_time);
//否则
else
{
//如果前一人的诊病耗时>新来的人的间隔时间(即前一人诊病完毕之前就有人来)
//那么总时间直接加上新来病人的诊病耗时
if(queue_patient.back().manage_time>p.appear_time)
total_time+=p.manage_time;
//否则要多加一个时差(第二病人来的时间减去第一病人看完病的时间)
else total_time+=(p.manage_time+(p.appear_time-queue_patient.back().manage_time));
}
queue_patient.push(p);
}
return float(max_time)/float(queue_patient.size());
}

void main()
{
cout<<"输入模拟实验的时间长度(小时):";int MAXTIME;cin>>MAXTIME;
MAXTIME*=60;
int total=0;
cout<<enqueue(total,MAXTIME)<<endl;
}


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-11 21:20
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

改了点,先前没看清楚题目要求。。。
#include <iostream>
#include <queue>
#include <ctime>
using namespace std;
class CPatient
{
int appear_time; //病人出现的时间间隔
int manage_time; //病人诊病耗时
public:
CPatient():appear_time(0),manage_time(0){}
~CPatient()
{
cout<<"appear_time is "<<appear_time<<endl<<"Manage_time is: "<<manage_time<<endl<<endl;
}
friend float enqueue(int &total_time,int&total_docter_wait_time,
int&total_patient_wait_time,int&total_patientsint,const int max_time);
};

float enqueue(int &total_time,int&total_docter_wait_time,
int&total_patient_wait_time,int&total_patients,const int max_time)
{
srand((unsigned)time( NULL ));
total_time=0;
queue<CPatient> queue_patient;
while(total_time<max_time)
{
//用随机产生的数字来初始化对象
CPatient p;
p.appear_time=rand()%14+1;
p.manage_time=rand()%9+1;
//如果此人为第一人,那么总时间直接加上他的出现间隔时间和他的诊病耗时
if(queue_patient.size()==0)
{
total_time+=(p.appear_time+p.manage_time);
total_docter_wait_time+=p.appear_time;
}
//否则
else
{
//如果前一人的诊病耗时>新来的人的间隔时间(即前一人诊病完毕之前就有人来)
//那么总时间直接加上新来病人的诊病耗时
if(queue_patient.back().manage_time>p.appear_time)
total_time+=p.manage_time;
//否则要多加一个时差(第二病人来的时间减去第一病人看完病的时间)
else
{
total_time+=(p.manage_time+(p.appear_time-queue_patient.back().manage_time));
total_docter_wait_time+=(p.appear_time-queue_patient.back().manage_time);
total_patient_wait_time+=(p.appear_time-queue_patient.back().manage_time);
}
}
queue_patient.push(p);
}
total_patients=queue_patient.size();
return float(total_time)/float(queue_patient.size());
}

void main()
{
cout<<"输入模拟实验的时间长度(小时):";int MAXTIME;cin>>MAXTIME;
MAXTIME*=60;
int total=0;
int total_docter_wait_time=0;
int total_patient_wait_time=0;
int total_patients=0;
float average=enqueue(total,total_docter_wait_time,total_patient_wait_time,total_patients,MAXTIME);
cout<<"医生总等待时间: "<<total_docter_wait_time<<"分钟"<<endl;
cout<<"病人总等待时间: "<<total_patient_wait_time<<"分钟"<<endl;
cout<<"诊断病人个数: "<<total_patients<<"个人"<<endl;
cout<<"平均处理时间: "<<average<<"分钟/人"<<endl;
}


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-12 18:35
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 

楼上解得不错,又一C++好手,不过我觉得这条题目里面的成员函数最好用静态,因为计算这个过程是泛指的,对所有对象都是同一操作,(而且你是将每个病人看成一个对象),这样就可以避免friend函数,更加符合面向对象思想

[此贴子已经被作者于2006-7-12 19:08:52编辑过]


c++/C + 汇编 = 天下无敌
2006-07-12 18:49
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

我一开始就想过用静态成员变量,和静态成员函数,不过嫌麻烦,呵呵~!


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-12 19:10
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

//用静态了。我用friend是因为我不想写什么get函数,麻烦。这样可以直接调用private,方便点
#include <iostream>
#include <queue>
#include <ctime>
using namespace std;
class CPatient
{
int appear_time; //病人出现的时间间隔
int manage_time; //病人诊病耗时
public:
CPatient():appear_time(0),manage_time(0){}
~CPatient()
{
cout<<"appear_time is "<<appear_time<<endl<<"Manage_time is: "<<manage_time<<endl<<endl;
}
friend float enqueue(const int max_time);
//---static member----//
static int total_docter_wait_time; // 医生总等待时间
static int total_patient_wait_time; // 病人总等待时间
static int total_patients; // 诊断病人个数
static int total_time; // 总时间
};
int CPatient::total_docter_wait_time=0;
int CPatient::total_patient_wait_time=0;
int CPatient::total_patients=0;
int CPatient::total_time=0;
float enqueue(const int max_time)
{
srand((unsigned)time( NULL ));
queue<CPatient> queue_patient;
while(CPatient::total_time<max_time)
{
//用随机产生的数字来初始化对象
CPatient p;
p.appear_time=rand()%14+1;
p.manage_time=rand()%9+1;
//如果此人为第一人,那么总时间直接加上他的出现间隔时间和他的诊病耗时
if(queue_patient.size()==0)
{
CPatient::total_time+=(p.appear_time+p.manage_time);
CPatient::total_docter_wait_time+=p.appear_time;
}
//否则
else
{
//如果前一人的诊病耗时>新来的人的间隔时间(即前一人诊病完毕之前就有人来)
//那么总时间直接加上新来病人的诊病耗时
if(queue_patient.back().manage_time>p.appear_time)
CPatient::total_time+=p.manage_time;
//否则要多加一个时差(第二病人来的时间减去第一病人看完病的时间)
else
{
CPatient::total_time+=(p.manage_time+(p.appear_time-queue_patient.back().manage_time));
CPatient::total_docter_wait_time+=(p.appear_time-queue_patient.back().manage_time);
CPatient::total_patient_wait_time+=(p.appear_time-queue_patient.back().manage_time);
}
}
queue_patient.push(p);
}
CPatient::total_patients=queue_patient.size();
return float(CPatient::total_time)/float(queue_patient.size());
}

void main()
{
cout<<"输入模拟实验的时间长度(小时):";int MAXTIME;cin>>MAXTIME;
MAXTIME*=60;
float average=enqueue(MAXTIME);
cout<<"医生总等待时间: "<<CPatient::total_docter_wait_time<<"分钟"<<endl;
cout<<"病人总等待时间: "<<CPatient::total_patient_wait_time<<"分钟"<<endl;
cout<<"诊断病人个数: "<<CPatient::total_patients<<"个人"<<endl;
cout<<"平均处理时间: "<<average<<"分钟/人"<<endl;
}


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-12 19:21
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
这只是个简单的单队列,你要在这个基础上想想如何能够做多任务队列。

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-12 19:23
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 

这次的顺眼很多了,完全符合面向对象的思想,不要怕麻烦.


c++/C + 汇编 = 天下无敌
2006-07-12 21:49
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
顺便地我加了你QQ,怎么不见你有反映的...........想跟你讨论一下C++,哈哈哈

c++/C + 汇编 = 天下无敌
2006-07-12 21:49
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

我QQ没上线啊,一般MSN也在,wf_haha@hotmail.com


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-12 22:28
快速回复:[求助]一道填空题,应该怎么填?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017483 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved