언어

c언어 행렬 곱 and 더하기

파아랑새 2016. 1. 10. 20:49

#include<stdio.h>
#define ROWS 3
#define COLS 3
void A_MAT_ADD_B_MAT(int[][COLS], int[][COLS]);
void A_MAT_MUL_B_MAT(int[][COLS], int[][COLS]);
int main(void)
{
 int ROW_INDEX, COLS_INDEX;
 
 int A_MAT[ROWS][COLS] = { { 2, 3, 0 },
         { 8, 9, 1 },
         { 7, 0, 5 } };
 int B_MAT[ROWS][COLS] = { { 1, 0, 0 },
         { 8, 0, 1 },
         { 1, 0, 5 } };

 printf("<<< A >>>\n");
 for (ROW_INDEX = 0; ROW_INDEX < ROWS; ROW_INDEX++)
 {  
  for (COLS_INDEX = 0; COLS_INDEX < COLS; COLS_INDEX++)
  {
   printf("%d ", A_MAT[ROW_INDEX][COLS_INDEX]);
   if (COLS_INDEX == COLS - 1)
   {
    printf("\n");
   }
  }
 }
 printf("\n");
 printf("<<< B >>>\n");
 for (ROW_INDEX = 0; ROW_INDEX < ROWS; ROW_INDEX++)
 {
  for (COLS_INDEX = 0; COLS_INDEX < COLS; COLS_INDEX++)
  {
   printf("%d ", B_MAT[ROW_INDEX][COLS_INDEX]);
   if (COLS_INDEX == COLS - 1)
   {
    printf("\n");
   }
  }
 }
 printf("\n");
 printf("<<< A + B >>>\n");
 A_MAT_ADD_B_MAT(A_MAT, B_MAT);
 printf("\n");
 printf("<<< A * B >>>\n");
 A_MAT_MUL_B_MAT(A_MAT, B_MAT);
 return 0;
}
void A_MAT_ADD_B_MAT(int a[][COLS], int b[][COLS])
{
 int ROW_INDEX, COLS_INDEX;
 int c[ROWS][COLS] = { 0, };
 for (ROW_INDEX = 0; ROW_INDEX < ROWS; ROW_INDEX++)
 {
  for (COLS_INDEX = 0; COLS_INDEX < COLS; COLS_INDEX++)
  {
   c[ROW_INDEX][COLS_INDEX] = a[ROW_INDEX][COLS_INDEX]
          + b[ROW_INDEX][COLS_INDEX];
  }
 }

 for (ROW_INDEX = 0; ROW_INDEX < ROWS; ROW_INDEX++)
 {
  for (COLS_INDEX = 0; COLS_INDEX < COLS; COLS_INDEX++)
  {
   printf("%2d ", c[ROW_INDEX][COLS_INDEX]);
   if (COLS_INDEX == COLS - 1)
   {
    printf("\n");
   }
  }
 }
}
void A_MAT_MUL_B_MAT(int a[][COLS], int b[][COLS])
{
 int ROW_INDEX, COLS_INDEX, INDEX;
 int sum = 0;
 int TEMP = 0;
 int c[ROWS][COLS] = { 0, };
 for (ROW_INDEX = 0; ROW_INDEX < ROWS; ROW_INDEX++)
 {//0 1
  for (INDEX = 0; INDEX < ROWS; INDEX++)
  {//0 1 2
   for (COLS_INDEX = 0; COLS_INDEX < COLS; COLS_INDEX++)
   {//0
    c[ROW_INDEX][INDEX] +=
     a[ROW_INDEX][TEMP] * b[TEMP][INDEX];
    //00 =  00*00 + 01*10+ 02*20
    //01 =  00*01 + 01*11+ 02*21
    //02 =  00*02 + 01*12+ 02*22
    TEMP++;
   }
   TEMP = 0;
  }
 }

 for (ROW_INDEX = 0; ROW_INDEX < ROWS; ROW_INDEX++)
 {
  for (COLS_INDEX = 0; COLS_INDEX < COLS; COLS_INDEX++)
  {
   printf("%2d ", c[ROW_INDEX][COLS_INDEX]);
   if (COLS_INDEX == COLS - 1)
   {
    printf("\n");
   }
  }
 }
}