// 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"); } } |