25, 38, 123, 84, 29, 1, 890, ...
確かにこれらの数には関連が無いように見える。しかし、2回目に同じプログラム を実行しても結果はまったく同じである。何回実行しても同じ結果しか得られない ならば、ゲームに使う事は出来ない。(あるステージでは、いつでも同じ所からしか 敵機があらわれないシューティングゲームなど興ざめである。)
しかし、もしこれらの一連の数の最初の項をずらしてしまえば、問題はなくなる。 従って、どれだけずらすかという事が重要なのだが、通常は年月日と時刻を使って 最初の項を決めることが多い。
C 言語の標準ライブラリには不十分であるが乱数を発生させる関数が用意されている。
乱数の初項を決めるために用いられる srand
と具体的な乱数を得るために
使う rand
がそれである。以下に引数と返り値を掲げておく。
int seed; int srand(seed); /* 関数 srand() の引数は整数、返り値も整数 */ int rand(); /* 関数 rand() の引数はなし、返り値は整数 */ |
整数変数 seed
に、先に述べたような日時から計算した整数を代入し、
srand
を一度だけ呼び出せば、後は繰返し rand()
を実行する事で
相互に無関係な乱数を得られる。
簡単な例 #include <stdio.h> #include <stdlib.h> main() { int i, seed, random; seed = 2; srand(seed); for (i=1; i<10; i++){ random = rand(); printf("random is %d\n", random); } } |
この例では、簡単のために seed
には定数 2 を代入した。
注意
srand(),rand()
関数を使いたい場合には、プログラムの冒頭に
#include <stdlib.h>
を書かなければならない。