ページ 1 / 1
数当てゲームについて
Posted: 2013年7月30日(火) 20:20
by junjunjun
書籍「明解 C言語 中級編」をしている者です。
自由課題1-4でつまづいたので質問させて頂きました。
課題は「当てさせる数を-999以上999以下の整数とした数当てゲームを作成せよ。プレーヤーが入力できる最大の回数が、どのくらいであれば適当であるのかも考察すること。」です。
-999以上999以下の乱数の出し方がわかりません。
アドバイス(ヒント)を宜しくお願いします。
Re: 数当てゲームについて
Posted: 2013年7月30日(火) 20:25
by hide
ではあなたはどんな乱数なら出すことができますか?
Re: 数当てゲームについて
Posted: 2013年7月30日(火) 21:05
by junjunjun
0以上の乱数なら出せます。
Re: 数当てゲームについて
Posted: 2013年7月30日(火) 21:38
by softya(ソフト屋)
相対的に数値をずらせば良いだけですよ。
Re: 数当てゲームについて
Posted: 2013年7月30日(火) 21:45
by Nao
junjunjun さんが書きました:0以上の乱数なら出せます。
0から999までの乱数は出せる、と解釈した上で書かせていただきます。
負の数の乱数を出すためには、乱数から一定以上の数を引くか、負の数でかけてやればいいわけです。
しかし、負の数でかけると今度正の数の乱数が出てこなくなります。
(乱数に負の数があれば別ですが、ならこんな問題は起きないわけで。)
なので、0から999までの乱数が出るとして、乱数が0の時に-999になるように数を引けばいいのです。(ほとんど答えになってますね...)
Re: 数当てゲームについて
Posted: 2013年7月30日(火) 21:50
by box
junjunjun さんが書きました:
-999以上999以下の乱数の出し方がわかりません。
いちばん簡単である(と思われる)方法は、
「0~1998の範囲の乱数を発生させて、999を引く」ことでありましょう。
Re: 数当てゲームについて
Posted: 2013年8月03日(土) 20:40
by junjunjun
コード作成をしてみました。
コード:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(void)
{
int retry; //乱数を入れる変数
int aaa; //入力値を入れる変数
int count=0; //カウント変数
srand(time(NULL));
retry=(rand()%1999)-999;
while(1){
if(count>=20) break;
printf("整数を入力してください。");scanf("%d",&aaa);
if(aaa==retry) printf("正解です!!当たり!\n");
else if(aaa>retry) printf("もっと小さいです。\n");
else if(aaa<retry) printf("もっと大きいです。\n");
if(aaa==retry)break;
count++;
}
return 0;
}
自分で作った分では無事コンパイル出来たのですが、どうでしょうか?アドバイスお願いします。
Re: 数当てゲームについて
Posted: 2013年8月03日(土) 20:49
by みけCAT
正解の変数名retry、入力を入れる変数名aaaというのはわかりにくいと思います。
正解できずに20回入力したとき、何もメッセージが出ずにゲームが終わってしまうのはユーザーに不親切だと思います。
Re: 数当てゲームについて
Posted: 2013年8月03日(土) 20:55
by みけCAT
書き直してみました。
コード:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int answer; //乱数を入れる変数
int input; //入力値を入れる変数
int tryCount=0; //カウント変数
srand(time(NULL));
answer=(rand()%1999)-999;
while(1) {
printf("整数を入力してください。");
scanf("%d",&input);
if(input==answer) {
printf("正解です!!当たり!\n");
break;
} else if(input>answer) {
printf("もっと小さいです。\n");
} else {
printf("もっと大きいです。\n");
}
tryCount++;
if(tryCount>=20) {
printf("残念!失敗です。正解は%dでした。\n",answer);
break;
}
}
return 0;
}
Re: 数当てゲームについて
Posted: 2013年8月03日(土) 21:11
by Nao
junjunjun さんが書きました:
コード:
if(aaa==retry) printf("正解です!!当たり!\n");
if(aaa==retry)break;
今回は問題ありませんが、コードの可読性を考えるとこのような記述は控えて、(もちろん、可読性以外の問題もありますが。)
みけCATさんの書いた以下のようなコードに直しておきましょう。
みけCAT さんが書きました:
コード:
if(input==answer) {
printf("正解です!!当たり!\n");
break;
}
Re: 数当てゲームについて
Posted: 2013年8月05日(月) 20:53
by junjunjun
ご回答ありがとうございました。無事わかりました。
これからも、プログラミング頑張りたいと思います。