ページ 1 / 1
無題
Posted: 2010年10月27日(水) 19:45
by han
初めまして。hanと申します。プログラミングは初心者です。 宜しくお願いします。
さて 下記の問題が実行できませんが、正しい書き方を教えていただけませんか?
出席番号1から10まで10名の英語と数学の得点を格納する2次元配列(人数×科目数)を用意し,英語の平均点(小数点以下第一位まで表示),数学の平均点(小数点以下第一位まで表示),個人別総得点,を実行例のように表示するプログラムを作成せよ.なお,各得点は配列の初期化にて任意点数を入力するが,必ず実行結果が正しいか否か確認すること.(10名分任意の点数入力が面倒な場合は,キーボードから入力するようにしても可)
<実行例>
英語の平均点は76.7点です。数学の平均点は71.0点です。
出席番号1の総得点は160です。
出席番号2の総得点は198です。
出席番号3の総得点は150です。
出席番号4の総得点は134です。
出席番号5の総得点は129です。
出席番号6の総得点は120です。
出席番号7の総得点は145です。
出席番号8の総得点は154です。
出席番号9の総得点は158です。
出席番号10の総得点は129です。
#include <stdio.h>
#define NUMBER 10
int main(void)
{
int m[NUMBE[/url][2];
int n[NUMBE[/url][1];
int i , j ;
int a, b;
for(i=0; i<NUMBER; i++){
for(j=0; j<2; j++){
printf("点数入力:");
scanf("%d",&m[j]);
// putchar('\n');
}
}
putchar('\n');
for(i=0; i<NUMBER; i++);
a+=m[0];
for(i=0; i<NUMBER; i++);
b+=m[1];
printf("英語の平均点は:%.1f点です。\n",(double)a/10);
printf("数学の平均点は:%.1f点です。\n",(double)b/10);
for(j=0; j<NUMBER; j++)
printf("出席番号%2dの総合点は%dです。\n",j+1, a+b);
putchar('\n');
return(0);
}
Re:無題
Posted: 2010年10月27日(水) 19:56
by asm
Run-Time Check Failure #3 - The variable 'a' is being used without being initialized.
aとbが初期化されていないようです
staticをつけるかイコールで値を設定しましょう
Re:配列の問題
Posted: 2010年10月27日(水) 20:06
by han
初期化を設定すると 値がゼロになりました。
Re:配列の問題
Posted: 2010年10月27日(水) 20:08
by han
回答してくれて ありがとうございます 。 初期化を設定すると 値がゼロになりました
Re:配列の問題
Posted: 2010年10月27日(水) 20:13
by 438番
for(i=0; i<NUMBER; i++);
a+=m[0];
のところは
for(i=0; i<NUMBER; i++)
a+=m[0];
じゃなくていいんですか?
Re:配列の問題
Posted: 2010年10月27日(水) 20:28
by 438番
個人の総合点を表示するときに"a+b"としていますが、それだと全員同じ数字になりますよ
あと"a"は全員の英語の総合点で"b"は全員の数学の総合点です
個人の総合点数を算出するのにそれを使うのはちょっとどうかと思います
せっかく配列に科目別の個人の点数を格納しているのですし
そちらを使ったほうがよいのではないでしょうか?
Re:配列の問題
Posted: 2010年10月27日(水) 21:24
by han
> 個人の総合点を表示するときに"a+b"としていますが、それだと全員同じ数字になりますよ
> あと"a"は全員の英語の総合点で"b"は全員の数学の総合点です
> 個人の総合点数を算出するのにそれを使うのはちょっとどうかと思います
>
> せっかく配列に科目別の個人の点数を格納しているのですし
> そちらを使ったほうがよいのではないでしょうか?
回答ありがとうございます 英語と数学の平均値は正しくなりました。個人の総合点数を算出するは 1番[0,0]+[1,0] 2番 [0,1]+[1,1] 3番[0,2]+[1,2] そうしたら 1番[i,0]+[1,j] 2番 [i,1]+[i+1,j+1] 3番[i,2]+[i+1,j+2].........になるでしょう 結局計算方はどうなるか 分からなくなりました 良かったら 教えてください。
Re:配列の問題
Posted: 2010年10月27日(水) 21:28
by han
> > 個人の総合点を表示するときに"a+b"としていますが、それだと全員同じ数字になりますよ
> > あと"a"は全員の英語の総合点で"b"は全員の数学の総合点です
> > 個人の総合点数を算出するのにそれを使うのはちょっとどうかと思います
> >
> > せっかく配列に科目別の個人の点数を格納しているのですし
> > そちらを使ったほうがよいのではないでしょうか?
>
> 回答ありがとうございます 英語と数学の平均値は正しくなりました。個人の総合点数を算出するは 1番[0,0]+[1,0] 2番 [0,1]+[1,1] 3番[0,2]+[1,2] そうしたら 1番[i,0]+[1,j] 2番 [i,1]+[i+1,j+1] 3番[i,2]+[i+1,j+2].........になるでしょう 結局計算方はどうなるか 分からなくなりました 良かったら 教えてください。
すみません 1番(i,0)+(1,j) 2番 (i,1)+(i+1,j+1) 3番(i,2)+(i+1,j+2)......
Re:配列の問題
Posted: 2010年10月27日(水) 21:58
by 438番
>結局計算方はどうなるか
m[j][0]にはj番目の生徒の英語の点数
m[j][1]にはj番目の生徒の数学の点数
がそれぞれ格納されています
ですので単純にこれらを足せば計算できるかと
例
for(j=0; j<NUMBER; j++)
printf("出席番号%2dの総合点は%dです。\n",j+1, m[j][0]+m[j][1]);
このような書き方でどうでしょうか
あとはせっかく
#define NUMBER 10
としているので平均点を求めるときもNUMBERを使ったほうが良いと思いますよ
Re:配列の問題
Posted: 2010年10月27日(水) 22:13
by han
> >結局計算方はどうなるか
> m[j][0]にはj番目の生徒の英語の点数
> m[j][1]にはj番目の生徒の数学の点数
> がそれぞれ格納されています
> ですので単純にこれらを足せば計算できるかと
>
> 例
> for(j=0; j<NUMBER; j++)
> printf("出席番号%2dの総合点は%dです。\n",j+1, m[j][0]+m[j][1]);
>
> このような書き方でどうでしょうか
>
> あとはせっかく
> #define NUMBER 10
> としているので平均点を求めるときもNUMBERを使ったほうが良いと思いますよ
さっき printf("出席番号%2dの総合点は%.1lfです。\n",j+1, m[j][0]+m[j][1]); こうして 結局総合点はすべて 0になりました。 (double)m[j][0]+m[j][1] の(double)を忘れてしまいました。 本当に 有り難うございました。
Re:配列の問題
Posted: 2010年10月27日(水) 22:20
by han
Name: 438番 の方 スゴイです。本当に助かりました。これから どんどん 練習していくので 宜しくお願いします。
Re:配列の問題
Posted: 2010年10月27日(水) 22:21
by han
Name: 438番 の方 スゴイです。本当に助かりました。これから どんどん 練習していくので 宜しくお願いします。
自機ショットのある焦点への集約
Posted: 2010年11月10日(水) 13:39
by C権化
5発、自機の周りからショットを出し、
(自機のx座標,自機のy座標から-100)の座標めがけて
集約したいと考え、
double cshotatan2(int k){
return atan2(cshot[k].x-ch.x,cshot[k].y-(ch.y-100));
}
void ch_pattern_Nomal(){
int k;
for(int i=0;i<cshot0num[ch.power<200?0:1];i++){
if((k=search_cshot())!=-1){
cshot[k].flag=1;
cshot[k].cnt=0;
cshot[k].spd=20;
cshot[k].x=ch.x+cshot0pos_x/3;
cshot[k].y=ch.y+cshot0pos_y;
cshot[k].angle=cshotatan2(k);
cshot[k].power=23;
cshot[k].knd=0;
}
}
se_flag[2]=1;
}
のようなコードにしたのですが、実行するとななめ左にショットが行ってしまいます。
敵の自機狙いは、自機と敵ショットの角度をとればいいように、
焦点をさだめ、そこに狙いをつけるにはどうしたらいいか
助言がいただけたらと思います。
簡易の状況の絵を一応添付しておきます。
Re:自機ショットのある焦点への集約
Posted: 2010年11月10日(水) 17:49
by みけCAT
試してはいません。
龍神録33章のboss_shot.cppを参考にしてみました。
cshotatan2関数をこのようにしたらどうなりますか?
double cshotatan2(int k){
return atan2(cshot[k].y-(ch.y-100),cshot[k].x-ch.x);
}
または
double cshotatan2(int k){
return atan2((ch.y-100)-cshot[k].y,ch.x-cshot[k].x);
}
追記
龍神録33章のboss_shot.cppは下の関数に近い状態になっています。
具体的にはbossatan3関数を参考にしました。

Re:自機ショットのある焦点への集約
Posted: 2010年11月10日(水) 18:24
by C権化
回答感謝します。
しかし、画像のように、
y軸の正の方向へ拡散するようなショットになってしまいました。
実装としては、龍神録49章の
double option0ang[4] = {-PI/2,-PI/2,-PI/2-PI/4,-PI/2+PI/4};//オプションの発射角度(49)
のように角度を個別指定して収束するようにさせることはできます。
ただ、やはり一点収束ができないのはなぜか気になります。
Re:自機ショットのある焦点への集約
Posted: 2010年11月10日(水) 18:35
by みけCAT
cshotatan2(k)の後に+3.141592653589
(円周率を加える)
としたらどうなりますか?
Re:自機ショットのある焦点への集約
Posted: 2010年11月10日(水) 18:41
by C権化
できました!!
本当に感謝です。
もしよろしければ、なぜ、atan2(x,y)のyとxを変えて、PIを
加えれば良いのかの理由を教えてください。
ヒントでもいいのでお願いします。

Re:自機ショットのある焦点への集約
Posted: 2010年11月10日(水) 18:54
by みけCAT
atan2は苦Cなどで調べるといいかもしれません。
180度反対方向に飛ぶようだったのでPIを加えました。
Re:自機ショットのある焦点への集約
Posted: 2010年11月10日(水) 19:02
by C権化
参考にしてみます。
ありがとうございました。