#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void print_rank(double rank[],int size)
{
puts("Rank Score\n");
for(int t=0;t<size;t++){
printf("%d ・・・ %.1f\n",t+1,rank[t]);
}
}
int main (void)
{
double rank[10] = {1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,2.0,3.0};
int m=0;
int retry;
do{
print_rank(rank,10);
for (int i=1;i<4;i++)
{
int no;
int s;
printf("ターン%d\n",i);
time_t x=0;
srandom(time(NULL));
x=random() % 100+1;
printf("今日は%d~\n",x);
for (int j=1;j<100;j++)
{
printf("第%d回目の予想:",j);
scanf("%d",&no);
s=abs(no-x);
if (s==0)
{
printf("正解!");
printf("%d回目の予想で正解しました\n",j);
m=m+j;
break;
}
else if (s<=5)
{
puts("惜しいな、先に言ってよ");
}
else if (s<=10)
{
puts("もうちょいやったのにな~");
}
else{
puts("全然あかんやん~");
}
}
}
printf("3ターンで%d回の予想をしました\n",m);
printf("平均予想回数は%.4f回です\n",(double)m/3);
if((m/3.0)==1)
{
puts("やるやん");
}
else if((m/3.0)<=2)
{
puts("あほ");
}
else if((m/3.0)<=3)
{
puts("立っとれ");
}
else
{
puts("出ていけ");
}
for (int y=0; y<10; y++){
if((m/3.0)<=rank[y]){
printf("あなたは%d位です\n",y+1);
break;
}
}
if((m/3.0)>3.0){
puts("ランク外です");
}
double score=m/3.0;
rank[9]=score;
for(int z=9; rank[z-1]>rank[z]; z--){
if(rank[z-1]>rank[z]){
double tmp=rank[z];
rank[z]=rank[z-1];
rank[z-1]=tmp;
}
}
print_rank(rank,10);
printf("ゲームを続行しますか?(1:続行 0:終了)_");
scanf("%d",&retry);
}
while (retry==1);
return 0;
}
このコードに改良を加えて
・スコアのランクを求める処理を関数get_rank()として定義する処理
・ランクの更新を関数update_ranking()として定義する処理
の二つの改良を加えたコードを求めてほしいです!
解説付きですとありがたいです!!
ランキングの処理について
Re: ランキングの処理について
ソースを貼る場合はで囲んでいただけると見やすくなり助かります。
また、処理系(VC++など)は何です?
また、処理系(VC++など)は何です?
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void print_rank(double rank[], int size)
{
puts("Rank Score\n");
for (int t = 0; t < size; t++) {
printf("%d ・・・ %.1f\n", t + 1, rank[t]);
}
}
int main(void)
{
double rank[10] = { 1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,2.0,3.0 };
int m = 0;
int retry;
do {
print_rank(rank, 10);
for (int i = 1; i < 4; i++)
{
int no;
int s;
printf("ターン%d\n", i);
time_t x = 0;
srandom(time(NULL));
x=random() % 100+1;
printf("今日は%d~\n", x);
for (int j = 1; j < 100; j++)
{
printf("第%d回目の予想:", j);
scanf("%d", &no);
s = abs(no - x);
if (s == 0)
{
printf("正解!");
printf("%d回目の予想で正解しました\n", j);
m = m + j;
break;
}
else if (s <= 5)
{
puts("惜しいな、先に言ってよ");
}
else if (s <= 10)
{
puts("もうちょいやったのにな~");
}
else {
puts("全然あかんやん~");
}
}
}
printf("3ターンで%d回の予想をしました\n", m);
printf("平均予想回数は%.4f回です\n", (double)m / 3);
if ((m / 3.0) == 1)
{
puts("やるやん");
}
else if ((m / 3.0) <= 2)
{
puts("あほ");
}
else if ((m / 3.0) <= 3)
{
puts("立っとれ");
}
else
{
puts("出ていけ");
}
for (int y = 0; y < 10; y++) {
if ((m / 3.0) <= rank[y]) {
printf("あなたは%d位です\n", y + 1);
break;
}
}
if ((m / 3.0) > 3.0) {
puts("ランク外です");
}
double score = m / 3.0;
rank[9] = score;
for (int z = 9; rank[z - 1] > rank[z]; z--) {
if (rank[z - 1] > rank[z]) {
double tmp = rank[z];
rank[z] = rank[z - 1];
rank[z - 1] = tmp;
}
}
print_rank(rank, 10);
printf("ゲームを続行しますか?(1:続行 0:終了)_");
scanf("%d", &retry);
} while (retry == 1);
return 0;
}
ボールを違うところに投げてたらご指摘して頂けると嬉しいです(o_ _)o
Re: ランキングの処理について
ソースを貼る場合は
[code][/code]
([]は半角で)
で囲んでいただけると見やすくなり助かります。
[code][/code]
([]は半角で)
で囲んでいただけると見やすくなり助かります。
ボールを違うところに投げてたらご指摘して頂けると嬉しいです(o_ _)o
Re: ランキングの処理について
double score = m / 3.0;
rank[9] = score;
for (int z = 9; rank[z - 1] > rank[z]; z--) {
if (rank[z - 1] > rank[z]) {
double tmp = rank[z];
rank[z] = rank[z - 1];
rank[z - 1] = tmp;
}
}
あと、数字以外を入力すると予期せぬ動きをするのも修正したほうがよいですね。
ボールを違うところに投げてたらご指摘して頂けると嬉しいです(o_ _)o
Re: ランキングの処理について
↑はupdate_ranking()です。
get_rank()は ここのあたりを改良して関数化すればよいかと思います。
get_rank()は ここのあたりを改良して関数化すればよいかと思います。
ボールを違うところに投げてたらご指摘して頂けると嬉しいです(o_ _)o
Re: ランキングの処理について
ボールを違うところに投げてたらご指摘して頂けると嬉しいです(o_ _)o