




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、.課 程 設(shè) 計(jì) 課程名稱 數(shù)據(jù)結(jié)構(gòu) 題目名稱 2.8電梯模擬(難度5) 學(xué)生學(xué)院 計(jì)算機(jī)學(xué)院 專業(yè)班級 XXXXXXXXXX 學(xué) 號 XXXXXXXX 學(xué)生姓名 XXX 指導(dǎo)教師 XX 2013年7月4日電梯模擬系統(tǒng)一、 簡單介紹1、問題描述設(shè)計(jì)一個(gè)電梯模擬系統(tǒng),這是一個(gè)離散的模擬程序,因?yàn)殡娞菹到y(tǒng)是乘客和電梯等“活動體”構(gòu)成的集合,雖然他們彼此交互作用,但他們的行為是基本獨(dú)立的,在離散的模擬中,以模擬時(shí)鐘決定每個(gè)活動體的動作發(fā)生的時(shí)刻和順序,系統(tǒng)在某個(gè)模擬瞬間處理有待完成的各種事情,然后把模擬時(shí)鐘推進(jìn)到某個(gè)動作預(yù)定要發(fā)生的下一個(gè)時(shí)刻。2、基本要求(1)、模擬某校五層教學(xué)樓的電梯系統(tǒng)。該樓有
2、一個(gè)自動電梯,能在每層停留。五個(gè)樓層由下至上依次稱為地下層、第一層、第二層、第三層,第四層,其中第一層是大樓的進(jìn)出層,即是電梯的“本壘層”,電梯“空閑”時(shí),將來到該層候命。(2)、乘客可隨機(jī)地進(jìn)出于任何層。對每個(gè)人來說,他有一個(gè)能容忍的最長等待時(shí)間,一旦等候電梯時(shí)間過長,他將放棄。(3)、模擬時(shí)鐘從0開始,時(shí)間單位為0.1秒。人和電梯的各種動作均要消耗一定的時(shí)間單位(簡記為t),比如:有人進(jìn)出時(shí),電梯每隔40t測試一次,若無人進(jìn)出,則關(guān)門;關(guān)門和開門各需要20t;每個(gè)人進(jìn)出電梯均需要25t;如果電梯在某層靜止時(shí)間超過300t,則駛回1層侯命。(4)、按時(shí)序顯示系統(tǒng)狀態(tài)的變化過程:發(fā)生的全部人和
3、電梯的動作序列。二、設(shè)計(jì)目的 當(dāng)初之所以選擇做電梯模擬這個(gè)課題,主要是因?yàn)橛X得當(dāng)今時(shí)代需要,所以覺得想嘗試一下,因?yàn)闉榱朔奖悖覀兌紩x擇乘坐電梯,既省時(shí)間又省力,粗略看了書本里面的描述,覺得應(yīng)該不難,只是按照要求輸出動作序列即可,后來經(jīng)過老師的輔導(dǎo),才發(fā)現(xiàn),原來自己選了個(gè)最難的課程設(shè)計(jì),也問了同學(xué),很多都是因?yàn)樘y了才沒有選這個(gè)題目,因?yàn)樗h(yuǎn)比想象中的復(fù)雜的多很多,它實(shí)際上是模擬現(xiàn)實(shí)中的電梯的運(yùn)行狀況,因此要考慮很多現(xiàn)實(shí)中遇到的實(shí)際情況,坐過電梯的人都會應(yīng)該有點(diǎn)印象,現(xiàn)實(shí)中的電梯是按照每個(gè)人按下按鈕的時(shí)間順序進(jìn)行服務(wù)的,但是,并不是將一個(gè)人接進(jìn)來后就直接開往其目的樓層就完事,其實(shí),當(dāng)電梯將某
4、個(gè)人送往其目的樓層的過程中,經(jīng)過某層時(shí),如果此層的人也要用電梯,雖然其按按鈕的時(shí)間有可能比先前那個(gè)人晚,但是電梯依舊會開門將其接入,然后繼續(xù)送前一個(gè)人去目的地,之后再送這個(gè)人去他的目的樓層,如果有多人在電梯中時(shí),也是按照申請時(shí)間的先后決定先去哪層的,同理,若在某層,電梯中的某個(gè)人,或者某幾個(gè)人要在該層下,電梯也不能忽略這些,而是要先開門使要下的人出去,之后繼續(xù)開往先前的樓層,所以設(shè)計(jì)時(shí),每當(dāng)電梯上升或下降一層后,都應(yīng)該檢測現(xiàn)在電梯所處的這層有沒有人有用電梯的請求,或者電梯中的人有沒有要在該層下的情況,若有則電梯要在該層停一下,否則繼續(xù)上升或下降.此外,當(dāng)電梯停在某一層時(shí)不外乎三種情況:1.此層
5、有個(gè)人或有幾個(gè)人等候要用電梯 2.電梯中的某個(gè)人或者某幾個(gè)人要在該樓層下 3.則是前面兩種情況的結(jié)合,此時(shí)情況相當(dāng)復(fù)雜,因?yàn)?,題目要求電梯開門和關(guān)門都要消耗一定的時(shí)間(題目中沒有提電梯上升或者下降一層需要多少時(shí)間,所以不妨就假定為30t),而且人進(jìn)電梯和人出電梯時(shí)也要消耗一定的時(shí)間,這說明了當(dāng)同一時(shí)刻有至少兩個(gè)以上的人要進(jìn)行同一種動作的時(shí)候(比方說都是要出電梯,或都是在某一層等電梯,電梯來了后都要進(jìn)去),但是因?yàn)槊總€(gè)人進(jìn)出電梯都要消耗時(shí)間,所以不能單純的同時(shí)讓這些人同進(jìn)或同出電梯,而是要有先后順序的進(jìn)出,此為其一其二,題目中還提到每個(gè)人等候電梯到來時(shí),都有一個(gè)容忍時(shí)間(每個(gè)人不一定相同),所以
6、,萬一,在他按下按鈕到電梯開到他所在的那層樓的間隔時(shí)間大于他的最大容忍時(shí)間,他會先行離開,但這一切電梯并不知道啊,所以電梯依舊會按照每個(gè)申請使用電梯的時(shí)間進(jìn)行服務(wù),正是因?yàn)檫@樣,極有可能發(fā)生這樣的情況:電梯開到某層后打開電梯門,但是既沒有人出去,也沒有人進(jìn)來其三,根據(jù)題目中的要求,當(dāng)電梯停在某層時(shí)候,有人進(jìn)出,電梯每隔40t測試一次,若無人進(jìn)出,則關(guān)門,關(guān)門完后,若300t時(shí)間內(nèi)沒有人使用,則自動開到第1層等候下次的使用(第1層樓是電梯的本壘層, 電梯“空閑”時(shí),將來到該層候命)等等等等以上各種情況(還有一些情況這里沒列舉)都是要在做這道題時(shí)需要考慮的,否則這題的電梯根本模擬不起來三、設(shè)計(jì)概要
7、本程序中所有的抽象數(shù)據(jù)類型的定義及其相應(yīng)的操作函數(shù)的定義如下:電梯的結(jié)構(gòu)體dianti/*此電梯結(jié)構(gòu)體中分別定義了電梯所在樓層,電梯的現(xiàn)有人數(shù)(現(xiàn)實(shí)中的電梯有個(gè)最大栽客量,在此題中不妨規(guī)定為最大12人),以及電梯門的狀態(tài)(0為關(guān),1為開),至于為什么定義電梯門的狀態(tài),并不是多此一舉,而是我在調(diào)試的過程中發(fā)現(xiàn)必須加上的,否則,在一些情況下會出現(xiàn)電梯動作的局部重復(fù),從而導(dǎo)致整個(gè)程序的失敗*/人的結(jié)構(gòu)體 man/*在人的結(jié)構(gòu)體中,分別定義了人的名字(這個(gè)有利于區(qū)別各個(gè)人),最大容忍時(shí)間(題目中的要求),所在的樓層,要去的目的樓層,兩個(gè)標(biāo)志位,其中一個(gè)標(biāo)志記錄該人是否還在電梯里面,另一個(gè)標(biāo)志記錄的是該
8、人是否已經(jīng)使用過電梯*/事件結(jié)構(gòu)體結(jié)點(diǎn)SLNode/*在事件的結(jié)構(gòu)體中分別定義了,事件信息,事件發(fā)生的時(shí)刻,以及指向下一個(gè)事件結(jié)構(gòu)結(jié)點(diǎn)的指針*/void ListInitiate(SLNode*head) /*初始化鏈表*/void LinListSort(SLNode *head) /*用按發(fā)生時(shí)間的順序給事件鏈表中的事件排序*/void Destroy(SLNode * *head)/*撤消鏈表*/void OPEN(SLNode *head,dianti dt,int now)/*電梯開門函數(shù),將電梯開門的事件信息插入到事件鏈表中去*/void CLOSE(SLNode *head,di
9、anti dt,int now)/*電梯關(guān)門函數(shù),將電梯關(guān)門的事件信息插入到事件鏈表中去*/void GET_IN(SLNode *head,dianti dt,int now)/*人進(jìn)電梯的函數(shù),將人進(jìn)電梯時(shí)候的各種信息插入到事件鏈表中去*/void GET_OUT(SLNode *head,dianti dt,int now)/*人出電梯的函數(shù),將人出電梯時(shí)候的各種信息插入到事件鏈表中去*/注釋:以上四個(gè)函數(shù)基本是用來完成人和電梯的動作序列int gettime(SLNode *head) /*返回最新事件(即事件漣表最后一個(gè)結(jié)點(diǎn))的發(fā)生時(shí)間,此為該程序中最重要的一個(gè)函數(shù)之一,并且為調(diào)用最
10、頻率最高的一個(gè)函數(shù)*/void print(SLNode *head)/*將事件鏈表中的事件一一顯示出來,即為最后顯示電梯和人動作序列的函數(shù)*/void Go(SLNode *head,int n,dianti dt,clock_t s1000,man r1000) /*電梯運(yùn)行函數(shù),本程序中最最重要的函數(shù),可以說這是這道程序中的靈魂函數(shù),根據(jù)申請使用電梯的所有人的信息,以及所有事件發(fā)生時(shí)的時(shí)刻,將所有情況的處理都放在在其中,所以此函數(shù)的代碼相當(dāng)占了程序代碼的百分之七十多了(程序總代碼長度超過1200行)*/注釋:以上各個(gè)函數(shù)以及抽象數(shù)據(jù)結(jié)構(gòu)的定義都放在頭文件”elevator.h”中void
11、 main()/*該程序的主函數(shù)*/程序流程圖如下:四、詳細(xì)設(shè)計(jì)本程序的所有抽象數(shù)據(jù)類型的具體實(shí)現(xiàn)一機(jī)相應(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; /這個(gè)人的名字或序號(以示區(qū)別)int rrsj;/一個(gè)人的容忍時(shí)間int lc;/所在樓層int md;/目的樓層int biaozhi; /此標(biāo)志位記錄人使用電梯是否完成或者是否離去,為1表明使用過(離去),否則為0int in; /標(biāo)志位,為
12、1時(shí)表明人在電梯中,否則為0man;typedef struct Nodechar a1000;/事件信息int mytime;/事件所發(fā)生的時(shí)間struct Node *next;SLNode;/初始化鏈表 void ListInitiate(SLNode* *head) if(*head = (SLNode *)malloc(sizeof(SLNode) = NULL) exit(1);(*head)->next = NULL;/將事件結(jié)點(diǎn)插入到事件鏈表中的第i個(gè)位置中去 int ListInsert(SLNode *head,int i,char a1000,int t)SLNod
13、e *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ù)錯(cuò)!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ā)生時(shí)間的順序給事件排序 void L
14、inListSort(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(SLNod
15、e * *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,到達(dá)第n層; 4.開始等待,有人來或者300t,等待結(jié)束; 人的動作: 1.開始等待,x<=最大容忍時(shí)間,等待結(jié)束; 2.開始進(jìn)門,25t,進(jìn)門結(jié)束; 3.開始出門,25t,出門結(jié)束;*/ /電梯開門 void OPEN(SLNode *head,dianti dt,int now) char a100
16、0="電梯開始開門.",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)為
17、關(guān)/人進(jìn)電梯 void GET_IN(SLNode *head,dianti dt,int now)char a1000="人開始進(jìn)門.",b1000="已經(jīng)進(jìn)入!"ListInsert(head,g,a,now);g+;ListInsert(head,g,b,now+25);g+;dt.rs+; /電梯人數(shù)加一個(gè)/人出電梯 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ù)減一個(gè)/返回最新事件(即事件漣表最后一個(gè)結(jié)點(diǎn))的發(fā)生時(shí)間 int gettime(SLNode *head) SLNode *pre,*curr;curr=head->next;pre=head;while(curr!=NULL)pre=curr;curr=curr->next; return pre->mytime;/電梯運(yùn)行函數(shù) void Go(SLNode *head,int n,dianti dt,clock_t s1000,man r1000) int k=
19、0,i,time,m,flag=0,counter=0; /flag 記錄是否有多個(gè)人在同一層或去同一層樓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)/人在該樓層,要進(jìn)去電梯,且電梯人數(shù)不超過規(guī)定的12人 if(i=0) time=si/100; /記錄當(dāng)時(shí)時(shí)間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); /若超過此人的最大容忍時(shí)間,該人將放棄乘坐電梯ri.in=1;else if(time-sm/100)>rm.rrsj)&&rm.biaozhi=0)rm.biaozhi=1;printf("n此時(shí)有人離開,以下為離開的人的信息:n"); printf("時(shí)間:%d(單位:t) 發(fā)生的事件超過用戶的容忍時(shí)間,第%d層樓的人已經(jīng)離去n",sm/100+rm.rrsj,dt.
21、lc);time=gettime(head); /獲得事件鏈表最后一個(gè)結(jié)點(diǎn)的時(shí)間(即當(dāng)前時(shí)刻)if(dt.lc=ri+1.lc) flag=1;counter+;continue; /該層的所有人都進(jìn)入電梯 else if(dt.door=1)time=gettime(head); ListInsert(head,g,"該層已無人進(jìn)出,關(guān)門",time+40); /電梯經(jīng)過40t時(shí)間后,若無人進(jìn)出,則關(guān)門 dt.door=0; /置電梯門狀態(tài)為關(guān) g+; CLOSE(head,dt,time+40); /* 本層人已經(jīng)全部進(jìn)入電梯,接下來電梯啟動按每個(gè)人事件發(fā)生的時(shí)間順序?qū)?/p>
22、其送往目的樓層*/flag=0;if(dt.lc<=ri-counter.md)time=gettime(head);while(dt.lc<=ri-counter.md) /開往該層第一個(gè)人的目的樓層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)/若該樓層有人等候,使其進(jìn)入 if(flag=0&&dt.door=0)OPEN(h
23、ead,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此時(shí)有人離開,以下為離開的人的信息:n");printf("時(shí)間:%d(單位:t) 發(fā)生的事件超過用戶的容忍時(shí)間,第%d層樓的人已經(jīng)離去n",sm/100+rm.rrsj,d
24、t.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); L
25、istInsert(head,g,"該層已無人進(jìn)出,關(guān)門",time+40); /電梯經(jīng)過40t時(shí)間后,若無人進(jìn)出,則關(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,"該層已無人進(jìn)出,關(guān)門",time+40);dt.door=0; g+; CLOSE(head,dt,time+40);else if(dt.lc>=ri-counter.md)time=get
26、time(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) /若該樓層有人等候,使其進(jìn)入if(flag=0&&dt.door=0)OPEN(head,dt,time);dt.door=1; if(time-sm/100)<=rm.rrsj)tim
27、e=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此時(shí)有人離開,以下為離開的人的信息:n");printf("時(shí)間:%d(單位:t) 發(fā)生的事件超過用戶的容忍時(shí)間,第%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,"該層已無人進(jìn)出,關(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,"該層已無人進(jìn)出,關(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;
30、m<n;m+)if(dt.lc=rm.lc&&rm.biaozhi=0&&rm.in=0&&dt.rs<12) /若該樓層有人等候,使其進(jìn)入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此時(shí)有人離開,以下為離開的人的信息:n");printf("時(shí)間:%d(單位:t) 發(fā)生的事件超過用戶的容忍時(shí)間,第%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(h
32、ead);GET_OUT(head,dt,time); rm.biaozhi=1;rm.in=0;flag=1;if(dt.door=1)time=gettime(head); ListInsert(head,g,"該層已無人進(jìn)出,關(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) ,人在該樓層,要進(jìn)去電梯/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),人不在該樓層,要進(jìn)去電梯 /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.i
34、n=0) /3.人不在該樓層,要進(jìn)去電梯 flag=0; if(i=0)time=s0/100; /以該事件發(fā)生的時(shí)間為起始時(shí)間else time=gettime(head); /取當(dāng)前時(shí)間 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+)/若該樓層有人等候,使其進(jìn)入if(dt.lc=rm.lc&&rm.biaozhi=0&&rm.in=0&&dt.rs<12) i
35、f(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此時(shí)有人離開,以下為離開的人的信息:n"); printf("時(shí)間:%d(單位:t) 發(fā)生的事件超過用戶的容忍時(shí)間,第%d層樓的人已經(jīng)離去n&
36、quot;,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=
37、gettime(head); ListInsert(head,g,"該層已無人進(jìn)出,關(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,"該層已無人進(jìn)出,關(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、>=ri.lc)flag=0;if(dt.lc>ri.lc)dt.lc-; time+=30;for(m=0;m<n;m+)/若該樓層有人等候,使其進(jìn)入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;el
39、se if(time-sm/100)>rm.rrsj)&&rm.biaozhi=0)rm.biaozhi=1; printf("n此時(shí)有人離開,以下為離開的人的信息:n"); printf("時(shí)間:%d(單位:t) 發(fā)生的事件超過用戶的容忍時(shí)間,第%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、&&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,"該層已無人進(jìn)出,關(guān)門",time+40); dt.door=0; g+; CLOSE(head,dt,time+40); time=gettime(head);if(dt.door=1)t
41、ime=gettime(head);ListInsert(head,g,"該層已無人進(jìn)出,關(guān)門",time+40); dt.door=0; g+; CLOSE(head,dt,time+40);/*接下來將電梯里的人按時(shí)間順序送到各自的目的樓層*/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+)/若該樓層有人等候,使其進(jìn)入if(dt.lc=rm.lc
42、&&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此時(shí)有人離開,以下為離開的人的信息:n"); printf("時(shí)間:%d(單位:t) 發(fā)生的事件超過用戶的容忍時(shí)間,第%d層樓的人已經(jīng)離去
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年債務(wù)管理面試試題及答案
- 2025年php考試題庫及答案
- 工業(yè)機(jī)器人理論練習(xí)試卷附答案
- 2025年英語淄博中考試題及答案
- 2025年生物填空試題庫及答案初中
- 2025年大學(xué)記者模擬面試題及答案
- 2025年中路法師能力測試題及答案
- 2025年道德模范評選面試題及答案
- 2025年礦山非煤試題庫及答案
- 2025年人教版九年級試題及答案
- 《麻醉與BIS監(jiān)測》課件
- 組建新部門規(guī)劃方案
- 行政審批政策法規(guī)知識講座
- 泛微協(xié)同OA與SAP集成應(yīng)用解決方案V講訴
- 探討電磁感應(yīng)現(xiàn)象對電能轉(zhuǎn)化效率的影響
- 合肥娃哈哈廠勞動合同
- 【盒馬鮮生生鮮類產(chǎn)品配送服務(wù)問題及優(yōu)化建議分析10000字(論文)】
- 《江蘇住宅物業(yè)管理服務(wù)標(biāo)準(zhǔn)》(DB32T538-2002)
- 橋梁定期檢查-主要部件檢查要點(diǎn)與評定標(biāo)準(zhǔn)
- 中西醫(yī)診所規(guī)章制度集合4篇
- 長途汽車客運(yùn)站調(diào)研報(bào)告
評論
0/150
提交評論