数当てゲームについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
junjunjun

数当てゲームについて

#1

投稿記事 by junjunjun » 10年前

書籍「明解 C言語 中級編」をしている者です。
自由課題1-4でつまづいたので質問させて頂きました。
課題は「当てさせる数を-999以上999以下の整数とした数当てゲームを作成せよ。プレーヤーが入力できる最大の回数が、どのくらいであれば適当であるのかも考察すること。」です。
-999以上999以下の乱数の出し方がわかりません。
アドバイス(ヒント)を宜しくお願いします。

hide

Re: 数当てゲームについて

#2

投稿記事 by hide » 10年前

ではあなたはどんな乱数なら出すことができますか?

junjunjun

Re: 数当てゲームについて

#3

投稿記事 by junjunjun » 10年前

0以上の乱数なら出せます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 数当てゲームについて

#4

投稿記事 by softya(ソフト屋) » 10年前

相対的に数値をずらせば良いだけですよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
Nao
記事: 24
登録日時: 11年前

Re: 数当てゲームについて

#5

投稿記事 by Nao » 10年前

junjunjun さんが書きました:0以上の乱数なら出せます。
0から999までの乱数は出せる、と解釈した上で書かせていただきます。


負の数の乱数を出すためには、乱数から一定以上の数を引くか、負の数でかけてやればいいわけです。
しかし、負の数でかけると今度正の数の乱数が出てこなくなります。
(乱数に負の数があれば別ですが、ならこんな問題は起きないわけで。)
なので、0から999までの乱数が出るとして、乱数が0の時に-999になるように数を引けばいいのです。(ほとんど答えになってますね...)
まあ、何事も平穏に。

box
記事: 2002
登録日時: 13年前

Re: 数当てゲームについて

#6

投稿記事 by box » 10年前

junjunjun さんが書きました: -999以上999以下の乱数の出し方がわかりません。
いちばん簡単である(と思われる)方法は、
「0~1998の範囲の乱数を発生させて、999を引く」ことでありましょう。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

junjunjun

Re: 数当てゲームについて

#7

投稿記事 by junjunjun » 10年前

コード作成をしてみました。

コード:


#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;
}
自分で作った分では無事コンパイル出来たのですが、どうでしょうか?アドバイスお願いします。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 数当てゲームについて

#8

投稿記事 by みけCAT » 10年前

正解の変数名retry、入力を入れる変数名aaaというのはわかりにくいと思います。
正解できずに20回入力したとき、何もメッセージが出ずにゲームが終わってしまうのはユーザーに不親切だと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 数当てゲームについて

#9

投稿記事 by みけCAT » 10年前

書き直してみました。

コード:

#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;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
Nao
記事: 24
登録日時: 11年前

Re: 数当てゲームについて

#10

投稿記事 by Nao » 10年前

junjunjun さんが書きました:

コード:

		if(aaa==retry) printf("正解です!!当たり!\n");
		if(aaa==retry)break;
今回は問題ありませんが、コードの可読性を考えるとこのような記述は控えて、(もちろん、可読性以外の問題もありますが。)
みけCATさんの書いた以下のようなコードに直しておきましょう。
みけCAT さんが書きました:

コード:

		if(input==answer) {
			printf("正解です!!当たり!\n");
			break;
		} 
まあ、何事も平穏に。

junjunjun

Re: 数当てゲームについて

#11

投稿記事 by junjunjun » 10年前

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

閉鎖

“C言語何でも質問掲示板” へ戻る