# include <stdio.h>
# include <string.h>
# include <stdlib.h>
# define R 3
# define C 3
typedef struct RotateMatrix
{
int mat[R][C];
/*
0 0 0
0 0 0
0 0 0
*/
}RotateMat, *ptrRotateMat;
// prototype of function
// 1.
ptrRotateMat creatNode();
// 2.
void matElementSet(RotateMat**);
// 3.
void matPrintf(RotateMat**);
// 4.
void matRotate(RotateMat**, int);
int main(void)
{
ptrRotateMat matrix = NULL;
matrix = creatNode();
matElementSet(&matrix);
matPrintf(&matrix);
matRotate(&matrix, 3);
matPrintf(&matrix);
return 0;
} // end of main function
ptrRotateMat creatNode()
{
ptrRotateMat mat = NULL;
mat = (ptrRotateMat)malloc(sizeof(RotateMat));
if (mat == NULL)
{
exit(1);
}
else
// mat != NULL
{
memset(mat, 0, sizeof(RotateMat));
return mat;
}
} // end of creatNode function
void matElementSet(RotateMat** M)
{
int tmpRow = 0;
int tmpCol = 0;
int element = 1;
int tmpCnt = 0;
while (tmpCnt != 9)
{
(*M)->mat[tmpRow][tmpCol] = element++;
tmpCol++;
if (tmpCol == 3)
{
tmpRow++;
tmpCol = 0;
}
tmpCnt++;
}
} // end of matElementSet function
void matPrintf(RotateMat** M)
{
int i, j; // index
for (i = 0; i < R; i++)
{
for (j = 0; j < C; j++)
{
printf("%d ", (*M)->mat[i][j]);
}
printf("\n");
}
} // end of matPrintf function
void matRotate(RotateMat** M, int RotateCnt)
{
int i, j, k; // index
int temp[R][C] = { 0, }; // 3by3
for (i = 0; i < RotateCnt; i++)
{
// 행렬 보존
for (j = 0; j < R; j++)
{
for (k = 0; k < C; k++)
{
temp[j][k] = (*M)->mat[j][k];
}
}
// 행렬 회전
for (j = 0; j < R; j++)
{
for (k = 0; k < C; k++)
{
if (j == 0) {
(*M)->mat[j][k] = temp[k][2];
/*
[0, 0] = [0, 2]
[0, 1] = [1, 2]
[0, 2] = [2, 2]
*/
}
else if (j == 1) {
(*M)->mat[j][k] = temp[k][j];
/*
[1, 0] = [0, 1]
[1, 1] = [1, 1]
[1, 2] = [2, 1]
*/
}
else { // j == 2
(*M)->mat[j][k] = temp[k][0];
/*
[2, 0] = [0, 0] 값 보존
[2, 1] = [1, 0] 값 보존
[2, 2] = [2, 0] 값 보존
*/
}
}
}
}
}
'언어 > c언어' 카테고리의 다른 글
두 점 사이의 거리 (0) | 2017.08.25 |
---|---|
c언어 affine (0) | 2017.08.23 |
메모리 누수 확인 (0) | 2017.08.08 |
자료형(sizeof) (0) | 2017.08.08 |
오버 플로우 됬는지 확인하는 코드 (c언어) (0) | 2017.07.30 |