【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.21230

乱数表示について...
投稿者---海(2005/06/03 16:46:16)


初めまして、C言語の初心者です。
分からない事が出てきてしまい、みなさんの力を借りたく書き込みします。
今回乱数について聞きたいことがあるのですが、以下の様にプログラムを組んで乱数発生をしています。


#include <time.h> /* for clock */
#include <stdlib.h> /* for srand,rand */


int main(void){
const int U = 10;
int seed;
int n;

seed = (int)(clock() % 65535);
srand(seed);
n = rand()% U;

これらの形から、一回の実行で複数の乱数を発生させるためにはどのようにすればいいのでしょうか?(><;)
色々とやってみてもエラーばかり起きてしまいます。。
初心者なので簡単なことが原因かもしれません。よろしくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:乱数表示について... 21231 επιστημη 2005/06/03 16:55:36


No.21231

Re:乱数表示について...
投稿者---επιστημη(2005/06/03 16:55:36)


>これらの形から、一回の実行で複数の乱数を発生させるためにはどのようにすればいいのでしょうか?(><;)

for ( i = 0; i < 欲しい数; ++i ) {
 n = rand() % U
 /* n を使ってなにかする */
}

>色々とやってみてもエラーばかり起きてしまいます。。

なにをしたらどんなエラーが出ますか?



この投稿にコメントする

削除パスワード

No.21232

Re:乱数表示について...
投稿者---海(2005/06/03 17:13:50)


>なにをしたらどんなエラーが出ますか?

プログラムの表示の仕方がまずかったです;;すみません。

int main(void){
const int U = 10; /* 乱数の上限値 */
int seed; /* 乱数の種 */
int n1;
int n2;

seed = (int)(clock() % 65535);
srand(seed);
n1 = rand()% U;
printf("%d", n1);

seed = (int)(clock() % 65535);
srand(seed);
n2 = rand()% U;
printf("%d", n2);

と、組んで実行すると乱数が2つとも同じ数になってしまうと言う意味でした;
大切な部分が欠けていました(><)誤解を生むような言い方ですみません;



この投稿にコメントする

削除パスワード

No.21233

Re:乱数表示について...
投稿者---επιστημη(2005/06/03 17:32:19)


> seed = (int)(clock() % 65535);
> srand(seed);

は最初に一回だけやるべし。何度も呼ぶべからず。



この投稿にコメントする

削除パスワード

No.21234

Re:乱数表示について...
投稿者---επιστημη(2005/06/03 17:37:10)


>と、組んで実行すると乱数が2つとも同じ数になってしまうと言う意味でした;
>大切な部分が欠けていました(><)誤解を生むような言い方ですみません;

え? じゃ、'エラーが多発'てのはウソ?

# '期待通りに動かないことをエラーという'はガセ。
# ウソつきになるので注意しましょう。



この投稿にコメントする

削除パスワード

No.21235

Re:乱数表示について...
投稿者---海(2005/06/03 20:50:30)


教えて頂いたとおりに実行しましたら、乱数で違うものは出来たのですが、殆どが2,3種類の数字しか表示できませんでした。
これは、仕方ないことなのでしょうか。。
エラーと言う言葉をきちんと動作しないということまで一括して言ってしまっていたので誤解を招いてしまいました、すみませんでした
それと、エラーは今までこのプログラムを作っててエラーが沢山起きてた、と言うことで、実際に乗せたプログラムでは実行は出来ていたのでエラーが多発と言う言葉は間違えでした。言葉足らずですみませんでした。
しかし、ご指導通りに実行しましたら、動きました。本当にありがとうございました。
それでは、失礼いたします


この投稿にコメントする

削除パスワード

No.21236

Re:乱数表示について...
投稿者---まきじ(2005/06/03 21:10:01)


>教えて頂いたとおりに実行しましたら、乱数で違うものは出来たのですが、殆どが2,3種類の数字しか表示できませんでした。

clock() ではなく、 time() を使えば良いと思います。


この投稿にコメントする

削除パスワード

No.21237

Re:乱数表示について...
投稿者---まきじ(2005/06/03 23:06:27)


clock() は、プロセス時間を返します。
つまり、プログラムが実行されてからの経過時間を返します。
よって、seed が設定されるまでの時間は、何回実行しても、
ほぼ同じ時間になるので、その様な現象になってしまいます。

time()関数、現在の時間を返しますので、実行する度に、
seed の値が変わり、よりランダムになります。


この投稿にコメントする

削除パスワード

No.21238

Re:乱数表示について...
投稿者---海(2005/06/04 00:22:23)


>clock() は、プロセス時間を返します。
>つまり、プログラムが実行されてからの経過時間を返します。
>よって、seed が設定されるまでの時間は、何回実行しても、
>ほぼ同じ時間になるので、その様な現象になってしまいます。
>
>time()関数、現在の時間を返しますので、実行する度に、
>seed の値が変わり、よりランダムになります。

まきじさん、ありがとうございます!
timeの関数の事を調べて実行してみようと思います!(^^*)
丁寧な解説ありがとうございました。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧