- 締切済み
C++で乱数発生
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#2のプログラムを修正させていただきました。 ---------------------------------------------------------------- //using namespace std の時、以下のヘッダは省略できる #include <cstdio> #include <cstdlib> #include <ctime> using namespace std; int main(void){ int cnt[101] = { 0 }; int i=0, v; srand(time(0)); while(i < 100000) { v = 101.0 * rand()/ RAND_MAX; if(v == 101) continue; cnt[v]++; i++; } for (i = 0; i <= 100; i++) { printf("%3.2f\t%5d\n", i/100.0, cnt[i]); } }
- mac_res
- ベストアンサー率36% (568/1571)
何でプログラムの知識も本も無くってC++で乱数の度数表を作る方法を知りたいのでしょう。そのような人に詳しく説明する方法は無いので、0.00以上1.00未満のプログラム例を書きますから、自分で本を買って解読しなさい。 -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- #include <iostream> #include <time.h> int main(void) { double x; int cnt[100]; int i; srand(time(0)); for (i = 0; i < 100; i++) { cnt[i]= 0; } for (i = 0; i < 100000; i++) { x = (double) rand()/ RAND_MAX; cnt[(int)(x * 100)]++; } for (i = 0; i < 100; i++) { x = (double) i / 100.0; printf("%3.2f\t%5d\n",x,cnt[i]); } }
- acombun
- ベストアンサー率16% (16/99)
Rnd関数を使って0以上1未満の乱数を発生させてそれに1000かけて整数にして配列でカウントを取れば良いでしょう。 ここにプログラムを書くこともできますが、プログラミングの知識がないのでは説明し切れません。
関連するQ&A
- Excelで乱数発生のアルゴリズム
今、Excelでの乱数発生に関して勉強しているものです。 プログラミングの本や、乱数の本を読んで線形合同法という漸化式が乱数発生のときに使用されているというところまで調べることはできたのですが、Excelでのアルゴリズムについてはあまり調べられなくて困っています。 知っている方がいらっしゃいましたら教えてください。 よろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
- 乱数を発生させるプログラムを教えてください。
タイトルのままなのですが、1から100までの乱数を発生させるプログラムを知りたいです。 乱数をxとおくと、xの値は、0<x<1の範囲内でお願いします。 C言語で、rand関数を用いて、どうかお願いします。
- ベストアンサー
- C・C++・C#
- 正規乱数の発生法(Inversion法)について
正規乱数についてですが、様々な発生方法があるかと思います。 私は、Box-Muller法と中心極限定理の二つの方法しか知らないのですが、 いろいろ調べるとInversion法というのがもっとも精度がいい?との意見もあるようでした。 どのようなものなのか本やネットで、結構探したのですが見つけられませんでした。 もしどなたかご存知でしたら、 理論面(数学)の参考文献(本または論文)またはHPと 実際のプログラミング(C++またはVB)が載っている参考文献またはHPを教えていただけないでしょうか?
- ベストアンサー
- C・C++・C#
- EXCEL 乱数発生の記録
A1~C1 に0~9の乱数を発生[=RANDBETWEEN(0,9)]させ Dの列に再計算[F9を押す]の回数、E~Gの列に出た乱数の値を入れたいのですが、関数で可能でしょうか。 D E F G 1 1 2 5 7・・・1回目は 2,5,7が出た。 2 2 8 1 0・・・2回目は 8,1,0が出た。 3 3 9 4 4・・・3回目は 9,4,4が出た。 4 4 0 3 2・・・4回目は 0,3,2が出た。 このように再計算を行うと下の行に追加していきたいのですが、可能でしょうか。 宜しくお願いします。
- ベストアンサー
- オフィス系ソフト
- 乱数発生
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) {int y, m, l; srand( (unsigned)time( NULL ) ); y=rand() % 2500 + 1600; m=rand() % 12 + 1; l=rand() % 29 + 1; printf("西暦%d年%d月%d日",y,m,l); return(0); }今回は乱数発生でランダムにだされた西暦年月日をつくりましたが、y=rand() % 2500 + 1600; というのがありこれはyという乱数が2500以下1600以上という意味なのですがなぜかプログラムを実行しても3000いくつとか4000いくつなんてのもでてきます。m=rand() % 12 + 1;はちゃんと12以下1以上でできるのですがなぜですか?本当にわかりません。是非だれか教えてください。
- ベストアンサー
- C・C++・C#
- C#の乱数取得について
C#の乱数取得について カテ違いですが、C#のカテゴリがないのでここで質問させていただきます。 C#の乱数取得について調べましたところ以下のプログラムサンプルを見つけました。 1| int seed = Environment.TickCount; 2| string s = ""; 3| 4| for (int i = 0; i < 10; i++){ 5| Random r = new Random(seed++); 6| for (int j = 0; j < 5; j++){ 7| s += r.Next(50).ToString("00") + " "; 8| } 9| s += Environment.NewLine; 10| } 11| this.textBox1.Text = s; C#は勉強し始めたばかりで、まだまだ知識不足なのでこのプログラムが理解できません。 今の自分の知識で考えたことは、 1行目、int型のseedに、C#の乱数を生成するときにデフォルトで設定されるseed値を格納。 2行目、stringクラスのsを定義。 5行目、Random型(?)rにseedを設定 7行目、わかりません。。乱数を取得してることはわかるのですが。 9行目、sに保持。 11行目、GUIに表示。 どなたか、詳しく解説していただけると助かります。 よろしくおねがいします。
- ベストアンサー
- C・C++・C#
- 任意の標準偏差で正規分布の乱数を発生させたい
2次元の正規分布の乱数を発生させたいんですが、 調べたところ、 平均0、分散1の正規分布の乱数の発生方法アルゴリズムが以下のものになることがわかりました。 「Box-Maller法:区間(0,1)の2個の一様乱数x1,x2と2個の量y1,y2との間の変換 y1=sqrt(-2*ln(x1))*cos(2*Pi*x2) y2=sqrt(-2*ln(x1))*sin(2*Pi*x2)」 ここで、平均0、分散0.2の正規分布の乱数を発生させたいのですが、どうすればよいでしょうか? 単純にy1,y2に0.2を掛けるだけでもできますが、これは数学的に正しいのでしょうか?
- ベストアンサー
- 数学・算数