• ベストアンサー

乱数を更新するキーはありますか。

W7, 0ffice2003 です。 ただいま、小倉百人一首の練習プログラムをつくっています。EXcelを使うつもりですが、int(rand()*100)で1~100の乱数を作って歌番号にあわせます。このとき、次の一首に進むのに 新たな乱数を作る必要がありますが、キーを操作する程度で乱数を変更する方法がありましたら 教えてください。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8018/17137)
回答No.1

F9を押すというのでOK?

sinko-id
質問者

お礼

早速のご教示多謝。お示しの方法でOK。ありがとうございました。

その他の回答 (1)

回答No.2

Randomize 関数を使うと乱数ジェネレータを初期化 (乱数系列を再設定) できる。 https://msdn.microsoft.com/ja-jp/library/8zedbtdt(v=vs.90).aspx

sinko-id
質問者

お礼

ありがとうございました。

関連するQ&A

  • プログラムの進行を制御したい

    W7,OFFICE2003ユーザーです。 百人一首の練習プログラムをエクセルで作成しております。=int(rand()*100+1)で乱数を発生し、= vlookup(この乱数セル、第1列歌番号の百人一首一覧表、上や下の句の列番号)で 検索・表示します。ここまではできましたが、これだと同じ乱数では、同時に上・下の句が表示されてしまい、暗記の練習になりません。そこで、何か適宜のキーを押して暗記の状況を確認してから次の句の処理を開始するよう、随意の時間、時間的な間合いをとりたいのです。昔フォートランの時分には1から100まで足し算させることで間を取っていたものですが、エクセルでは分かりません。なにか、キーを押すレベルの解決法を教えてください。なお、次の乱数発生はF9きーで行っております。 よろしくお願いします。

  • 乱数の取得

    キー操作をした時に複数の乱数を習得させようと思っています。 【キ─操作関数】  int num[3] = {11, 22, 33}; ←初期化のため数字は適当です。  srand((unsigned int)time(NULL))  for(int i=0; i<=3; i++)  {   num[i] = rand % 10;  } 上記のプログラムを書いています。 num[0]、num[1]、num[2]にそれぞれ0~9の乱数が入ると思うのですが、 num[0]にしか乱数が入りません。 num[1]、num[2]には同じ数字(恐らくtimeで取得した数字?)が入っています。 何かお気づきの点がありましたらアドバイスお願い致します。

  • VBAで百人一首練習プログラムを作りたいです。

    当方EXCEL2007ユーザです。同じような内容で最近2度目の投稿ですがよろしくお願いします。 ◇やったこと 1 小倉百人一首の一番から100番まで、歌番号・上の句・中の句・下の句・詠者の5項目(5列)、項目名を含めて 101行の表(元表と名前を付けました。)をB2:F101の範囲で作成しました。 2 練習プログラムだから1番歌から100番歌までランダムに出題する。   INT(RAND()*100)で乱数を発生させました。 3 VLOOKUPファイル関数で乱数番号に対応する歌を、その元表のとなりセルに上記5項目表示させました。 ◇したいこと 4 練習プログラムだから、上の句だけ表示して、「中の句は?」という動作を加えるまで中の句を示さず、なにか動作を加えてから中の句を表示する。 5 以下、同様に動作を加え(理解を確かめて)一首を完成する 6 一首が終わったら次の歌番号をランダムに選んで、まずは上の句を問題として提起させる。 7 疲れたら止める動作を与える 8 練習成果を正解割合で示す。  以上の通りですが、VBAで、意味は分からないなりにデッドインプットしますから「どこへ」、「何を」打ち込むのか、教えてください。よろしくお願いします。

  • Perlの乱数について

    RedHat Linux ES2.1のperl v5.6.1にて初めてのプログラムを書いているものです。 Oracle9iに格納するDATE型のデータを大量に乱数にて作成しようとしているのですが、うまくいきません。 作成しようとしているのは2004年度か2005年度のある日付です(30日まで)。 例) 04-01-30 05-07-12 04-09-28 04-12-11 質問1.下のプログラムだと、年度が00,01,02,03,04,05の値をとり得てしまう。これを04か05に限定するにはどうすればよいか。 質問2.月・日が1桁の場合は0を頭につけたい。下のプログラムでは05-12-1となったり04-5-30となったりしてしまう。 #!/usr/bin/perl $a = 1; while($a < 100000){ $year_rand = int(rand(5)); $month_rand = int(rand(12))+1; $day_rand = int(rand(30))+1; print "0$year_rand-"; print "$month_rand-"; print "$day_rand,"; print "\n"; $a = $a+1; } 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • 乱数について

    乱数の分布を見るために以下のようなプログラムを書きました。 #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int i,imax, S[RAND_MAX], r; double x,y; FILE *output1; output1=fopen("random2.data","w"); imax=100000; for(i=0;i<=imax;i++){ r = rand(); S[r] += 1; } for(i=0;i<=RAND_MAX;i++){ fprintf(output1,"%d %d \n",i,S[i]); } return 0; } するとコンパイルできて実行もできるのですが、なぜか乱数が30000を 超えるくらいのところでおかしな値になりました。 原因がわからないのでどなたか教えてください。

  • 乱数発生

    #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以上でできるのですがなぜですか?本当にわかりません。是非だれか教えてください。

  • 標準正規分布の乱数

    RAND()関数は ((double)rand() / (1.0 + RAND_MAX))と定義します。 中心極限定理により、一様乱数を足し合わせると正規分布に近づくことから、 x = 分散 * (Σ[1~12]RAND() - 6) + 平均 で正規乱数が作れる。標準正規分布は分散1、平均0なのでその乱数は x = Σ[1~12]RAND() - 6 ですよね。この乱数を例えば100個羅列するにはどうしたらいいのでしょうか? もし間違ってたら指摘してください。 参考文献「Cによるシミュレーションプログラム 石川宏」 #include <stdio.h> #include <stdlib.h> #define RAND() ((double)rand() / (1.0 + RAND_MAX)) #define NUMBER 10000 /* 発生させる乱数の数 */ main(void) { int j; double u, x; srand(5); for (j = 0; j <= 11; j++) { u = u + RAND(); } x = u - 6.0; }

  • 乱数について

    C の入門書を1冊読み終え、簡単なプログラムを作成しようとしているのですが、 早速分からないことが出たので教えて頂ければと思います。 --------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int num; int i = 0; while( i < 4 ){ srand(time(NULL)); num = rand()%100; printf("%d\n", num); i++; } return 0; } --------------------------------------------- 上記を実行したのですが、秒数を乱数の種としているため4回とも同じ値を取得してしまいます。 より高精度に秒数を取得することは可能でしょうか? もしくはこのようなかたちで4回ともに異なる数を得ることが出来る方法がありましたら教えて頂きたいと思います。

  • 0 からa-1 までの整数の乱数をn 個発生させ、発生した整数のヒスト

    0 からa-1 までの整数の乱数をn 個発生させ、発生した整数のヒストグラムをプリントアウトしたいです.また,a とnはコマンドラインから引き渡します 0 からa-1 までの整数を発生する乱数の書き方は (int)((double)rand()/((double)RAND_MAX+1) *a); プログラムをRandHist としたとき RnadHist 10 1000 と入力すれば 0 982 1 1035 2 956 3 1102 ・ ・ 9 971 などと。出力されるようなプログラムを作る問題ですが,a とn は、任意に変えられるように したいです. どなたか教えてください.

  • 乱数について・・・

    (1)1,2,3,4の整数のどれかを乱数で発生させる方法 (2)0~1までの実数を発生させる方法 を教えていただけないでしょうか?(a.outするたびに値が変わってほしいです。) ※一応、下のプログラムにあるように実行するたびに違う乱数がanswerに入るようにはできたのですが、いまいち理解できていません。軽い説明や参考URLなども教えてもらえたら助かります。 よろしくお願いします。 #include<time.h> int main() { unsigned short time_a,time_b; unsigned long answer; time_a = time(NULL); time_b = time_a; srand(time_b); answer = rand(); printf("答えは = %d\n",answer); }