c·c++/c 프로그래밍

행렬의 곱셈 등 - 배열의 크기가 주어졌을 때

바로이순간 2012. 3. 26. 09:10

#include <stdio.h>

#include <stdlib.h>

#define SIZE 2
void matAdd(double a[][SIZE], double b[][SIZE], double c[][SIZE], int rows, int cols) {
  int i, j;
  for(i=0;i<rows;i++)
    for(j=0;j<cols;j++)
      c[i][j]=a[i][j]+b[i][j];
}

void matSub(double a[][SIZE], double b[][SIZE], double c[][SIZE], int rows, int cols) {
  int i, j;
  for(i=0;i<rows;i++)
    for(j=0;j<cols;j++)
      c[i][j]=a[i][j]-b[i][j];
}

void matMult(double a[][SIZE], double b[][SIZE], double c[][SIZE],
  int num1, int num2, int num3) {
  int i, j, k;
  double x;

  for(i=0;i<SIZE;i++) {
    for(j=0;j<SIZE;j++) {
      x=0.;
      for(k=0;k<SIZE;k++)
        x=x+a[i][k]*b[k][j];

      c[i][j]=x;
    }
  }
}


void matPrint(double a[][SIZE], int rows, int cols) {
  int i, j;


  for(i=0;i<rows;i++) {
    for(j=0;j<cols;j++) {
      printf("%10.4f", a[i][j]);
    }
    printf("\n");
  }
}


int main() {
  int n1, n2, n3;
  int i, j;

  double x;
  double arrA[SIZE][SIZE], arrB[SIZE][SIZE], arrC[SIZE][SIZE];

  for(i=0;i<SIZE;i++) {
    for(j=0;j<SIZE;j++) {
      printf("행렬 1 [%d][ %d] 의 값: ", i, j);
      scanf("%lf", &x);

      arrA[i][j]=x;
    }
  }

  for(i=0;i<SIZE;i++) {
    for(j=0;j<SIZE;j++) {
      printf("행렬 2 [%d][ %d] 의 값: ", i, j);
      scanf("%lf", &x);

      arrB[i][j]=x;
    }
  }

  matAdd(arrA, arrB, arrC, SIZE, SIZE);
  printf("\n행렬의 덧셈: \n");
  matPrint(arrC, SIZE, SIZE);

  matSub(arrA, arrB, arrC, SIZE, SIZE);
  printf("\n행렬의 뺄셈: \n");
  matPrint(arrC, SIZE,SIZE);

// #########################################################################
// 행렬A의 행 n1 열 n2 행렬B의 행 n2 열 n3 이어야 한다. 행렬C의 행 n1 열 n3 이어야 한다.

// 여기서는 간단히 하기 위해서 정방행렬의 경우를 돌려본 것이다.
//##########################################################################

  matMult(arrA, arrB, arrC, SIZE, SIZE, SIZE);
  printf("\n행렬의 곱셈: \n");
  matPrint(arrC, SIZE, SIZE);

  return 0;

}