728x90
전치행렬은 행과 열이 바뀐 행렬입니다.
2차원 행렬을 사용할거고 함수로 받아야해서 동적할당을 이용할겁니다.
#include <stdio.h>
#include <stdlib.h>
malloc을 사용해주기 위해 stdlib 인클루드 해줍니다.
int** Transpose_Mat(int *A, int n)
{
int** arr = malloc(sizeof(int*) * n);
for (int i = 0; i < n; i++)
arr[i] = malloc(sizeof(int) * n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
arr[i][j] = A[3*i + j];
}
int** B = malloc(sizeof(int*) * n);
for (int i = 0; i < n; i++)
B[i] = malloc(sizeof(int) * n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
B[j][i] = arr[i][j];
}
return B;
}
좀 복잡해보여도 별 내용 없습니다.
맨 마지막 이중for문이 가장 핵심 내용이고, 나머지는 그냥 2차원 배열을 함수로 받아서 이용하기 위한 코드입니다.
arr을 행의 배열로 만들어주고, arr각각의 요소에 다시 동적할당을 해줘서 열의 역할을 하도록 만들었습니다.
int main()
{
int A[3][3] =
{
{1,2,3},
{4,5,6},
{7,8,9}
};
int** B = malloc(sizeof(int*) * 3);
for (int i = 0; i < 3; i++)
B[i] = B + i * 3;
B = Transpose_Mat(A, 3);
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
printf("%d ", B[i][j]);
printf("\n");
}
return 0;
}
메인에도 전치행렬 담기위한 B행렬을 동적할당으로 만들어줬습니다.
코드가 좀 복잡한 감이 있네요ㅠ
전체코드입니다.
#include <stdio.h>
#include <stdlib.h>
int** Transpose_Mat(int *A, int n)
{
int** arr = malloc(sizeof(int*) * n);
for (int i = 0; i < n; i++)
arr[i] = malloc(sizeof(int) * n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
arr[i][j] = A[3*i + j];
}
int** B = malloc(sizeof(int*) * n);
for (int i = 0; i < n; i++)
B[i] = malloc(sizeof(int) * n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
B[j][i] = arr[i][j];
}
return B;
}
int main()
{
int A[3][3] =
{
{1,2,3},
{4,5,6},
{7,8,9}
};
int** B = malloc(sizeof(int*) * 3);
for (int i = 0; i < 3; i++)
B[i] = B + i * 3;
B = Transpose_Mat(A, 3);
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
printf("%d ", B[i][j]);
printf("\n");
}
return 0;
}
728x90
'프로그래밍 언어 > C' 카테고리의 다른 글
2차원 배열을 함수의 매개변수로 전달하기#1(c언어) (1) | 2021.07.03 |
---|