대칭 여부 출력
이 마지막 단계에서는 행렬 대칭에 대한 더 자세한 출력을 제공하고 코드 모듈성을 개선하기 위해 함수를 만드는 프로그램을 향상시킵니다.
기존 파일을 열고 코드를 업데이트합니다.
cd ~/project
nano symmetric_matrix.c
이전 코드를 다음 구현으로 바꿉니다.
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
// 행렬 대칭 여부를 확인하는 함수
bool is_symmetric_matrix(int matrix[MAX_SIZE][MAX_SIZE], int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] != matrix[j][i]) {
return false;
}
}
}
return true;
}
// 행렬을 출력하는 함수
void print_matrix(int matrix[MAX_SIZE][MAX_SIZE], int n) {
printf("\n행렬:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%4d ", matrix[i][j]);
}
printf("\n");
}
}
int main() {
int n, matrix[MAX_SIZE][MAX_SIZE];
// 행렬 차원 읽기
printf("정방 행렬의 크기를 입력하세요: ");
scanf("%d", &n);
// 행렬 요소 읽기
printf("행렬 요소를 입력하세요:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("요소 [%d][%d] 를 입력하세요: ", i, j);
scanf("%d", &matrix[i][j]);
}
}
// 입력된 행렬 출력
print_matrix(matrix, n);
// 대칭 여부 확인 및 출력
if (is_symmetric_matrix(matrix, n)) {
printf("\n대칭 분석:\n");
printf("✓ 행렬은 대칭입니다.\n");
printf(" - 모든 요소 A[i][j] 는 A[j][i] 와 같습니다.\n");
printf(" - 전치 행렬과 같습니다.\n");
} else {
printf("\n대칭 분석:\n");
printf("✗ 행렬은 대칭이 아닙니다.\n");
printf(" - 일부 요소 A[i][j] 는 A[j][i] 와 같지 않습니다.\n");
}
return 0;
}
프로그램을 컴파일하고 실행합니다.
gcc symmetric_matrix.c -o symmetric_matrix
./symmetric_matrix
대칭 행렬에 대한 예시 출력:
정방 행렬의 크기를 입력하세요: 3
행렬 요소를 입력하세요:
요소 [0][0]를 입력하세요: 1
... (생략)
행렬:
1 2 3
2 4 5
3 5 6
대칭 분석:
✓ 행렬은 대칭입니다.
- 모든 요소 A[i][j]는 A[j][i]와 같습니다.
- 전치 행렬과 같습니다.
비대칭 행렬에 대한 예시 출력:
정방 행렬의 크기를 입력하세요: 3
행렬 요소를 입력하세요:
요소 [0][0]를 입력하세요: 1
... (생략)
행렬:
1 2 3
4 5 6
7 8 9
대칭 분석:
✗ 행렬은 대칭이 아닙니다.
- 일부 요소 A[i][j]는 A[j][i]와 같지 않습니다.
주요 개선 사항:
- 코드 구성을 개선하기 위해
is_symmetric_matrix() 함수를 추가했습니다.
- 행렬 내용을 표시하기 위해
print_matrix() 함수를 만들었습니다.
- 대칭 분석을 자세히 출력했습니다.
- 대칭 여부를 시각적으로 표시하기 위해 ✓/✗를 사용했습니다.