dポイントプレゼントキャンペーン実施中!

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

A 回答 (3件)

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;
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/08/09 16:45

今どきの 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;
}
のように書けるから非常に簡単.
    • good
    • 0

配列のサイズが決まっているのなら、


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;
}

サイズ可変にしようとすると、ちょっと工夫が必要です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!