-2

ファーストフード店を 3 時間以上シミュレートしています。3 時間は、600 秒ごとの 18 のインターバルに分割されます。各間隔は、それらの 600 秒間に何が起こったかに関する統計を出力します。

私の元の構造は次のようなものでした:

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

int interval(double customerArrive)

...
...

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

この 2 つの方法 (for ループ) は、時間を連続関数にすることができないため、機能しません。t=599 の最初の間隔でイベントが発生した場合 (顧客の到着など)、2 番目の間隔が始まるとすべてが消去されるため、このイベントは t=601 には存在しません。

これにアプローチしたい方法は、while ループを作成して時間を連続関数にすることです。コードをこれに「変換」する方法がわかりません。

こんな感じでしょうか。

while (t<10800)
{
...
}

このwhileループが終了するために必要な条件がわかりません。

必要に応じて、ここに私の完全なコードがあります: http://pastebin.com/3ec0Ks9u

4

2 に答える 2

0

「そうかもしれません」、私はあなたの問題を理解しました。何かを監視したい場合(あなたの言葉での継続的な機能)、スレッドとタイマーの助けを借りる必要がありますが、これは今のところあなたの範囲外です。何かを使用したい場合基本、質問がよくわからないので、再構成してください。

于 2012-11-15T16:53:19.200 に答える
0

[…] 2 番目の間隔が始まると、すべてが消去されます。

これは 2 つのforループによるものではなく、外側のforループが関数を呼び出し、その関数内のものを再初期化するという事実によるものです。したがって、その外側のforループ関数に移動しますinterval(おそらく、途中でメソッド名を変更する必要があります)。その方法であなたは書くことができます

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

これらのループは何も消去せず、単一のカウンターの値iとから値を計算する必要はありません。t

時間を連続関数にする

明らかに、時間はこれらのステップで離散化されます。あなたのwhileループのように。個別の時間ステップが必要ない場合は、コードを根本的に変更する必要があります。たとえば、顧客が前に到着した時間を計算し、一定の増分ではなくイベントからイベントへとステップします。

于 2012-11-16T08:50:00.270 に答える