質問: 初心者です。関数を使って長い文を短くしたい 現在あるデータから数値を引用し計算する処理を行っていますが計算結果を2種類の配列に入力したいです。 簡単にいいますとまずある関数をつくりそこでデータから引用した数値を計算します。ここで計算結果が2つ出てくるんですがこれらの値を2種類の配列に入力したいです。 関数を使わずに計算処理を長く書けばうまくいくんですが長文のため関数を使って短くしたいです。 いい方法や訂正があればお願いいたします。 ---------------------------------------------- double radius(int z,int loop) { for(i=0;i<3;i++) { a[i]=txx[i+z+loop]; b[i]=txy[i+z+loop]; } ... ~計算処理~ ... r[z]=sqrtl((a[2]-ax)*(a[2]-ax)+(b[2]-ay)*(b[2]-ay)); e=sqrtl(a12*a12+b12*b12); if(e==0 || r[z]==0) { o[z]=0; } else { o[z]=e/r[z]; } } return(r[z],o[z]); } のようにデータから数値をa[i]、b[i]に入力しこれらを計算処理します。そしてr[z],o[z]を求めてこれらを下のように配列に入力したいです。 r[0]=radius(0,loop); ... r[2]=radius(2,loop); o[0]=radius(0,loop); ... o[2]=radius(2,loop); ちなみにこのプログラムでは関数内で計算はできているんですがその後配列にうまく数値が入りませんでした。
回答: 関数radiusを double radius(int, int)型から void radius(int, int, double* pdr, double* pdo) 型とし、 return(r[z],o[z])を *pdr = r[z]; *pdo = o[z]; return; に変更。 呼び出すところでは radius(0,loop,&(r[0]),&(o[0])) と変えてみるのはどうでしょう。 ポインタを使った解決法です。