• 締切済み

C++で乱数発生

C++で[0,1]区間を100等分した値、つまり0.00以上始まり1.00以下の乱数を発生させ、値ごとに何個現れたかをカウントするには、どうしたらよいのか教えて下さい。私はプログラミングの知識や本等一切ありません。できるだけ詳しく教えてほしいです。

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#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)
回答No.2

何でプログラムの知識も本も無くって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)
回答No.1

Rnd関数を使って0以上1未満の乱数を発生させてそれに1000かけて整数にして配列でカウントを取れば良いでしょう。 ここにプログラムを書くこともできますが、プログラミングの知識がないのでは説明し切れません。

関連するQ&A

  • Excelで乱数発生のアルゴリズム

    今、Excelでの乱数発生に関して勉強しているものです。 プログラミングの本や、乱数の本を読んで線形合同法という漸化式が乱数発生のときに使用されているというところまで調べることはできたのですが、Excelでのアルゴリズムについてはあまり調べられなくて困っています。 知っている方がいらっしゃいましたら教えてください。 よろしくお願いします。

  • 乱数の最大値

    C言語で0~Nまでの乱数を発生させる場合、 srand((unsigned) time(NULL)); rand()%N; とやりますよね。 このやり方だと、発生する乱数はRAND_MAX以下しかできません。 RAND_MAX以上の値を発生させるにはどうすればいいのでしょうか?

  • 乱数を発生させるプログラムを教えてください。

    タイトルのままなのですが、1から100までの乱数を発生させるプログラムを知りたいです。 乱数をxとおくと、xの値は、0<x<1の範囲内でお願いします。 C言語で、rand関数を用いて、どうかお願いします。

  • 乱数について

    こんばんは。 何度も申し訳ありませんが、今回は乱数について教えてください。 LinuxでCを勉強しているんですが、 randで乱数を発生させることはできたんですが、 そのプログラムを何度実行させても 出てきた乱数は同じ値なんです。 プログラム内で例えば10こ乱数を発生させたとすると 違うものが出ます。 しかし、もう一度そのプログラムをはしらせると 前回と全く同じ並びで同じ数が出るのはどうしてでしょうか? 言ってる意味わかっていただけましたでしょうか? 宜しくお願いします。

  • 正規乱数の発生法(Inversion法)について

    正規乱数についてですが、様々な発生方法があるかと思います。 私は、Box-Muller法と中心極限定理の二つの方法しか知らないのですが、 いろいろ調べるとInversion法というのがもっとも精度がいい?との意見もあるようでした。 どのようなものなのか本やネットで、結構探したのですが見つけられませんでした。 もしどなたかご存知でしたら、 理論面(数学)の参考文献(本または論文)またはHPと 実際のプログラミング(C++またはVB)が載っている参考文献またはHPを教えていただけないでしょうか?

  • 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#の乱数取得について調べましたところ以下のプログラムサンプルを見つけました。 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に表示。 どなたか、詳しく解説していただけると助かります。 よろしくおねがいします。

  • 任意の標準偏差で正規分布の乱数を発生させたい

    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を掛けるだけでもできますが、これは数学的に正しいのでしょうか?

  • 重複乱数で処理終了

    java のプログラミングについて質問です。 乱数を発生させ それまでと同じ値が出たら 処理を終了させる。 というプログラムを考えています。 例えば乱数が 1,4,2,6,5,7,9,3,4,3,6,5,4,5,6,7,8,8,9,7,・・・ という順で出た場合 1,4,2,6,5,7,9,3 のみを【表示】させ、処理を終了するというものです。 重複したときに処理を終了する というプログラムが分からない状態です。 分かる方いらっしゃいましたら、ご教授願います。

    • ベストアンサー
    • Java

専門家に質問してみよう