資源簡介
1. 樓層由上至下依次編號為9,8,7,6,5,4,3,2,1,0。每層都有向上和向下兩個按鈕,對應20個變量callup[0...9]和calldown[0...9]。電梯內10個目標層按鈕對應變量out[0...9]。有人按下某個按鈕時,相應的變量就增1,一旦要求滿足后,該變量就減1。當有多人的需求相同時,相應的處理時間就增長,用于模擬真實的情況。
2. 電梯處于三種狀態之一:UP(上行),DOWN(下行)和Idle(等候)。如果電梯處于Idle狀態且不在1層超過20個時間單位時,則駛回1層。當電梯處于Idle狀態時,一旦收到前往另一層的命令,就轉入UP或DOWN狀態,執行相應的操作。
3. 其它重要的變量有:
floor----當前電梯外乘客所在樓層;
calling----當前電梯外按下按鈕的乘客所在的樓層;
up_or_down----電梯外某層按鈕的狀態(向上箭頭或向下箭頭);
waittime----電梯空閑時的等待時間;
total----電梯內的總人數(上限為15人);
電梯的數據結構:
state ---- 電梯的狀態(UP,DOWN,IDLE)
current ----- 電梯目前所處樓層
imovingto ---- 電梯的目標樓層
隊列成員的數據結構:
floor―――所在樓層
up_down―――目標方向(向上或向下)
struct queue *next―――指向下一個成員
4. 【進入排隊】先在等候隊列中查找,若有信息相同(所在樓層相同,目標方向一致)的成員,則對隊列無任何操作。若沒有,則在隊列末尾插入該人。
5. 【進入電梯】電梯根據人數停留一定時間單位,每進入一個人,從隊列中刪除該人,callup[ele.current]或者calldown[ele.current]減一,total加一。
6. 【走出電梯】電梯根據人數停留一定時間單位,每出去一個人out[ele.current]減一.
7. 【電梯的活動】
E1.[在一樓停候]若有人按下一個按鈕,則調用相關函數(比如入隊,置樓層標志位為1等)處理當前事件.
E2.[改變狀態]如果電梯處于Up(或Down)狀態,但該方向的樓層卻無人等待,則要看反方向樓層是否有人等待,而決定置State為Down(或Up)還是Idle。
E3.[讓人出入]如果電梯不空且out[ele.current]!=0時,則電梯等候在該樓層出電梯的人離開。接著檢驗在該樓層是否有等候前往同一方向去的乘客,若有則等候他們進入電梯。總原則是先下后上。
E4.[在某樓層(非1樓)停候]若電梯到達目標樓層后,隊列為空,則電梯在該樓層停候一定時間,在停候期間若有新的呼叫,則立即轉入處理程序處理,否則返回一樓停候。
8. 電梯在上升或下降過程中需要不停地對當前方向上的最終樓層作調整。比如當前向上,最終樓層為6樓,而有乘客在8樓按了按鈕,則最終樓層調整為8樓。相反方向同理。

代碼片段和文件信息
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄??????????0??2002-12-04?12:57??電梯模擬
?????文件??????92160??2002-11-23?21:18??電梯模擬\算法文檔.doc
?????文件??????98304??2002-10-23?21:37??電梯模擬\源代碼.doc
?????文件??????48037??2002-10-07?11:05??電梯模擬\電梯模擬.EXE
-----------?---------??----------?-----??----
???????????????238719????????????????????5
-----------?---------??----------?-----??----
?????目錄??????????0??2002-12-04?12:57??電梯模擬
?????文件??????92160??2002-11-23?21:18??電梯模擬\算法文檔.doc
?????文件??????98304??2002-10-23?21:37??電梯模擬\源代碼.doc
?????文件??????48037??2002-10-07?11:05??電梯模擬\電梯模擬.EXE
-----------?---------??----------?-----??----
???????????????238719????????????????????5
評論
共有 條評論