c程序-隊(duì)列實(shí)現(xiàn)模擬加油站_第1頁
c程序-隊(duì)列實(shí)現(xiàn)模擬加油站_第2頁
c程序-隊(duì)列實(shí)現(xiàn)模擬加油站_第3頁
c程序-隊(duì)列實(shí)現(xiàn)模擬加油站_第4頁
c程序-隊(duì)列實(shí)現(xiàn)模擬加油站_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、信軟件基礎(chǔ)實(shí)訓(xùn)答辯 3選題:模擬加油站的工作情況小組成員:三枚銅錢94keyboard 時(shí)間:2015/5/5通模擬加油站的工作情況 加油站有 兩臺(tái)油泵; 每臺(tái)油泵為一輛汽車加油的時(shí)間為 d分鐘; 加油站的到車率為 1輛/g分鐘; 模擬時(shí)間長度為 time分鐘;1分析問題2確定框架3實(shí)現(xiàn)程序1分析問題1、看是否有車來到(概率決定)2、若有車再看是否有空閑的油泵3、若有空閑油泵立即加油,否則排隊(duì)等待4、若泵工作忙(未達(dá)到加油時(shí)間),則時(shí)間遞減等待5、時(shí)間遞減后若為0,將泵置為空閑1分析問題我們要做什么1方案思路模型油泵1油泵2出口出口汽車入口排隊(duì)第一段路第二段路第三段路等待可服務(wù)1分析問題 日常

2、生活中該類模型,是隊(duì)列應(yīng)用的典型例子。以加油站為例,假設(shè)某加油站有 兩臺(tái)油泵,每臺(tái)油泵的加油時(shí)間為 d分鐘,若已知該站的到車率為 g分鐘一輛,則該加油站的工作情況可用以下列隊(duì)模型描述。 定義一個(gè)循環(huán)隊(duì)列,容量為MAX(足夠大,不發(fā)生隊(duì)列滿的問題),用于組織等待加油的汽車序列。按照先到先加油的原則進(jìn)行處理;整個(gè)模擬過程內(nèi)的時(shí)間為 time,每隔 dt分鐘監(jiān)控一次,獲取并輸出實(shí)際情況。 出事狀態(tài)設(shè)為:隊(duì)列為空(front=rear=MAX),每臺(tái)油泵為空閑(pump(1)=pump(2)=0),油泵未服務(wù)過(auto(1)=auto(2)=-1)。if(rear+1MAX) thenrear=1;

3、else rear+=1;timequeuetimequeue dt條件:s= 2m即 dt = g/2在模擬時(shí)間time內(nèi),每隔dt時(shí)間,監(jiān)控并報(bào)告一次車排隊(duì)的情況,油泵的工作狀態(tài),被服務(wù)的車。因此用一維整型數(shù)組Queue 存取 車編號(hào)num的數(shù)據(jù)。量化后數(shù)字信號(hào)模擬信號(hào)整個(gè)問題可分為三部分: 1) 汽車排隊(duì):已知一分鐘來一輛車的概率為 1/g,則每隔 dt分鐘來一輛車的概率為 dt/g。由于來車的問題是隨機(jī)的,因此,實(shí)際處理時(shí),每隔t分鐘產(chǎn)生一個(gè)隨機(jī)數(shù) rnd (0-1內(nèi)),若它小于等于 dt/g,則認(rèn)定有一輛車進(jìn)站,應(yīng)將它加入隊(duì)列中。 2) 油泵工作狀態(tài):用pump(i)表示第 i(i=

4、1,2)每臺(tái)油泵工作進(jìn)程,用 auto(i)表示第 i臺(tái)油泵的服務(wù)對(duì)象。則當(dāng)?shù)?i臺(tái)油泵開始為一輛車工作時(shí),置 pump(i)=d-dt,以后每 dt分鐘,令pump(i)=pump(i)-dt。若 pump(i)0時(shí),若pump(i)0表示油泵 i正在為 auto(i)加油;若pump(i)0表示油泵i 所余時(shí)間才能加完油;若pump(i)0表示油泵i剛為 auto(i)加完油;若pump(i)=0表示油泵i已經(jīng)為 auto(i)加完油。排隊(duì)Queue rearfront尾指針將新元素插入隊(duì)中頭指針將等待的元素 對(duì)應(yīng)服務(wù)油泵123456MAXfrontrear2確定框架第一步模擬概率第二步模

5、擬排隊(duì)第三步模擬加油第四步采樣報(bào)告2確定框架開始建立循環(huán)隊(duì)列,設(shè)置油泵從未服務(wù)過且初始狀態(tài)空閑調(diào)用函數(shù)simu_aut模擬車排隊(duì);尾指針插入新元素到隊(duì)列有車來rear+=1;t 0時(shí),若FP(i)0表示油泵 i正在為 aut(i)加油,F(xiàn)P(i)的值為 到加完油還剩的時(shí)間;/ FP(i)=0為油泵可服務(wù)若FP(i)0表示油泵 i 剛為 aut(i)加完油;若FP(i)=0表示油泵 i 已經(jīng)為 aut(i)加完油。/*-輸入操作顯示-*/printf( 請(qǐng)輸入到車率中 g(分鐘): );scanf(%lf,&g);printf( 請(qǐng)輸入每輛加油時(shí)間 d(分鐘): );scanf(%lf,&d);

6、printf( 請(qǐng)輸入總模擬時(shí)間長度 Time(分鐘): );scanf(%lf,&Time);printf( 請(qǐng)輸入采樣時(shí)間 dt(分鐘): );scanf(%lf,&dt);printf(-n); 這里時(shí)間用到的都是double型,提高模擬的準(zhǔn)確度num=0; t=0; srand(unsigned)time(NULL);while (tTime)/在模擬時(shí)間未結(jié)束 /*隨機(jī)數(shù)0-1之間產(chǎn)生*/rnd=rand( )/(double)RAND_MAX+1); /*32767,范圍不會(huì)超過 -3276832767,rnd=rand()/32767.00; */simu_aut(Queue,M

7、AX,&rear,&num,dt,g,rnd); /num,front,rear所占內(nèi)存地址simu_pump(Queue,MAX,&front,rear,dt,d,FP,aut,1); /front所占內(nèi)存地址,在此函數(shù)中rear=*rear+=1;simu_pump(Queue,MAX,&front,rear,dt,d,FP,aut,2); /front所占內(nèi)存地址,在此函數(shù)中rear=*rear+=1;print_out(Queue,MAX,front,rear,FP,aut);t=t+dt;free(Queue); /釋放循環(huán)隊(duì)列空間模塊函數(shù);p 模擬汽車排隊(duì)函數(shù)p 模擬加油泵1工作函

8、數(shù)p 模擬加油泵2工作函數(shù)/*-模擬汽車排隊(duì)-*/simu_aut(Queue,MAX,rear,num,dt,g,rnd)int Queue ,MAX,*rear,*num; /指針指向num,front,rear所占內(nèi)存地址double dt,g,rnd;if(rnd=dt/g) /滿足概率則給車編號(hào)加入循環(huán)隊(duì)列*num+=1;*rear+=1;if(*rear=MAX+1)*rear=1; /如果rear從1達(dá)到max后再前進(jìn)一個(gè)位置就自動(dòng)到1; Queue*rear-1=*num; /循環(huán)隊(duì)列解決假溢出;從隊(duì)列開始位置入隊(duì)一個(gè)編號(hào);用到了參數(shù)概率 rnd (采樣時(shí)間dt 到車率g確定概

9、率范圍)循環(huán)隊(duì)列 Queue尾指針 rear 將新元素插入隊(duì)中容量 MAX給車編號(hào) nump編號(hào)入隊(duì)后一次判斷油泵是否可以服務(wù);判斷隊(duì)列中是否有車;有車就將排在隊(duì)首的元素給空閑的泵服務(wù);p判斷查詢一次都要在時(shí)間上減去dt;以FPi的大小可以參照還有多長時(shí)間可以加完油;/*-模擬油泵i工作-*/simu_pump(Queue,MAX,front,rear,dt,d,FP,aut,i)int Queue ,MAX,*rear,*front,FP ,aut ,i;double dt,d;if(FPi-1=0)/加油泵可以服務(wù);(沒車來 或 剛好有車來)if(*front=rear)/rear=1和隊(duì)

10、空判斷;FPi-1=0;/沒有車即空閑狀態(tài);else *front=*front+1;if(*front=MAX+1)*front=1;/解決假溢出auti-1=Queue*front-1;/第i輛車被服務(wù)FPi-1=d-dt;else FPi-1=FPi-1-dt;p每隔dt時(shí)間報(bào)告一次p經(jīng)過前兩個(gè)函數(shù)運(yùn)行后,可以得到插入隊(duì)列的編號(hào)(即排隊(duì)的車數(shù))p被服務(wù)的車的編號(hào)p加油泵1、2的工作狀態(tài)pfront比rear小 說明rear插入的多 front服務(wù)的少 從front開始遍歷到rear找到正在排隊(duì)的編號(hào)/*-模擬結(jié)果的輸出-*/print_out(Queue,MAX,front,rear,FP,aut)int Queue ,MAX,rear,front,FP ,aut ;int k; k=front; while(k!=rear) /兩臺(tái)都在忙且rear插入的比服務(wù)front的多 k=k+1;if(k=MAX+1)k=1;printf(Queue(

溫馨提示

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

評(píng)論

0/150

提交評(píng)論