code2

카테고리 없음2015. 2. 1. 16:57

/*행렬*/
#include<stdio.h>
////////////  function  ///////////////////////
void output_left_mat(int pleft_mat[2][2]);//(1)
void output_right_mat(int pright_mat[2][2]);//(2)
void matix_addition(int pleft_mat[2][2], int pright_mat[2][2]);//(3)
void matix_subtraction(int pleft_mat[2][2], int pright_mat[2][2]);//(4)
void matix_multiple(int pleft_mat[2][2], int pright_mat[2][2]);//(5)
void inverse_left_mat(int pleft_mat[2][2]);
void inverse_right_mat(int pright_mat[2][2]);
///////////////////////////////////////////////
int main(void){
 int left_mat[2][2] = { 0, };//<-초기화
 int right_mat[2][2] = { 0, };//<-초기화
 
 for (int i = 0; i < 2; i++){
  for (int j = 0; j < 2; j++){
   printf("left_mat[%d][%d] = ", i, j);
   scanf_s("%d", &left_mat[i][j]);
  }
 }
 for (int i = 0; i < 2; i++){
  for (int j = 0; j < 2; j++){
   printf("right_mat[%d][%d] = ", i, j);
   scanf_s("%d", &right_mat[i][j]);
  }
 }
 output_left_mat(left_mat);
 output_right_mat(right_mat);
 matix_addition(left_mat, right_mat);
 matix_subtraction(left_mat, right_mat);
 inverse_left_mat(left_mat);
 inverse_right_mat(right_mat);
 matix_multiple(left_mat, right_mat);
 return 0;

}
/////////////////////////////////////////////////////////////////////////
void output_left_mat(int pleft_mat[2][2]){
 printf("---------------INFORMATION(left_mat)---------------\n");
 for (int i = 0; i < 2; i++){
  for (int j = 0; j < 2; j++){
   printf("left_mat[%d][%d] = %d\t", i, j, pleft_mat[i][j]);
  }
  printf("\n");
 }
}
/////////////////////////////////////////////////////////////////////////
void output_right_mat(int pright_mat[2][2]){
 printf("---------------INFORMATION(right_mat)---------------\n");
 for (int i = 0; i < 2; i++){
  for (int j = 0; j < 2; j++){
   printf("right_mat[%d][%d] = %d\t", i, j, pright_mat[i][j]);
  }
  printf("\n");
 }
}
/////////////////////////////////////////////////////////////////////////
void matix_addition(int pleft_mat[2][2], int pright_mat[2][2]){
 printf("---------------INFORMATION(left_mat + right_mat)---------------\n");
 int sum[2][2] = { 0, };
 for (int i = 0; i < 2; i++)
 {
  for (int j = 0; j < 2; j++)
  {
   sum[i][j] = pleft_mat[i][j] + pright_mat[i][j];
  }
 }
 for (int i = 0; i < 2; i++)
 {
  for (int j = 0; j < 2; j++)
  {
   printf("sum_mat[%d][%d] = %d\t", i, j, sum[i][j]);
  }
  printf("\n");
 }
}
/////////////////////////////////////////////////////////////////////////
void matix_subtraction(int pleft_mat[2][2], int pright_mat[2][2]){
 printf("---------------INFORMATION(left_mat - right_mat)---------------\n");
 int sum[2][2] = { 0, };
 for (int i = 0; i < 2; i++)
 {
  for (int j = 0; j < 2; j++)
  {
   sum[i][j] = pleft_mat[i][j] - pright_mat[i][j];
  }
 }
 for (int i = 0; i < 2; i++)
 {
  for (int j = 0; j < 2; j++)
  {
   printf("sum_mat[%d][%d] = %d\t", i, j, sum[i][j]);
  }
  printf("\n");
 }
}
////////////////////////////////////////////////////////////////////////
void matix_multiple(int pleft_mat[2][2], int pright_mat[2][2]){
 int mul[2][2] = { 0, };
 mul[0][0] = ((pleft_mat[0][0] * pright_mat[0][0]) + (pleft_mat[0][1] * pright_mat[1][0]));
 mul[0][1] = ((pleft_mat[0][0] * pright_mat[0][1]) + (pleft_mat[0][1] * pright_mat[1][1]));
 mul[1][0] = ((pleft_mat[1][0] * pright_mat[0][0]) + (pleft_mat[1][1] * pright_mat[1][0]));
 mul[1][1] = ((pleft_mat[1][0] * pright_mat[0][1]) + (pleft_mat[1][1] * pright_mat[1][1]));
 printf("---------------INFORMATION(mul_mat)---------------\n");
 for (int i = 0; i < 2; i++)
 {
  for (int j = 0; j < 2; j++)
  {
   printf("mul_mat[%d][%d] = %3d\t", i, j, mul[i][j]);
  }
  printf("\n");
 }
}
/////////////////////////////////////////////////////////////////////////
void inverse_left_mat(int pleft_mat[2][2]){
 double result = 0;
 double inverse_mat[2][2] = { 0, };
 result = (pleft_mat[0][0] * pleft_mat[1][1]) - (pleft_mat[0][1] * pleft_mat[1][0]);
 if (result == 0){
  printf("---------------INFORMATION(inverse left_mat)---------------\n");
  printf("역행렬이 존재하지 않는 행렬 입니다.\n");
  return;//<-함수종료
 }
 else{
  printf("---------------INFORMATION(inverse left_mat)---------------\n");
  printf("역행렬이 존재하는 행렬 입니다.\n");
  inverse_mat[0][0] = pleft_mat[1][1] * (1 / result);
  inverse_mat[0][1] = -pleft_mat[0][1] * (1 / result);
  inverse_mat[1][0] = -pleft_mat[1][0] * (1 / result);
  inverse_mat[1][1] = pleft_mat[0][0] * (1 / result);
  //printf("%lf\n", (1/result));
  for (int i = 0; i < 2; i++)
  {
   for (int j = 0; j < 2; j++)
   {
    printf("inverse_mat[%d][%d] = %.2lf\t", i, j, inverse_mat[i][j]);
   }
   printf("\n");
  }
 }
}
/////////////////////////////////////////////////////////////////////////
void inverse_right_mat(int pright_mat[2][2]){
 double result = 0;
 double inverse_Rmat[2][2] = { 0, };
 result = (pright_mat[0][0] * pright_mat[1][1]) - (pright_mat[0][1] * pright_mat[1][0]);
 if (result == 0){
  printf("---------------INFORMATION(inverse right_mat)---------------\n");
  printf("역행렬이 존재하지 않는 행렬 입니다.\n");
  return;//<-함수종료
 }
 else{
  printf("---------------INFORMATION(inverse right_mat)---------------\n");
  printf("역행렬이 존재하는 행렬 입니다.\n");
  inverse_Rmat[0][0] = pright_mat[1][1] * (1 / result);
  inverse_Rmat[0][1] = -pright_mat[0][1] * (1 / result);
  inverse_Rmat[1][0] = -pright_mat[1][0] * (1 / result);
  inverse_Rmat[1][1] = pright_mat[0][0] * (1 / result);
  //printf("%lf\n", (1/result));
  for (int i = 0; i < 2; i++)
  {
   for (int j = 0; j < 2; j++)
   {
    printf("inverse_mat[%d][%d] = %.2lf\t", i, j, inverse_Rmat[i][j]);
   }
   printf("\n");
  }
 }
}