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 

同じコードを実行しても違う結果になる。