C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で乱数を生成するプログラムの書き方【srand・rand関数の使い方を解説】

C++を使って乱数を生成する方法を解説します。ここでは、0から指定した値までの範囲で乱数を生成します(このプログラムでは最大値を100に設定しています)。

srand()関数とは

乱数を生成するために使用するのがsrand()関数です。この関数はC標準ライブラリに含まれており、void srand(unsigned int seed)として宣言され、rand()関数が使用する乱数生成器にシード(種)を設定する役割を持ちます。

srand()の宣言は以下のとおりです。

void srand(unsigned int seed)

この関数は「シード(seed)」と呼ばれる引数を1つ受け取ります。シードは、疑似乱数生成アルゴリズムで使用される整数値です。戻り値はありません。

rand()関数で乱数を取得する

実際に乱数を取得するには、rand()関数を使用します。0から最大値までの範囲の数値を得るには、剰余演算子(%)を使って余りを求めます。例えば「rand() % 100」とすれば、0〜99の範囲の整数が得られます。

また、シード値にはtime(0)関数の戻り値をsrand()に渡します。time(0)は現在時刻を秒単位で返すため、プログラムを実行するたびに異なるシードが設定され、毎回異なる乱数列を得ることができます。

サンプルコード

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;

int main() {
   int max;
   max = 100; // 乱数を生成する上限値を設定
   srand(time(0));
   cout << "The random number is: " << rand() % max;
   return 0;
}

実行結果

実行するたびに異なる値が出力されます。

出力例1

The random number is: 51

出力例2

The random number is: 29

出力例3

The random number is: 47

補足:より高品質な乱数が必要な場合

srand()とrand()は手軽に使える一方、乱数の品質や分布の偏りに課題があります。C++11以降では、<random>ヘッダのstd::mt19937(メルセンヌ・ツイスター)やstd::uniform_int_distributionを使うことで、より高品質で偏りの少ない乱数を生成できます。簡単な用途ではrand()で十分ですが、シミュレーションやゲームなど本格的な乱数が必要な場面では<random>ライブラリの利用を検討するとよいでしょう。

  1. 数値を逆順に並べ替えるC++プログラムの書き方と解説

    数値の反転とは、その桁の数字を逆の順序に並べ替えて格納することを指します。 例えば、元の数値が6529である場合、出力として9256が表示されます。 以下に、数値を反転させるC++プログラムの例を示します。 サンプルプログラム #include <iostream> using namespace std; int main() { int num = 63972, rev = 0; while(num > 0) { rev = rev*10 + num%10; num = num/10; } cout<

  2. C++で掛け算の九九(乗算表)を生成するプログラム

    掛け算表(乗算表)は、任意の数に対する掛け算の結果を一覧にまとめたもので、十進法における初等算術の基礎を学ぶために広く使われています。掛け算表は通常、1から10までの積を各行に表示します。例として、4の掛け算表は以下のようになります。4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 4 * 5 = 20 4 * 6 = 24 4 * 7 = 28 4 * 8 = 32 4 * 9 = 36 4 * 10 = 40指定した数の掛け算表を生成するC++プログラムの例は以下の通りです。プログラム例#include <iostream> using nam