ページ 11

数当てゲームについて

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
ご回答ありがとうございました。無事わかりました。
これからも、プログラミング頑張りたいと思います。