• ベストアンサー

行列の列の絶対値の総和の最大値を得る関数を教えてください

4*4行列の列ごとの各要素の絶対値の総和の最大値 課題の途中で上記の関数が作れないので止まりました・・・ 行列は2次元の配列で定義しているので 配列を引数にできるような関数を教えてくださいお願いします。

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

  • ベストアンサー
  • m0r1_2006
  • ベストアンサー率36% (169/464)
回答No.1

C++ なんかすごく久しぶりなので,for 文とかあってる自信ないけど, double ** で渡せばよい. 行列を, double M1[4][4]; に代入していたら,こんな関数を作って, norm1(M1); で渡す. double norm1(double **M) { double retu =0; for (int i=0; i<=3; i++) { retu += fabs(M[2][i]); % 3列?(行)の絶対値の和 } return retu; }

shunti
質問者

お礼

まとめてのお礼で失礼します #1さん、すいません、書き忘れましたがC++でなくCでした。まあ今回は違いはないですけど^^; #2さん 全部書いてくれてありがとうございます #3さん うまいことありがとうございました

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

今どきの C だと double maxcolsum(int n, double a[n][n]) { double smax=0; for (int i = 0; i < n; ++i) { double s = 0; for (int j = 0; j < n; ++j) { s += fabs(a[j][i]); } if (s > smax) { smax = s; } } return s; } のように書けるから非常に簡単.

回答No.2

配列のサイズが決まっているのなら、 func(int a[][4]) とか func(int a[4][4]) でいいと思います。 #include <stdio.h> #define abs(a) ((a)<0?-(a):(a)) /* 絶対値マクロ */ int cal_max(int a[4][4]) {  int i,j,max,sum[4];  /* 各列の絶対値和 */  for (i=0; i<4; i++) {   sum[i]=0;   for (j=0; j<4; j++) {    sum[i]+=abs(a[j][i]);   }  }  /* 最大値を探す */  max=sum[0];  for (i=1; i<4; i++) {   if (max<sum[i]) max=sum[i];  }  return max; } int main(void) {  int a[4][4]={{-2,-3,-4,-5},{-1,-2,-3,-4},{5,4,3,2},{1,2,3,4}};  printf("%d\n",cal_max(a));  return 0; } サイズ可変にしようとすると、ちょっと工夫が必要です。

関連するQ&A