0

私は C でコンピューター シミュレーションをコーディングしたいと考えています。以下のベストプラクティスについての提案が必要です。

コンピューター シミュレーションは、多くのパラメーターに基づいています。これらのパラメータの値を指定する最良の方法は何ですか? 変数として指定するか、#defineマクロを使用して値を設定する必要があります。

たとえば、私はできる

int numpeople = 100;

また、

#define numpeople 100

どちらがより良い習慣ですか、それとも問題ではありませんか? シミュレーション内の特定の配列の長さは、パラメーターによって異なります。変数アプローチを使用してパラメーター値を指定すると、それを使用して長さ配列を指定することはできません。

例えば、

// This is invalid.
int numpeople = 10;
int ids[numpeople];

この場合、私には選択の余地がなく、使用する必要があると思いますか?

#define numpeople 100
int ids[numpeople];

または別のより良いアプローチがあります。

最後に、どの方法でパラメーターを定義するにしても、パラメーターの可能な値を 1 か所にリストし、可能な値ごとにシミュレーションを実行したいと思います。つまり、 は parameter1値 100、200、300 を取ることができ、値5、25、50 を取ることができるとしparameter2ます。

parameter1最初に、値 100 を取り、値 5 を取るシミュレーションparameter2を実行したいと思います。次に、parameter1値 100 をparameter2取り、値 25 を取る...など、これらの値で形成できる 9 つの組み合わせすべてについて実行します。 . シミュレーションが完了するたびに手動で組み合わせを変更する必要がないようにしたいと思います。すべての組み合わせを何らかの形でリストし (この組み合わせに使用するデータ構造の推奨事項を求めています)、コードを一度に 1 つずつ読み取る方法はありますか。これが、実行時にパラメーターの値を設定する方法です。

これを行う方法はおそらく 1 つではありません。しかし、あなたが良いと思う方法でこれを行うことができれば幸いです。

さらに説明が必要な場合はお知らせください。

これを読んでくれてありがとう。

4

2 に答える 2

3

シミュレーションが多くの値でパラメーター化されている場合は、それらを単一の構造体としてシミュレーションのセットアップに渡すことを検討してください。そのようです:

struct Params {
  int num_people;
  int simulation_steps;
  int step_size;
  // ...
}

void your_simulation(const &Params params) {
  int people_ids[params.num_people];
  // ...
}

そうすれば、ヘッダーやメインファイルなどで複数の実行を設定できます。

Params small_sim = {
  .num_people = 10,
  .simulation_steps = 5,
  .step_size = 30,
};

Params big_sim = {
  .num_people = 100,
  .simulation_steps = 5000,
  .step_size = 3,
};

main() {

  if (...) {
    your_simulation(&small_sim);
  } else {
    your_simulation(&big_sim);
  }
}

これにより、単体テストが容易になります。これは、予想される既知の出力を使用して固定シミュレーションを設定できるためです。また、後でプログラムを拡張して、入力ファイル、コマンド ライン、またはその他の場所からパラメーターを取り込むこともできます。

于 2013-08-31T22:50:01.190 に答える
0

パラメータ値をコマンド ライン引数としてプログラムに渡すこともできます。

たとえば、

于 2013-09-01T01:58:29.713 に答える