数据结构与算法设计

您所在的位置:网站首页 电梯的按钮使用与图解视频教学 数据结构与算法设计

数据结构与算法设计

2024-07-09 23:34| 来源: 网络整理| 查看: 265

模拟电梯运行 问题假设和约定实现代码抽象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