// matrix.c : Çà·ÄÀÇ µ¡¼À, »¬¼À, °ö¼À ¿¬»ê
  // Çà·ÄÀÇ Çà°ú ¿­ÀÇ Å©±â¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖµµ·Ï ¸Þ¸ð¸®¸¦ µ¿ÀûÀ¸·Î ÇÒ´çÇß±¸¿ä,
  // µ¿Àû ¸Þ¸ð¸® ÇÒ´çÀº Æ÷ÀÎÅͰªÀ¸·Î ¸®ÅÏÇØ Áֱ⠶§¹®¿¡, ¿ì¼± 1Â÷¿ø ¹è¿­·Î 
  // ¼ö¸¦ ¹Þ¾Æ¼­ °¢ ¿¬»êÀÌ ÇàÇØÁú ¶§, 2Â÷¿ø ¹è¿­·Î ´Ù½Ã ±¸¼ºÀ» ÇØ¼­ °¢ ¿¬»êÀ» 
  // ¼öÇàÇϵµ·Ï Çß½À´Ï´Ù. Âü°í·Î Çà°ú ¿­À» °¢°¢ ÀԷ¹ÞÁö ¾Ê¾Ò±â ¶§¹®¿¡
  // °ö¼ÀÀÌ Á¤»ç°¢ Çà·ÄÀÎ °æ¿ì¿¡¸¸ °¡´ÉÇÕ´Ï´Ù. 
  
 
  #include <stdio.h>
  #include <stdlib.h>
 
  int *input_element( int row, int col);
  void plus_operator( int *pt1, int *pt2, int row, int col);
  void minus_operator( int *pt1, int *pt2, int row, int col); 
  void multiply_operator( int *pt1, int *pt2, int row, int col);
 
  void main()
  {
          int i, j;
          int row, col;
          int sel;
          int *pt1, *pt2;
 
          printf("Input row size of Matrix : ");
          scanf("%d", &row);
          printf("Input col size of Matrix : ");
          scanf("%d", &col);
 
          for( i = 0; i < row; i++) {
                  for( j = 0; j < col; j++) {
                          printf("a%d%d\t", i+1, j+1);
                  }
                  printf("\n");
          }
 
          pt1 = input_element( row, col);
        
          for( i = 0; i < row; i++) {
                  for( j = 0; j < col; j++) {
                          printf("b%d%d\t", i+1, j+1);
                  }
                  printf("\n");
          }
 
          pt2 = input_element( row, col);
 
          do {
                printf("\n1. µ¡¼À   2. »¬¼À   3. °ö¼À   4. Á¾·á\n");
                printf("¼±ÅÃÇØ ÁÖ¼¼¿ä : ");
                scanf("%d", &sel);
                printf("\n");
 
                switch(sel) {
                case 1:
                        plus_operator( pt1, pt2, row, col);
                        break;
                case 2:
                        minus_operator( pt1, pt2, row, col);
                        break;
                case 3:
                        if( row != col) {
                                printf("µÎ Çà·ÄÀº °ö¼ÀÀÌ ºÒ°¡´ÉÇÕ´Ï´Ù.\n");
                        } else {
                                multiply_operator( pt1, pt2, row, col);
                        }
                        break;
                case 4:
                        printf("Á¾·á ÇÕ´Ï´Ù.\n");
                        break;
                default :
                        printf("ÀÔ·Â ¿À·ù ÀÔ´Ï´Ù.\n");
                }
        } while( !(( sel >= 1) && ( sel <= 4)));
  }
 
  int *input_element(int row, int col)
  {
          int i, j, k;
          int *ptd;
 
          ptd = (int *)malloc(row*col*sizeof(int));
 
          k = 0;
          for( i = 0; i < row; i++) {
                  for( j = 0; j < col; j++) {
                          printf("%d%d : ", i+1, j+1);
                          scanf("%d", &ptd[k]);
                          k++;
                  }
          }
          return(ptd); 
  }
 
  void plus_operator(int *pt1, int *pt2, int row, int col)
  {
          int i, j;
          int mat1[100][100], mat2[100][100];
 
          for( i = 0; i < row; i++) {
                  for( j = 0; j < col; j++) {
                          mat1[i][j] = *(pt1++);
                          mat2[i][j] = *(pt2++);
                          printf("%d\t", mat1[i][j] + mat2[i][j]);
                  }
                  printf("\n");
          }
  }
 
  void minus_operator(int *pt1, int *pt2, int row, int col)
  {
          int i, j;
          int mat1[100][100], mat2[100][100];
 
          for( i = 0; i < row; i++) {
                  for( j = 0; j < col; j++) {
                          mat1[i][j] = *(pt1++);
                          mat2[i][j] = *(pt2++);
                          printf("%d\t", mat1[i][j] - mat2[i][j]);
                  }
                  printf("\n");
          }
  }
 
  void multiply_operator(int *pt1, int *pt2, int row, int col)
  {
          int i, j, k;
          int mat1[100][100], mat2[100][100], mat[100][100];
          int sum;
          int n = row;                        // or int n = col;
 
          for( i = 0; i < row; i++) {
                  for( j = 0; j < col; j++) {
                          mat1[i][j] = *(pt1++);
                          mat2[i][j] = *(pt2++);
                  }
          }
        
          for( i = 0; i < row; i++) {
                  for( j = 0; j < col; j++) {
                          sum = 0;
                          for( k = 0; k < n; k++) {
                                  sum += mat1[i][k] * mat2[k][j];
                          }
                          mat[i][j] = sum;
                          printf("%d\t", mat[i][j]);
                  }
                  printf("\n");
          }
  }