• ベストアンサー

初心者です。関数を使って長い文を短くしたい

現在あるデータから数値を引用し計算する処理を行っていますが計算結果を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); ちなみにこのプログラムでは関数内で計算はできているんですがその後配列にうまく数値が入りませんでした。

質問者が選んだベストアンサー

  • ベストアンサー
  • driverII
  • ベストアンサー率27% (248/913)
回答No.1

関数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])) と変えてみるのはどうでしょう。 ポインタを使った解決法です。

その他の回答 (2)

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.3

関数は基本的にひとつの値しか返せないので、複数の帰り値を持ちたいときに考えられる簡単な方法は…… 1.引数で返す #1の方が言っている方法です。 2.帰り値を構造体にする。 たとえば、二つのintを返したいのなら typedef struct ret{ int ret1,ret2; }ret_t; とでもして、この構造体を帰り値に使う。 という方法が思いつきます。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

> return(R[z],O[z]); これだと、O[z]しか返さないですが。 もしかして、二つの値を同時に返したいと思ってるとか。

penginmuranomura
質問者

補足

確かにO[z]の値しか返していませんでした。osamuyさんが言うように2つの値を同時に返したいです。