2010年6月22日火曜日

C言語で野球スコアボードを作成

よく学校の宿題で出されるのか野球のスコアボード作成の質問が知恵袋で出ます。 私が投稿したプログラムをここに書きたいと思います。

#include<stdio.h>

#define _CRT_SECURE_NO_WARNINGS

#define MAXINNING 15 /*最大イニング数(高校野球)*/
#define NORMALINNING 9 /*普通のイニング数*/

#define CALLEDGAMEINNING 5 /*コールドゲームのイニング数*/
#define CALLEDGAMEDIFFPO 9 /*コールドゲームの点差*/


/*プログラム中に数字を散乱させると理解力が下がるので名前で定義*/
#define TOP 0
#define BOTTOM 1


int main(void)
{
int iRun[2][MAXINNING]; /*スコアボード*/
int iSumTop = 0; /*先攻合計*/
int iSumBtm = 0; /*後攻合計*/

int iInput; /*入力用変数*/
int iNowInning; /*現在のイニング*/

int iDiffPoint; /*得点差計算用変数*/

int iX = 0; /*Xの判定*/

int iEndInning = 0; /*終了したイニング数*/

/*とりあえず一回から最大の延長戦まで回す*/
for( iNowInning = 0; iNowInning < MAXINNING ; ++iNowInning){

/*現在のイニングを記録*/
iEndInning = 1 + iNowInning;

/*表入力*/
printf("%d%s",1+iNowInning,"回表=");
scanf("%d",&iInput);

/*スコアボードへ点数を入力する*/
iRun[ TOP ][ iNowInning ] = iInput;

/*合計を計算しておく*/
iSumTop += iInput;


/* Xの判定*/
if(iNowInning + 1 >= NORMALINNING && iSumTop < iSumBtm ||
iNowInning + 1 >= CALLEDGAMEINNING && iDiffPoint >= CALLEDGAMEDIFFPO ){

iRun[ BOTTOM ][ iNowInning ] = 0;
iX = 1;
break;
}


/*裏入力*/
printf("%d%s",1+iNowInning,"回裏=");
scanf("%d",&iInput);

/*スコアボードへ点数を入力する*/
iRun[ BOTTOM ][ iNowInning ] = iInput;

/*合計を計算しておく*/
iSumBtm += iInput;

/*得点差の計算、マイナス符号の除去*/
iDiffPoint = iSumTop - iSumBtm;
if(iDiffPoint < 0){
iDiffPoint = -iDiffPoint;
}

/*ゲーム終了の判定*/
if(iNowInning + 1 >= NORMALINNING && iSumTop != iSumBtm ||
iNowInning + 1 >= CALLEDGAMEINNING && iDiffPoint >= CALLEDGAMEDIFFPO ){

/*もしこの場合で後攻が勝っていればXを付ける*/
if( iSumTop < iSumBtm){
iX = 1;
}
break;
}

}


/*ラインの表示*/
for(iNowInning = 0 ; iNowInning < iEndInning ; ++iNowInning){
printf("+--");
}
/*Xの場合は-を詰める*/
if(iX ==1){
printf("-");
}
printf("+---+\n");


/*スコアの表示(先攻)*/
for(iNowInning = 0 ; iNowInning < iEndInning ; ++iNowInning){
printf("|%2d",iRun[ TOP ][ iNowInning ]);
}
/*Xの場合はスペースを詰める*/
if(iX ==1){
printf(" ");
}
printf("|%3d|\n",iSumTop);

/*ラインの表示*/
for(iNowInning = 0 ; iNowInning < iEndInning ; ++iNowInning){
printf("+--");
}
/*Xの場合は-を詰める*/
if(iX ==1){
printf("-");
}
printf("+---+\n");


/*スコアの表示(後攻)*/
for(iNowInning = 0 ; iNowInning < iEndInning ; ++iNowInning){
printf("|%2d",iRun[ BOTTOM ][ iNowInning ]);
}
/*Xの場合はスコアの後ろにXと書く*/
if(iX ==1){
printf("X");
}
printf("|%3d|\n",iSumBtm);

/*ラインの表示*/
for(iNowInning = 0 ; iNowInning < iEndInning ; ++iNowInning){
printf("+--");
}
/*Xの場合は-を詰める*/
if(iX ==1){
printf("-");
}
printf("+---+\n");


return 0;
}
書かれている記事
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1342552658

0 件のコメント:

コメントを投稿