2012-11-15 203 views
-2

我在三小時內模擬一家快餐店。三個小時分爲每個600秒的18個間隔。每個間隔輸出有關這600秒發生的事件的統計數據。如何將兩個(for循環)轉換爲(while循環)?

我原來的結構是這樣的:

int i; 
for (i=0; i<18; i++) 
    interval(customerArrive); 

int interval(double customerArrive) 

... 
... 

int t; 
for (t=0;t<600;t++) 

中的兩個(環路)不起作用,因爲它不允許時間是一個連續函數這種方法。如果在t = 599的第一個時間間隔內發生事件(如客戶到達),那麼這個事件將不會在t = 601存在,因爲隨着第二個時間間隔的開始,所有事件都將被清除。

我想要這樣做的方式是讓一個while循環讓時間成爲一個連續的函數,我只是不知道如何將我的代碼「轉換」爲此。

會是這樣的嗎?

while (t<10800) 
{ 
... 
} 

我不確定這個while循環退出時需要什麼條件。

如果有必要,這是我的全碼:http://pastebin.com/3ec0Ks9u

+0

關於while()循環何時退出的條件,您已經確定(t <10800)。關於何時啓動客戶到達,單詞[* modulus *](http://www.cprogramming.com/tutorial/modulus.html)對您來說意味着什麼? – WhozCraig

+0

在你的參考文件中查找除法和模量。 – pmg

+0

我對模量函數有點熟悉。我在程序中用了幾次來產生隨機數。通常,%b是a/b的其餘部分。 – EngGenie

回答

0

「可能是」,我理解你的問題。如果你想要監視的東西(你的話連續函數),u需要採取線程的幫助和定時器,現在已經超出了你的範圍。如果你想使用一些基本的東西,這個問題不是很好理解,請重新構造它。

0

[...]隨着第二個區間的開始,一切都被刪除。

這不是由於兩個for循環,而是歸因於外for循環調用的函數的事實,而你在該函數初始化的東西。因此,將外部for循環轉換爲函數interval(可能會隨着方式名稱不再適合而改變方法名稱)。在這種方法中,你可以寫

int i, t; 
… // initialize stuff 
for (i=0; i<18; i++) { 
    for (t=0;t<600;t++) { 
    … // do stuff 
    } 
} 

這些循環不會刪除任何東西,你會不會有一些單一計數器計算的it值。

讓時間成爲一個連續函數

顯然,時間依然會在這些步驟離散。就像你在while循環中那樣。如果你不想離散的時間步驟,你必須從根本上改變你的代碼,例如通過計算客戶到達前的時間,然後逐步從事件到事件,而不是以固定增量進行。