為了幫助新人學習c++,為了保證既直觀,又具有一定的靈活度,電梯演算法是乙個不錯的切入點。寫了個小電梯作為demo。
#include #include #include #include #include class elevator
// 按下某個樓層
void add_target_floor(int floor)
}// 初始樓層
void set_init_floor(int init_floor)
// 停機樓層
void set_park_floor(int park_floor)
void pause()
int run()
else
}runto(last_floor, park_floor_);
}return ret;
}private:
void clearline()
printf("\r");
}void printstatus(int floor, bool arrived = false)
printf(arrived ? "*" : "#");
fflush(stdout);
sleep();
}void runto(int from, int to)
// up stairs
while (from < to)
// 到達後停一下
beep();
printstatus(from, true);
sleep();
}void sleep()
void beep()
private:
static const int max_floor = 80;
int init_floor_;
int park_floor_;
std::vectorseq_;
};int main()
**編譯執行方法:**儲存為main.cpp,然後呼叫:
g++ main.cpp
./a.out
如果你是乙個c++老手,請指出上面**中不合適的地方。有很多哦!他們非常嚴重地影響了elevator類的可移植性,隨著開發的深入,這個類一定會越來越多地被修改,不符合close for modification的原理。
上面是作業的第一步,這裡採用了fifo的演算法,這個題目可以往下面幾個方向擴充套件:
1. 功能擴充套件:調整電梯的一些功能,比如停頓時間,執行速度(變速),增加門鈴功能,增加多人入梯模擬功能,程式是否能支援互動,執行過程中接受使用者輸入樓層?等等
2. 演算法擴充套件:能否讓電梯支援多種排程演算法?fifo,最省時演算法,最節能演算法,最滿意演算法,等等。如何保證增加演算法時不需要修改過多原始碼。
3. 1和2的綜合擴充套件:如果是多台電梯,**該如何寫?
4. 介面擴充套件:如果將來可能不採用命令列介面,而是採用圖形介面,甚至直接用到實際的電梯晶元裡面去,**該如何設計才能保證修改量更小?
5. **規劃:學習如何規劃**,學習寫makefile,不要把所有功能放到乙個檔案中,採取模組化的方式組織**。
小小的電梯,還是很考驗同學們設計程式的能力滴哦~
如果你深入動手實踐本題,一定會對mvc有更深刻的理解。
小型電梯尺寸 家用小電梯尺寸 家用小電梯尺寸介紹
家用小電梯尺寸 家用小電梯尺寸 簡介 家用電梯是指安裝在私人住宅中,僅供單一家庭成員使用的電梯。它也可以安裝在非單一家庭使用的建築物內,作為單一家庭進入其住所的工具,但是建築物內的公眾或其他居住者無法進入和使用。家用電梯額定速度不超過0.4m s,對於無轎門的家用電梯額定速度不超過0.3m s,轎廂...
小按鈕,大學問
核心提示 作為最基本的互動控制項,按鈕 button 無論是在 pc 還是移動裝置中都是無處不在的,這些最不起眼但卻是使用最頻繁的按鈕不僅有著大作用還有著大學問。在我們日常使用個人電腦以及手機等各種移動裝置過程中,按鈕或許是最不起眼但卻是使用最頻繁的。對於乙個產品來說,作為最基本的互動控制項的按鈕統...
鐵大電梯需求分析
活動目的 關於電梯的排程,使其能夠更快速有效的被使用,減少能耗。避免出現 公交汽車 的最壞使用方法。系統說明 1 石家莊鐵道大學基礎教學樓的電梯配置如下 大廈有18層,4部電梯,很多乘客使用這些電梯的日常 旅客重量 平均70公斤最大120公斤,最小45公斤 2 電梯狀態 電梯可分為3個狀態 執行狀態...