[ create a new paste ] login | about

Link: http://codepad.org/3vEhNLeD    [ raw code | output | fork ]

C, pasted on May 25:
/* 問題文
(1)行列の乗算を行う関数
(2)行列の(i,j)要素に値をセットする関数
(3)行列の(i,j)要素の値を得る関数
(4)行列の第p行と第q行を入れ替える関数 を作りなさい。*/

#include<stdio.h>

#define M 2
#define N 2
#define MN_MAX 100

//行列データのための構造体を宣言
struct matrix_data{
  int row;
  int col;		
  double dat[MN_MAX];
};

//指定されたサイズの行列データを用意する
  struct matrix_data init_matrix(int m, int n)
{
  struct matrix_data mat;

  mat.row = m ;
  mat.col = n;

  return mat;
}

//行列の(i,j)要素に値をセットする
struct matrix_data set_matrix(struct matrix_data mat, int i, int j, double val)
{
  mat.dat[i*mat.col + j] = val;

  return mat;
}

//行列の(i,j)要素の値を得る
double get_matrix(struct matrix_data mat, int i, int j)
{
	return mat.dat[i*mat.col + j];
}

//行列aと行列bの積を計算し、結果を行列cに格納する
struct matrix_data multi_matrix(struct matrix_data a, struct matrix_data b)
{
  int i, j, k;
  int m, n;

  struct matrix_data c;

  m = a.row;
  n = a.col;

  c = init_matrix(m,n);
  
  for(i = 0; i < m; i ++){
    for(j = 0; j < n; j++){
      for(k = 0; k < n/2; k++){
	c = set_matrix(c,i,j,get_matrix(a,i,k)*get_matrix(b, k, j)+get_matrix(a,i,k+1)*get_matrix(b, k+1, j)); //汎用的でない気がします。。。
      }
    }
  }
  return c;
}

//行列データを画面に表示する
void show_matrix(struct matrix_data mat)
{
  int i, j;
  
  for(i = 0; i < mat.row; i++){
      for(j = 0; j < mat.col; j++){
	  printf("%f ",get_matrix(mat, i, j));
	}
      printf("\n");
  }
}

//行列の第p行と第q行を入れ替える
struct matrix_data change_matrix(struct matrix_data c)
{
  int i, j;
  int m,n;
  
  struct matrix_data c;

  m = c.row;
  n = c.col;

  c = init_matrix(m,n);
  
  for(i = 0; i < m; i++){
    for(j = 0; j < n; j++){
// ここがわかりません。。。
    }
  }
  return c;
}

int main(void)
{
  struct matrix_data a, b, c;
  
  a = init_matrix(M,N);
  b = init_matrix(M,N);
  c = init_matrix(M,N);



  a = set_matrix(a, 0, 0, 1.0);
  a = set_matrix(a, 0, 1, 2.0);
  a = set_matrix(a, 1, 0, 3.0);
  a = set_matrix(a, 1, 1, 4.0);
  b = set_matrix(b, 0, 0, 5.0);
  b = set_matrix(b, 0, 1, 6.0);
  b = set_matrix(b, 1, 0, 7.0);
  b = set_matrix(b, 1, 1, 8.0);
  c = set_matrix(c, 0, 0, 0.0);
  c = set_matrix(c, 0, 1, 0.0);
  c = set_matrix(c, 1, 0, 0.0);
  c = set_matrix(c, 1, 1, 0.0);

  c = multi_matrix(a,b); 
  show_matrix(c);
  
  c = change_matrix(c);
  show_matrix(c);

  return 0;
}


Output:
1
2
3
In function 'change_matrix':
Line 87: error: 'c' redeclared as different kind of symbol
Line 82: error: previous definition of 'c' was here


Create a new paste based on this one


Comments: