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

下載本文檔

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

文檔簡介

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

2、生活中該類模型,是隊列應(yīng)用的典型例子。以加油站為例,假設(shè)某加油站有 兩臺油泵,每臺油泵的加油時間為 d分鐘,若已知該站的到車率為 g分鐘一輛,則該加油站的工作情況可用以下列隊模型描述。 定義一個循環(huán)隊列,容量為MAX(足夠大,不發(fā)生隊列滿的問題),用于組織等待加油的汽車序列。按照先到先加油的原則進(jìn)行處理;整個模擬過程內(nèi)的時間為 time,每隔 dt分鐘監(jiān)控一次,獲取并輸出實際情況。 出事狀態(tài)設(shè)為:隊列為空(front=rear=MAX),每臺油泵為空閑(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在模擬時間time內(nèi),每隔dt時間,監(jiān)控并報告一次車排隊的情況,油泵的工作狀態(tài),被服務(wù)的車。因此用一維整型數(shù)組Queue 存取 車編號num的數(shù)據(jù)。量化后數(shù)字信號模擬信號整個問題可分為三部分: 1) 汽車排隊:已知一分鐘來一輛車的概率為 1/g,則每隔 dt分鐘來一輛車的概率為 dt/g。由于來車的問題是隨機(jī)的,因此,實際處理時,每隔t分鐘產(chǎn)生一個隨機(jī)數(shù) rnd (0-1內(nèi)),若它小于等于 dt/g,則認(rèn)定有一輛車進(jìn)站,應(yīng)將它加入隊列中。 2) 油泵工作狀態(tài):用pump(i)表示第 i(i=

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

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

6、printf( 請輸入總模擬時間長度 Time(分鐘): );scanf(%lf,&Time);printf( 請輸入采樣時間 dt(分鐘): );scanf(%lf,&dt);printf(-n); 這里時間用到的都是double型,提高模擬的準(zhǔn)確度num=0; t=0; srand(unsigned)time(NULL);while (tTime)/在模擬時間未結(jié)束 /*隨機(jī)數(shù)0-1之間產(chǎn)生*/rnd=rand( )/(double)RAND_MAX+1); /*32767,范圍不會超過 -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)隊列空間模塊函數(shù);p 模擬汽車排隊函數(shù)p 模擬加油泵1工作函

8、數(shù)p 模擬加油泵2工作函數(shù)/*-模擬汽車排隊-*/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) /滿足概率則給車編號加入循環(huán)隊列*num+=1;*rear+=1;if(*rear=MAX+1)*rear=1; /如果rear從1達(dá)到max后再前進(jìn)一個位置就自動到1; Queue*rear-1=*num; /循環(huán)隊列解決假溢出;從隊列開始位置入隊一個編號;用到了參數(shù)概率 rnd (采樣時間dt 到車率g確定概

9、率范圍)循環(huán)隊列 Queue尾指針 rear 將新元素插入隊中容量 MAX給車編號 nump編號入隊后一次判斷油泵是否可以服務(wù);判斷隊列中是否有車;有車就將排在隊首的元素給空閑的泵服務(wù);p判斷查詢一次都要在時間上減去dt;以FPi的大小可以參照還有多長時間可以加完油;/*-模擬油泵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和隊

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時間報告一次p經(jīng)過前兩個函數(shù)運行后,可以得到插入隊列的編號(即排隊的車數(shù))p被服務(wù)的車的編號p加油泵1、2的工作狀態(tài)pfront比rear小 說明rear插入的多 front服務(wù)的少 從front開始遍歷到rear找到正在排隊的編號/*-模擬結(jié)果的輸出-*/print_out(Queue,MAX,front,rear,FP,aut)int Queue ,MAX,rear,front,FP ,aut ;int k; k=front; while(k!=rear) /兩臺都在忙且rear插入的比服務(wù)front的多 k=k+1;if(k=MAX+1)k=1;printf(Queue(

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論