ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

C言語とC++言語コミュの疑似乱数でseedの数を入力させるプログラム

  • mixiチェック
  • このエントリーをはてなブックマークに追加
疑似乱数n回発生させてその最大値、最小値を表示するプログラムで、
疑似乱数のseedをプログラム上で入力させたいのですが、詰まってしまいました。

seedをどのようにすればプログラムができるのか教えてください、
よろしくお願いします。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define NUM 10
int main(void)
{
int seed,i,n,a[NUM];
int min,max;
min = RAND_MAX;
max = 0;
printf("疑似乱数のシードを入力してください>> %d\n",seed);
scanf("%d",&seed);
printf("疑似乱数を発生させる回数を入力してください>> %d\n",n);
scanf("%d",&n);
printf("\n");
srand((unsigned) time(NULL));

for(i=0;i<n;i++)
{
a[i] = rand();

}

printf("\n");

//最小値を求める//
for(i=0;i<n;i++)
{
if(a[i]<min)

min = a[i];
}


//最大値を求める//
for(i=0;i<n;i++)
{
if(a[i]>max)

max = a[i];
}
printf("最小値、最大値、RAND_MAX\n");
printf("%d、%d、%d",min,max,RAND_MAX);

return 0;
}

コメント(15)

質問
●printfで入力前の値を表示させているのは何故?
●srand((unsigned) time(NULL)); というコードの出典と、その意味をあなたの理解するところで説明せよ。
調べたのですが、srand()が十分理解できなくて質問させていただきました。
●printfで入力前の値を表示させたのは、表示させるのも課題の内容の1つなのと、先に定義をしないといけないのでは、という初心者の考えからです^^;
●srand((unsigned) time(NULL));は初めにシードの値を指定しない場合の疑似乱数を発生させたときに用いたコードです、そこを変更するのだと思っているのですが、うまくいかなかったので、とりあえずで上記のプログラムを張り付けしました^^;
>>[4]

どういう風にしたら、どういう風にうまくいかなかったの?
randが疑似乱数の関数という話で、なぜ疑似乱数かわかるだろうか?一度srand((unsi・・・をsrand(100)として、動作を確かめてみると良いかもしれない。
あと、未定義の値は時々誤動作の原因になったりするので、maxやminのように宣言時に適当に値を入れておいた方が良いよ。Cだけじゃなく。
少し編集を
してみたのですが、

srand((unsigned)time(NULL))→srand((unsigned)seed)
に変更したらビルドは問題ないのですが、実行したら以下のエラーが出ました。
Run-Time Check Failure #3 - The variable'seed'is being used without being initialized. (Press Retry to debug the application)
srand()を初期化しようと値を設定したらプログラム上で値が入力出来なくなりますし、適当な変数を置いても上記のエラーが発生しました。

間違っているところを指摘して正してくれると助かりますm(_ _)m
Press Retry to debug the applicationって言ってるんだから、Retry押してデバッグしたらいいんじゃないですか?
ソフトウェア作る上でデバッグは欠かせない作業ですから、その実習にもなるでしょうし…。

もちろん本当はThe variable'seed'is being used without being initializedと書かれていて何をしなければいけないかわからないって、いくら英語が苦手な私でも「うそ!?!?」って思いますけど。
いつどういう編集をしたのかが問題だね。

特に、"The variable'seed'is being used without being initialized." というのは(この程度の英文の意味は分かるよね?)、こういう親切なメッセージが出るとしたら srandのとこじゃなくてその前の(このままでは無意味な)printfのところだろうと思われ。

本当にsrand(seed) にしたら出るようになったのかしらん。
藤田さん、多分ねえ今まではそもそもビルドできなかったから、そんなの出なかったって事なんでしょう。

Tさん、おるのんさんの7の指摘、読んだ?
>>[12]

いや、このソースは別にコンパイルエラーは出ないし、gccでコンパイルして動かせば、まあそれなりに動くコードですよ。ほんと、srandの行だけ直せばあとはその前のprintfで未初期化のseedを使っちゃってるのがおかしいくらいで、あと一息、です。

たぶん Visual C++ の新しいバージョンで動かしてるんだと思いますが、うちは仕事の関係で古いのしか入れてないんでこんな親切なメッセージがいつ出るかというところは確認できてないんですけどね。

それはそれとして、初心者の場合、自分がどういう編集操作をしているのか理解していないことがよくあるのですよ。後ろで見ていると「おいおい、そこじゃないだろ」とか「言ってることとやってることが違うだろ」みたいな。だから、深呼吸して、自分が何をしているのか、もう一度しっかり把握しようよ、と (笑)
>>[9]

>間違っているところを指摘して正してくれると助かりますm(_ _)m

そういう質問者が一番厄介なんですよ。同じ過ちを全く無反省に繰り返す凶悪常習犯タイプとでもいうか、、

間違っているところを遠慮なく指摘させて貰うなら、自身がしていることと、いま起きている問題を冷静に見て、それを結び付けて考えようとしないその姿勢、問題への取り組み方が間違っている、と指摘させてもらいます。

みんなの助言を読んでないとは言わないけれど、冷静になって、しっかり理解しようとしてないですね。もっとこれを自分自身の問題、自分が行っていることが原因なのだと自覚を持って取り組んではいかがでしょうか?
そうですね、ありがとうございます^^

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

C言語とC++言語 更新情報

C言語とC++言語のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング