数据结构与算法设计 |
您所在的位置:网站首页 › 电梯的按钮使用与图解视频教学 › 数据结构与算法设计 |
模拟电梯运行
问题假设和约定实现代码抽象Simulation.hSimulation.cppmain.cpp
效果
不足
问题
模拟电梯的运行. 以下为基本假设和调度策略,可以根据需要添加其他假设或对现有策略进行修改: 电梯最初从一楼开始运行 如果没有呼叫,则停在原地 乘客先下后上,如果满员,不能超载 如果电梯已经满员,且中间层无乘客出电梯,则直达目的层 请分别模拟只有一部电梯和有两部电梯(联动)的系统,并讨论如何优化其调度策略. 乘客类 cpassenger 成员含义from_floor所在楼层to_floor要去楼层isin状态:是否在特定组id编号电梯类 Elevator 成员含义nowFloor电梯当前所在楼层pin[maxEleNum]电梯里的乘客列表run_status电梯运行状态clockBegin开始运行时刻clockExpectAim最近停靠的时刻inButton电梯内楼层按钮exButton电梯外楼层按钮大楼类(模拟过程)SimBuilding 成员含义e1电梯1(这块写死了,有空再回头改吧)pwaitting大楼中正在等电梯的乘客phav大楼中已经坐过电梯的乘客timeRunaFloor电梯运行时经过一层楼所需时间simulationLength模拟时长 Simulation.h #define maxEleNum 10 #define BudfloorNum 9 enum isInElevator{in,out}; class cpassenger { public: int from_floor;//所在楼层 int to_floor;//要去楼层 isInElevator isin;//是否在特定组中,1在,0不在 char id;//编号 cpassenger(); cpassenger(int from, int to); }; enum runStatus{up, down, stop}; enum floorStatus{aim, pass}; class Elevator { public: int nowFloor;//电梯当前所在楼层 cpassenger pin[maxEleNum]; runStatus run_status;//电梯运行状态 int clockBegin; int clockExpectAim; floorStatus inButton[BudfloorNum+1];//楼层按钮,1按下,0未按(目的楼层) floorStatus exButton[BudfloorNum+1];//消息队列,(外面等待人所在的楼层) Elevator();//构造函数,默认9层 int CurCount(); }; class SimBuilding { private: Elevator e1; cpassenger pwaitting[100]; ///正在等电梯的乘客 cpassenger phav[100]; ///坐过电梯的乘客(人次) int timeRunaFloor; int simulationLength; RandomNumber rnd; // use for arrival and service times public: SimBuilding(int mf=9); bool Havpag(int fl, int fh); //某层楼是否有乘客 int WaitCount();//整栋楼等电梯的乘客数(用于遍历乘客) int HavCount();//坐过电梯的乘客数(用于总结) void Call(int clock, cpassenger wp); void UpdateAim(int clock); int Enter(int clock); int Depart(int clock); void Sort(); void Move(int clock); void RunSimulation(void); // execute study void PrintCurStats(); // print stats void PrintSimulationResults(void); // print stats }; Simulation.cpp cpassenger::cpassenger() { from_floor = 1; to_floor = BudfloorNum; isin = in; id = '?'; } cpassenger::cpassenger(int from, int to) { from_floor = from; to_floor = to; isin = in; id = '?'; } Elevator::Elevator() { run_status=stop;//初始停止 nowFloor=1;//电梯初始状态在第一层 for(int i=1; i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |