ボウリングのスコア手入れ計算プログラム

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

ボウリングのスコア手入れ計算プログラム

#1

投稿記事 by C言語入門者 » 14年前

私は今、ボウリングのスコア計算のプログラムを作ってるのですが、上手くいきません。ご指導お願いします。
内容は3フレームまでの計算結果で3フレーム目終了後に2フレーム目と3フレーム目の途中結果を表示するというプログラムです。ボウリングのルールであるストライクを連続で出した場合のスコア増減は設けず、ピンを倒した数を足していくプログラムです。
以下に自分で作ったプログラムを載せます。
2ゲーム目の結果表示の方法が上手くできません。アドバイスお願いします。あと、どこか修正点などがありましたらご指導お願いします。

コード:

#include <stdio.h>

int main(void)
{
	int	pin;		/*倒したピンの数*/
	int score;		/*得点*/
	int	flame;		/*フレーム数*/
	int kai;		/*回数*/
	int i;			
	
	for(flame=1;flame<=3;flame++){
		for(kai=1;kai<=2;kai++){
			printf("%dフレーム%d回目:",flame,kai);
			scanf("%d",&pin);
			if(pin == 10){
				score += pin;
				i++;
				break;				
			}
			if(pin >= 11){
				printf("正式な数字を入力してください\n");
			}
			else{
				score += pin;
			}
			
		}
		
		if(flame==3){
		//printf("2フレームまで%d点\n",score); //2フレーム目の得点を表示
		printf("3フレームまで%d点\n",score);
		}
		
	}
}




naohiro19
記事: 256
登録日時: 14年前
住所: 愛知県

Re: ボウリングのスコア手入れ計算プログラム

#2

投稿記事 by naohiro19 » 14年前

15行目のifは

コード:

if(pin >= 1 && pin <= 10)
じゃないでしょうか?

1本以上もしくは10本以下の時にスコアに倒した本数を足せばいいです

non
記事: 1097
登録日時: 14年前

Re: ボウリングのスコア手入れ計算プログラム

#3

投稿記事 by non » 14年前

>2ゲーム目の結果表示の方法が上手くできません。
2フレーム目でしょうか?
1フレーム目の出力はいらないのですね。
if文で、3フレーム目までの合計を出力しているのですから、同じようにif(flame==2)で行えばいいのではないですか?

scoreは最初に0で初期化した方がいいです。

また、i は何に使いたいのでしょうか?
non

アバター
Tatu
記事: 445
登録日時: 14年前
住所: 北海道

Re: ボウリングのスコア手入れ計算プログラム

#4

投稿記事 by Tatu » 14年前

2フレーム目と3フレーム目までの得点を両方とも記憶しておけばよいと思います。

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

Re: ボウリングのスコア手入れ計算プログラム

#5

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

前の質問を放置しないようにお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

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

Re: ボウリングのスコア手入れ計算プログラム

#6

投稿記事 by box » 14年前

non さんが書きました: scoreは最初に0で初期化した方がいいです。
以前、どっかでだれかに言ったような気がしますが、
初期化した方がいい
じゃなくって、
初期化しなければならない
ですよ。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

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

Re: ボウリングのスコア手入れ計算プログラム

#7

投稿記事 by box » 14年前

C言語入門者 さんが書きました:

コード:

	int	flame;		/*フレーム数*/
どうせなら、「炎」とか「燃焼」っていう意味の単語よりも
frame
って言う単語を使った方がそれらしく見えると思います。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

non
記事: 1097
登録日時: 14年前

Re: ボウリングのスコア手入れ計算プログラム

#8

投稿記事 by non » 14年前

box さんが書きました: 初期化しなければならない
ですよ。
それはそれは・・・(*^_^*)。
日本の曖昧文化の表現です。
non

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

Re: ボウリングのスコア手入れ計算プログラム

#9

投稿記事 by box » 14年前

日本語のあいまいさをプログラミングに持ち込んだ結果、
質問者さんが「あぁ、初期化した方がいいって書いてあるってことは、
言い方を変えれば初期化しなくてもいいんだ」てな具合に誤解してしまうことが
ひじょうに恐ろしいです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

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

Re: ボウリングのスコア手入れ計算プログラム

#10

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

box さんが書きました:日本語のあいまいさをプログラミングに持ち込んだ結果、
質問者さんが「あぁ、初期化した方がいいって書いてあるってことは、
言い方を変えれば初期化しなくてもいいんだ」てな具合に誤解してしまうことが
ひじょうに恐ろしいです。
nonさんもそういうつもりで書いたのでは無いと書いておられますので、このぐらいで。場が荒れてしまうだけですので。
追求よりもフォロー程度で済ませて頂けると嬉しいです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

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

Re: ボウリングのスコア手入れ計算プログラム

#11

投稿記事 by box » 14年前

softya(ソフト屋) さんが書きました: nonさんもそういうつもりで書いたのでは無いと書いておられますので、このぐらいで。場が荒れてしまうだけですので。
追求よりもフォロー程度で済ませて頂けると嬉しいです。
なるほど。
テーマがボウリングのスコア計算プログラムだけに、
flame(ネットでの炎上っていう意味もあるらしい)
じゃなくって
frame(掲示板の決められた枠内で行動する)
ってことで。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

C言語入門者

Re: ボウリングのスコア手入れ計算プログラム

#12

投稿記事 by C言語入門者 » 14年前

コード:

#include <stdio.h>
int main()
{
    while(1)
    {
        int score[10][2] = {0,0};
        int strike = 0;
        int total_score = 0;
        int i;
        /*一投で終わるか二投で終わるかの処理*/
        for (i = 0; i < 9; i++) {
            printf(" %dフレーム目1回目= ",i+1);                                              /*一投目*/
            scanf("%d", &score[i][0]);                  
            if (score[i][0] != 10) {                                                        /*ストライクでなければ二投目*/
                printf(" %dフレーム目2回目= ",i+1);
                scanf("%d", &score[i][1]);
            }
        }
        /*最終フレームのスコア計算*/
        printf("10フレーム目1回目= ");           
        scanf("%d", &score[9][0]);      /*一投目*/
        printf("10フレーム目2回目= ");
        scanf("%d", &score[9][1]);      /*二投目*/
        if (score[9][0] == 10 || score[9][0] + score[9][1] == 10) {                         /*最終フレームで一投目がストライクか二投目までスペアだったら*/
            printf("10フレーム目3回目= ");                                                   /*三投目を投げる*/
            scanf("%d", &strike);
        }
        /*1フレーム目から9フレーム目までのスコア計算*/
        for (i = 0; i < 9; i++) {
            if (score[i][0] == 10) {                                                        /*一投目がストライクだったら*/
                if (i != 8 && score[i + 1][0] == 10) {                                      /*1~8フレームまでで次のフレームがストライクだったら*/
                    total_score = total_score + 10 + score[i + 1][0] + score[i + 2][0];     /*次の2フレームまでの結果を足す*/
                    printf("%dフレーム目終了時点のスコアは%d点\n",i+1, total_score);
                } else {
                    total_score = total_score + 10 + score[i + 1][0] + score[i + 1][1];     /*次のフレームの一投目と二投目を足す*/
                    printf("%フレーム目終了時点のスコアは%d点\n",i+1, total_score);
                }
            } else if ((score[i][0] + score[i][1]) == 10) {                                 /*スペアだったら*/
                total_score = total_score + 10 + score[i + 1][0];                           /*次の1フレームの結果を足す*/
                printf("%dフレーム目終了時点のスコアは%d点\n",i+1, total_score);
            } else {                                                                        
                total_score = total_score + score[i][0] + score[i][1];                      /*次のフレームの一投目と二投目を足す*/
                printf("%dフレーム目終了時点のスコアは%d点\n",i+1, total_score);
            }
        }
        total_score = total_score + score[i][0] + score[i][1] + strike;
        printf("********合計スコアは%d点********\n", total_score);
    }
}
 
作成できました。どうもありがとうございます

閉鎖

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