[C언어] 행렬 연산하기

Dragony·2019년 12월 11일
0

C언어

목록 보기
4/5

/난수를 이용해 행렬 A,B를 생성한다.
행렬식을 구하는 함수를 선언하여 둘 중 하나라도 영행렬이면 다시 행렬을 생성하도록 한다.
행렬의 합, 곱, 전치행렬을 구하고 출력한다. func(a[],b[],c[])를 만들어서 구하도록 한다.
고찰: (a)A와 A.T의 행렬식이 같은 이유
(b)AB.T와 A.T
B.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");

}

}

profile
안녕하세요 :) 제 개인 공부 정리 블로그입니다. 틀린 내용 수정, 피드백 환영합니다.

0개의 댓글