數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告電梯模擬_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告電梯模擬_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告電梯模擬_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告電梯模擬_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告電梯模擬_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、課 程 設(shè) 計 課程名稱 數(shù)據(jù)結(jié)構(gòu) 題目名稱 2.8電梯模擬(難度5) 學(xué)生學(xué)院 計算機學(xué)院 專業(yè)班級 XXXXXXXXXX 學(xué) 號 XXXXXXXX 學(xué)生姓名 XXX 指導(dǎo)教師 XX 2013年7月4日電梯模擬系統(tǒng)一、 簡單介紹1、問題描述設(shè)計一個電梯模擬系統(tǒng),這是一個離散的模擬程序,因為電梯系統(tǒng)是乘客和電梯等“活動體”構(gòu)成的集合,雖然他們彼此交互作用,但他們的行為是基本獨立的,在離散的模擬中,以模擬時鐘決定每個活動體的動作發(fā)生的時刻和順序,系統(tǒng)在某個模擬瞬間處理有待完成的各種事情,然后把模擬時鐘推進到某個動作預(yù)定要發(fā)生的下一個時刻。2、基本要求(1)、模擬某校五層教學(xué)樓的電梯系統(tǒng)。該樓有一

2、個自動電梯,能在每層停留。五個樓層由下至上依次稱為地下層、第一層、第二層、第三層,第四層,其中第一層是大樓的進出層,即是電梯的“本壘層”,電梯“空閑”時,將來到該層候命。(2)、乘客可隨機地進出于任何層。對每個人來說,他有一個能容忍的最長等待時間,一旦等候電梯時間過長,他將放棄。(3)、模擬時鐘從0開始,時間單位為0.1秒。人和電梯的各種動作均要消耗一定的時間單位(簡記為t),比如:有人進出時,電梯每隔40t測試一次,若無人進出,則關(guān)門;關(guān)門和開門各需要20t;每個人進出電梯均需要25t;如果電梯在某層靜止時間超過300t,則駛回1層侯命。(4)、按時序顯示系統(tǒng)狀態(tài)的變化過程:發(fā)生的全部人和電

3、梯的動作序列。二、設(shè)計目的 當(dāng)初之所以選擇做電梯模擬這個課題,主要是因為覺得當(dāng)今時代需要,所以覺得想嘗試一下,因為為了方便,我們都會選擇乘坐電梯,既省時間又省力,粗略看了書本里面的描述,覺得應(yīng)該不難,只是按照要求輸出動作序列即可,后來經(jīng)過老師的輔導(dǎo),才發(fā)現(xiàn),原來自己選了個最難的課程設(shè)計,也問了同學(xué),很多都是因為太難了才沒有選這個題目,因為它遠比想象中的復(fù)雜的多很多,它實際上是模擬現(xiàn)實中的電梯的運行狀況,因此要考慮很多現(xiàn)實中遇到的實際情況,坐過電梯的人都會應(yīng)該有點印象,現(xiàn)實中的電梯是按照每個人按下按鈕的時間順序進行服務(wù)的,但是,并不是將一個人接進來后就直接開往其目的樓層就完事,其實,當(dāng)電梯將某個

4、人送往其目的樓層的過程中,經(jīng)過某層時,如果此層的人也要用電梯,雖然其按按鈕的時間有可能比先前那個人晚,但是電梯依舊會開門將其接入,然后繼續(xù)送前一個人去目的地,之后再送這個人去他的目的樓層,如果有多人在電梯中時,也是按照申請時間的先后決定先去哪層的,同理,若在某層,電梯中的某個人,或者某幾個人要在該層下,電梯也不能忽略這些,而是要先開門使要下的人出去,之后繼續(xù)開往先前的樓層,所以設(shè)計時,每當(dāng)電梯上升或下降一層后,都應(yīng)該檢測現(xiàn)在電梯所處的這層有沒有人有用電梯的請求,或者電梯中的人有沒有要在該層下的情況,若有則電梯要在該層停一下,否則繼續(xù)上升或下降.此外,當(dāng)電梯停在某一層時不外乎三種情況:1.此層有

5、個人或有幾個人等候要用電梯 2.電梯中的某個人或者某幾個人要在該樓層下 3.則是前面兩種情況的結(jié)合,此時情況相當(dāng)復(fù)雜,因為,題目要求電梯開門和關(guān)門都要消耗一定的時間(題目中沒有提電梯上升或者下降一層需要多少時間,所以不妨就假定為30t),而且人進電梯和人出電梯時也要消耗一定的時間,這說明了當(dāng)同一時刻有至少兩個以上的人要進行同一種動作的時候(比方說都是要出電梯,或都是在某一層等電梯,電梯來了后都要進去),但是因為每個人進出電梯都要消耗時間,所以不能單純的同時讓這些人同進或同出電梯,而是要有先后順序的進出,此為其一其二,題目中還提到每個人等候電梯到來時,都有一個容忍時間(每個人不一定相同),所以,

6、萬一,在他按下按鈕到電梯開到他所在的那層樓的間隔時間大于他的最大容忍時間,他會先行離開,但這一切電梯并不知道啊,所以電梯依舊會按照每個申請使用電梯的時間進行服務(wù),正是因為這樣,極有可能發(fā)生這樣的情況:電梯開到某層后打開電梯門,但是既沒有人出去,也沒有人進來其三,根據(jù)題目中的要求,當(dāng)電梯停在某層時候,有人進出,電梯每隔40t測試一次,若無人進出,則關(guān)門,關(guān)門完后,若300t時間內(nèi)沒有人使用,則自動開到第1層等候下次的使用(第1層樓是電梯的本壘層, 電梯“空閑”時,將來到該層候命)等等等等以上各種情況(還有一些情況這里沒列舉)都是要在做這道題時需要考慮的,否則這題的電梯根本模擬不起來三、設(shè)計概要本

7、程序中所有的抽象數(shù)據(jù)類型的定義及其相應(yīng)的操作函數(shù)的定義如下:電梯的結(jié)構(gòu)體dianti/*此電梯結(jié)構(gòu)體中分別定義了電梯所在樓層,電梯的現(xiàn)有人數(shù)(現(xiàn)實中的電梯有個最大栽客量,在此題中不妨規(guī)定為最大12人),以及電梯門的狀態(tài)(0為關(guān),1為開),至于為什么定義電梯門的狀態(tài),并不是多此一舉,而是我在調(diào)試的過程中發(fā)現(xiàn)必須加上的,否則,在一些情況下會出現(xiàn)電梯動作的局部重復(fù),從而導(dǎo)致整個程序的失敗*/人的結(jié)構(gòu)體 man/*在人的結(jié)構(gòu)體中,分別定義了人的名字(這個有利于區(qū)別各個人),最大容忍時間(題目中的要求),所在的樓層,要去的目的樓層,兩個標(biāo)志位,其中一個標(biāo)志記錄該人是否還在電梯里面,另一個標(biāo)志記錄的是該人

8、是否已經(jīng)使用過電梯*/事件結(jié)構(gòu)體結(jié)點SLNode/*在事件的結(jié)構(gòu)體中分別定義了,事件信息,事件發(fā)生的時刻,以及指向下一個事件結(jié)構(gòu)結(jié)點的指針*/void ListInitiate(SLNode*head) /*初始化鏈表*/void LinListSort(SLNode *head) /*用按發(fā)生時間的順序給事件鏈表中的事件排序*/void Destroy(SLNode * *head)/*撤消鏈表*/void OPEN(SLNode *head,dianti dt,int now)/*電梯開門函數(shù),將電梯開門的事件信息插入到事件鏈表中去*/void CLOSE(SLNode *head,dia

9、nti dt,int now)/*電梯關(guān)門函數(shù),將電梯關(guān)門的事件信息插入到事件鏈表中去*/void GET_IN(SLNode *head,dianti dt,int now)/*人進電梯的函數(shù),將人進電梯時候的各種信息插入到事件鏈表中去*/void GET_OUT(SLNode *head,dianti dt,int now)/*人出電梯的函數(shù),將人出電梯時候的各種信息插入到事件鏈表中去*/注釋:以上四個函數(shù)基本是用來完成人和電梯的動作序列int gettime(SLNode *head) /*返回最新事件(即事件漣表最后一個結(jié)點)的發(fā)生時間,此為該程序中最重要的一個函數(shù)之一,并且為調(diào)用最頻

10、率最高的一個函數(shù)*/void print(SLNode *head)/*將事件鏈表中的事件一一顯示出來,即為最后顯示電梯和人動作序列的函數(shù)*/void Go(SLNode *head,int n,dianti dt,clock_t s1000,man r1000) /*電梯運行函數(shù),本程序中最最重要的函數(shù),可以說這是這道程序中的靈魂函數(shù),根據(jù)申請使用電梯的所有人的信息,以及所有事件發(fā)生時的時刻,將所有情況的處理都放在在其中,所以此函數(shù)的代碼相當(dāng)占了程序代碼的百分之七十多了(程序總代碼長度超過1200行)*/注釋:以上各個函數(shù)以及抽象數(shù)據(jù)結(jié)構(gòu)的定義都放在頭文件”elevator.h”中void

11、main()/*該程序的主函數(shù)*/程序流程圖如下:四、詳細設(shè)計本程序的所有抽象數(shù)據(jù)類型的具體實現(xiàn)一機相應(yīng)的操作函數(shù)的偽算法如下:typedef struct int lc;/電梯所在樓層 int rs;/電梯中的人數(shù),規(guī)定最大乘坐人數(shù)為12 int door;/門的狀態(tài) 0關(guān)1開dianti;typedef struct char name50; /這個人的名字或序號(以示區(qū)別)int rrsj;/一個人的容忍時間int lc;/所在樓層int md;/目的樓層int biaozhi; /此標(biāo)志位記錄人使用電梯是否完成或者是否離去,為1表明使用過(離去),否則為0int in; /標(biāo)志位,為1

12、時表明人在電梯中,否則為0man;typedef struct Nodechar a1000;/事件信息int mytime;/事件所發(fā)生的時間struct Node *next;SLNode;/初始化鏈表 void ListInitiate(SLNode* *head) if(*head = (SLNode *)malloc(sizeof(SLNode) = NULL) exit(1);(*head)->next = NULL;/將事件結(jié)點插入到事件鏈表中的第i個位置中去 int ListInsert(SLNode *head,int i,char a1000,int t)SLNode

13、 *p,*q;int j;p=head;j=-1;while(p->next!=NULL && j<i-1)p=p->next;j+; if(j!=i-1) printf("n 插入位置參數(shù)錯!n");return 0; if(q=(SLNode *)malloc(sizeof(SLNode) = NULL) exit(1); q->mytime = t; strcpy(q->a,a); q->next =p->next; p->next =q; return 1;/用按發(fā)生時間的順序給事件排序 void Li

14、nListSort(SLNode *head) SLNode *curr,*pre,*p,*q; p=head->next; head->next=NULL; while(p!=NULL)curr=head->next;pre=head;while(curr!=NULL && curr->mytime<=p->mytime)pre=curr;curr=curr->next; q=p;p=p->next;q->next=pre->next;pre->next=q; /銷毀鏈表 void Destroy(SLNode

15、 * *head)SLNode *p,*p1;p=*head;while(p!=NULL)p1=p;p=p->next;free(p1);*head = NULL;/* 電梯動作: 1.開始開門,20t,開門結(jié)束; 2.開始關(guān)門,20t,關(guān)門結(jié)束; 3.從n-1層開始移動,30t,到達第n層; 4.開始等待,有人來或者300t,等待結(jié)束; 人的動作: 1.開始等待,x<=最大容忍時間,等待結(jié)束; 2.開始進門,25t,進門結(jié)束; 3.開始出門,25t,出門結(jié)束;*/ /電梯開門 void OPEN(SLNode *head,dianti dt,int now) char a1000

16、="電梯開始開門.",b1000="開門完畢!"ListInsert(head,g,a,now);g+;ListInsert(head,g,b,now+20);g+;dt.door=1; /門的狀態(tài)為開/電梯關(guān)門 void CLOSE(SLNode *head,dianti dt,int now)char a1000="電梯開始關(guān)門.",b1000="關(guān)門完畢!"ListInsert(head,g,a,now);g+;ListInsert(head,g,b,now+20);g+;dt.door=0; /門的狀態(tài)為關(guān)

17、/人進電梯 void GET_IN(SLNode *head,dianti dt,int now)char a1000="人開始進門.",b1000="已經(jīng)進入!"ListInsert(head,g,a,now);g+;ListInsert(head,g,b,now+25);g+;dt.rs+; /電梯人數(shù)加一個/人出電梯 void GET_OUT(SLNode *head,dianti dt,int now)char a1000="人開始出門.",b1000="已經(jīng)出門!"ListInsert(head,g,a,

18、now);g+;ListInsert(head,g,b,now+25);g+;dt.rs-; /電梯中的人數(shù)減一個/返回最新事件(即事件漣表最后一個結(jié)點)的發(fā)生時間 int gettime(SLNode *head) SLNode *pre,*curr;curr=head->next;pre=head;while(curr!=NULL)pre=curr;curr=curr->next; return pre->mytime;/電梯運行函數(shù) void Go(SLNode *head,int n,dianti dt,clock_t s1000,man r1000) int k=0

19、,i,time,m,flag=0,counter=0; /flag 記錄是否有多個人在同一層或去同一層樓for(i=0;i<n;i+)if(dt.door=0) /初始電梯門狀態(tài)為關(guān)著if(dt.lc=ri.lc&&dt.rs<12&&ri.biaozhi=0&&ri.in=0)/人在該樓層,要進去電梯,且電梯人數(shù)不超過規(guī)定的12人 if(i=0) time=si/100; /記錄當(dāng)時時間else time=gettime(head);if(flag=0&&dt.door=0)OPEN(head,dt,time); /

20、開門dt.door=1;if(time-si/100)<=ri.rrsj)time=gettime(head);GET_IN(head,dt,time); /若超過此人的最大容忍時間,該人將放棄乘坐電梯ri.in=1;else if(time-sm/100)>rm.rrsj)&&rm.biaozhi=0)rm.biaozhi=1;printf("n此時有人離開,以下為離開的人的信息:n"); printf("時間:%d(單位:t) 發(fā)生的事件超過用戶的容忍時間,第%d層樓的人已經(jīng)離去n",sm/100+rm.rrsj,dt.l

21、c);time=gettime(head); /獲得事件鏈表最后一個結(jié)點的時間(即當(dāng)前時刻)if(dt.lc=ri+1.lc) flag=1;counter+;continue; /該層的所有人都進入電梯 else if(dt.door=1)time=gettime(head); ListInsert(head,g,"該層已無人進出,關(guān)門",time+40); /電梯經(jīng)過40t時間后,若無人進出,則關(guān)門 dt.door=0; /置電梯門狀態(tài)為關(guān) g+; CLOSE(head,dt,time+40); /* 本層人已經(jīng)全部進入電梯,接下來電梯啟動按每個人事件發(fā)生的時間順序?qū)⑵?/p>

22、送往目的樓層*/flag=0;if(dt.lc<=ri-counter.md)time=gettime(head);while(dt.lc<=ri-counter.md) /開往該層第一個人的目的樓層flag=0;if(dt.lc<ri-counter.md)dt.lc+;time+=30; for(m=0;m<n;m+)if(dt.lc=rm.lc&&rm.biaozhi=0&&rm.in=0&&dt.rs<12)/若該樓層有人等候,使其進入 if(flag=0&&dt.door=0)OPEN(he

23、ad,dt,time);dt.door=1; /電梯開門,并設(shè)置其門狀態(tài)為開 if(time-sm/100)<=rm.rrsj)time=gettime(head);GET_IN(head,dt,time);rm.in=1;else if(time-sm/100)>rm.rrsj)&&rm.biaozhi=0)rm.biaozhi=1;printf("n此時有人離開,以下為離開的人的信息:n");printf("時間:%d(單位:t) 發(fā)生的事件超過用戶的容忍時間,第%d層樓的人已經(jīng)離去n",sm/100+rm.rrsj,dt

24、.lc);flag=1;/若該樓層有人要出去,使其出電梯,置其狀態(tài)為1表示該人已經(jīng)使用過電梯else if(dt.lc=rm.md&&rm.biaozhi=0&&rm.in=1) if(flag=0&&dt.door=0)OPEN(head,dt,time);dt.door=1;time=gettime(head); GET_OUT(head,dt,time); rm.biaozhi=1;rm.in=0;flag=1;if(dt.lc=ri-counter.md) break;if(dt.door=1)time=gettime(head); Li

25、stInsert(head,g,"該層已無人進出,關(guān)門",time+40); /電梯經(jīng)過40t時間后,若無人進出,則關(guān)門 dt.door=0; /置電梯門狀態(tài)為關(guān) g+; CLOSE(head,dt,time+40);time=gettime(head);if(dt.door=1)time=gettime(head); ListInsert(head,g,"該層已無人進出,關(guān)門",time+40);dt.door=0; g+; CLOSE(head,dt,time+40);else if(dt.lc>=ri-counter.md)time=gett

26、ime(head);while(dt.lc>=ri-counter.md)flag=0;if(dt.lc>ri-counter.md)dt.lc-; /30t,電梯下降一層time+=30;for(m=0;m<n;m+)if(dt.lc=rm.lc&&rm.biaozhi=0&&rm.in=0&&dt.rs<12) /若該樓層有人等候,使其進入if(flag=0&&dt.door=0)OPEN(head,dt,time);dt.door=1; if(time-sm/100)<=rm.rrsj)time

27、=gettime(head);GET_IN(head,dt,time);rm.in=1;else if(time-sm/100)>rm.rrsj)&&rm.biaozhi=0)rm.biaozhi=1; printf("n此時有人離開,以下為離開的人的信息:n");printf("時間:%d(單位:t) 發(fā)生的事件超過用戶的容忍時間,第%d層樓的人已經(jīng)離去n",sm/100+rm.rrsj,dt.lc);flag=1;/若該樓層有人要出去,使其出電梯,置其狀態(tài)為1表示該人已經(jīng)使用過電梯else if(dt.lc=rm.md&

28、&rm.biaozhi=0&&rm.in=1) if(flag=0&&dt.door=0)OPEN(head,dt,time);dt.door=1;time=gettime(head); GET_OUT(head,dt,time); rm.biaozhi=1;rm.in=0;flag=1;if(dt.lc=ri-counter.md) break;if(dt.door=1)time=gettime(head); ListInsert(head,g,"該層已無人進出,關(guān)門",time+40); dt.door=0; g+; CLOSE(

29、head,dt,time+40); time=gettime(head); if(dt.door=1)time=gettime(head); ListInsert(head,g,"該層已無人進出,關(guān)門",time+40); dt.door=0; g+; CLOSE(head,dt,time+40);i=i-counter; else if(dt.lc=ri.md&&ri.biaozhi=0&&ri.in=1) /人在電梯中,在該樓層要出去if(i=0)time=s0/100; else time=gettime(head);for(m=0;m

30、<n;m+)if(dt.lc=rm.lc&&rm.biaozhi=0&&rm.in=0&&dt.rs<12) /若該樓層有人等候,使其進入if(flag=0&&dt.door=0)OPEN(head,dt,time);dt.door=1; if(time-sm/100)<=rm.rrsj)time=gettime(head);GET_IN(head,dt,time);rm.in=1;else if(time-sm/100)>rm.rrsj)&&rm.biaozhi=0)rm.biaozhi=

31、1; printf("n此時有人離開,以下為離開的人的信息:n");printf("時間:%d(單位:t) 發(fā)生的事件超過用戶的容忍時間,第%d層樓的人已經(jīng)離去n",sm/100+rm.rrsj,dt.lc);flag=1;/若該樓層有人要出去,使其出電梯,置其狀態(tài)為1表示該人已經(jīng)使用過電梯else if(dt.lc=rm.md&&rm.biaozhi=0&&rm.in=1) if(flag=0&&dt.door=0)OPEN(head,dt,time); dt.door=1;time=gettime(he

32、ad);GET_OUT(head,dt,time); rm.biaozhi=1;rm.in=0;flag=1;if(dt.door=1)time=gettime(head); ListInsert(head,g,"該層已無人進出,關(guān)門",time+40); dt.door=0; g+; CLOSE(head,dt,time+40);/1.if(dt.lc=ri.lc&&dt.rs<12&&ri.biaozhi=0&&ri.in=0) ,人在該樓層,要進去電梯/2.else if(dt.lc=ri.md&&

33、ri.biaozhi=0&&ri.in=1),人在電梯中,在該樓層要出去/3.else if(dt.lc!=ri.lc&&dt.rs<12&&ri.biaozhi=0&&ri.in=0),人不在該樓層,要進去電梯 /4.else if(dt.lc!=ri.md&&ri.biaozhi=0&&ri.in=1),人在電梯里,該樓層不是其目的樓層else if(dt.lc!=ri.lc&&dt.rs<12&&ri.biaozhi=0&&ri.in

34、=0) /3.人不在該樓層,要進去電梯 flag=0; if(i=0)time=s0/100; /以該事件發(fā)生的時間為起始時間else time=gettime(head); /取當(dāng)前時間 if(dt.lc<=ri.lc)while(dt.lc<=ri.lc)flag=0;if(dt.lc<ri.lc)dt.lc+; time+=30; /30t,電梯上升一層for(m=0;m<n;m+)/若該樓層有人等候,使其進入if(dt.lc=rm.lc&&rm.biaozhi=0&&rm.in=0&&dt.rs<12) if

35、(flag=0&&dt.door=0)OPEN(head,dt,time);dt.door=1; if(time-sm/100)<=rm.rrsj)time=gettime(head); GET_IN(head,dt,time); rm.in=1;else if(time-sm/100)>rm.rrsj)&&rm.biaozhi=0)rm.biaozhi=1; printf("n此時有人離開,以下為離開的人的信息:n"); printf("時間:%d(單位:t) 發(fā)生的事件超過用戶的容忍時間,第%d層樓的人已經(jīng)離去n&q

36、uot;,sm/100+rm.rrsj,dt.lc);flag=1;/若該樓層有人要出去,使其出電梯,置其狀態(tài)為1表示該人已經(jīng)使用過電梯else if(dt.lc=rm.md&&rm.biaozhi=0&&rm.in=1) if(flag=0&&dt.door=0)OPEN(head,dt,time);dt.door=1; time=gettime(head); GET_OUT(head,dt,time); rm.biaozhi=1; rm.in=0;flag=1;if(dt.lc=ri.lc) break;if(dt.door=1)time=g

37、ettime(head); ListInsert(head,g,"該層已無人進出,關(guān)門",time+40); dt.door=0; g+; CLOSE(head,dt,time+40); time=gettime(head);if(dt.door=1)time=gettime(head); ListInsert(head,g,"該層已無人進出,關(guān)門",time+40); dt.door=0; g+; CLOSE(head,dt,time+40);time=gettime(head);else if(dt.lc>=ri.lc)while(dt.lc&

38、gt;=ri.lc)flag=0;if(dt.lc>ri.lc)dt.lc-; time+=30;for(m=0;m<n;m+)/若該樓層有人等候,使其進入if(dt.lc=rm.lc&&rm.biaozhi=0&&rm.in=0&&dt.rs<12) if(flag=0&&dt.door=0)OPEN(head,dt,time);dt.door=1; if(time-sm/100)<=rm.rrsj)time=gettime(head); GET_IN(head,dt,time); rm.in=1;els

39、e if(time-sm/100)>rm.rrsj)&&rm.biaozhi=0)rm.biaozhi=1; printf("n此時有人離開,以下為離開的人的信息:n"); printf("時間:%d(單位:t) 發(fā)生的事件超過用戶的容忍時間,第%d層樓的人已經(jīng)離去n",sm/100+rm.rrsj,dt.lc);flag=1;/若該樓層有人要出去,使其出電梯,置其狀態(tài)為1表示該人已經(jīng)使用過電梯else if(dt.lc=rm.md&&rm.biaozhi=0&&rm.in=1) if(flag=0&

40、amp;&dt.door=0)OPEN(head,dt,time);dt.door=1; time=gettime(head); GET_OUT(head,dt,time); rm.biaozhi=1; rm.in=0;flag=1;if(dt.lc=ri.lc) break;if(dt.door=1)time=gettime(head); ListInsert(head,g,"該層已無人進出,關(guān)門",time+40); dt.door=0; g+; CLOSE(head,dt,time+40); time=gettime(head);if(dt.door=1)ti

41、me=gettime(head);ListInsert(head,g,"該層已無人進出,關(guān)門",time+40); dt.door=0; g+; CLOSE(head,dt,time+40);/*接下來將電梯里的人按時間順序送到各自的目的樓層*/time=gettime(head); if(dt.lc<=ri.md&&ri.in=1)while(dt.lc<=ri.md)flag=0;if(dt.lc<ri.md)dt.lc+; time+=30;for(m=0;m<n;m+)/若該樓層有人等候,使其進入if(dt.lc=rm.lc&

42、amp;&rm.biaozhi=0&&rm.in=0&&dt.rs<12) if(flag=0&&dt.door=0)OPEN(head,dt,time);dt.door=1; if(time-sm/100)<=rm.rrsj)time=gettime(head); GET_IN(head,dt,time); rm.in=1;else if(time-sm/100)>rm.rrsj)&&rm.biaozhi=0)rm.biaozhi=1; printf("n此時有人離開,以下為離開的人的信息:n"); printf("時間:%d(單位:t) 發(fā)生的事件超過用戶的容忍時間,第%d層樓的人已經(jīng)離去n&q

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論