/난수를 이용해 행렬 A,B를 생성한다.
행렬식을 구하는 함수를 선언하여 둘 중 하나라도 영행렬이면 다시 행렬을 생성하도록 한다.
행렬의 합, 곱, 전치행렬을 구하고 출력한다. func(a[],b[],c[])를 만들어서 구하도록 한다.
고찰: (a)A와 A.T의 행렬식이 같은 이유
(b)AB.T와 A.TB.T의 행렬식이 같은 경우
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int det(int arr[][3]);
void sum(int a[][3], int b[][3], int c[][3]);
void mul(int a[][3], int b[][3], int c[][3]);
void trans(int a[][3], int b[][3], int c[][3]);
void print_matrix(int m[][3]);
int main() {
int i, j, k;
char yn;
int A[3][3];
int B[3][3];
int C[3][3];
int det_resultA;
int det_resultB;
srand((unsigned)time(NULL));
while (1) {
printf("y/n을 입력하시오:");
scanf(" %c", &yn);
if (yn == 'y') {
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
A[i][j] = rand() % 21 - 10;
B[i][j] = rand() % 21 - 10;
}
}
det_resultA = det(A);
det_resultB = det(B);
if (det_resultA == 0 || det_resultB == 0) continue;
printf("A\n");
print_matrix(A);
printf("B\n");
print_matrix(B);
printf("A+B\n");
sum(A, B, C);
print_matrix(C);
printf("AB\n");
mul(A, B, C);
print_matrix(C);
printf("전치행렬\n");
trans(A, B, C);
}
else
break;
}
return 0;
}
void print_matrix(int m[][3])
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
printf("%2d ", m[i][j]);
printf("\n");
}
printf("\n");
}
int det(int arr[][3])
{
int sum = 0;
sum += (arr[0][0] * arr[1][1])*arr[2][2];
sum -= (arr[0][0] * arr[1][2])*arr[2][1];
sum += (arr[0][1] * arr[1][2])*arr[2][0];
sum -= (arr[0][1] * arr[1][0])*arr[2][2];
sum += (arr[0][2] * arr[1][0])*arr[2][1];
sum -= (arr[0][2] * arr[1][1])*arr[2][0];
return sum;
}
void sum(int a[][3], int b[][3], int c[][3])
{
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
c[i][j] = a[i][j] + b[i][j];
}
}
}
void mul(int a[][3], int b[][3], int c[][3])
{
int i, j, k;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
for (k = 0; k < 3; k++) {
c[i][j] += a[i][k] * b[k][j];
}
}
}
}
void trans(int a[][3], int b[][3], int c[][3])
{
int i, j;
int temp[3][3];
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
c[j][i] = a[i][j];
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
a[i][j] = c[i][j];
printf("\n A 전치행렬\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
printf("%2d ", a[i][j]);
printf("\n");
}
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
c[j][i] = b[i][j];
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
b[i][j] = c[i][j];
printf("\n B 전치행렬\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
printf("%2d ", b[i][j]);
printf("\n");
}
}