C++基本中の基本その9
※自分用メモ ※引用元「ローベルのC++入門講座」
擬似乱数「random number(s)」は<cstdlib>
をヘッダーにし rand()
という
関数で出せる。
#include <iostream> #include <cstdlib> using namespace std; int main(int i) { cout << rand() << endl; return 0; }
結果
41
for文
でいくつもの乱数を出すことが可能。
#include <iostream> #include <cstdlib> using namespace std; int main(int i) { for(i = 0; i < 5; i++) cout << rand() << endl; return 0; }
結果
41 18467 6334 26500 19169
範囲を定めたい場合は %
を使う
#include <iostream> #include <cstdlib> using namespace std; int main(int i) { for(i = 0; i < 5; i++) cout << 1 + (rand() % 6) << endl; return 0; }
結果
6 6 5 5 6
しかし擬似乱数はある初期値を元にしているため
初期値が一緒だと何回 rand()
を実行しても同じ
乱数が出てくる。
そこで使うのが srand()
と「乱数種」(random seed)を使う。
#include <iostream> #include <cstdlib> using namespace std; int main(int i) { srand(98); cout << rand() << endl; return 0; }
結果
358
Random seed
を違う値にすることによって初期値が変わり、
違うアウトプットになる。
※同じ値を入れてしまうと同じ結果が出る。
しかし毎回random seed
を変えるのは面倒なので初期値の値を
毎秒初期化することができる。
そこで<ctime>
というヘッダーとtime()
という関数を使います。
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main(int i) { srand(time(NULL)); for(i = 0; i < 5; i++) cout << 1 + (rand() % 6) << endl; return 0; }
結果
2 6 2 3 1
同じコードを実行しても違う結果になる。