/*행렬*/
#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");
}
}
}