배열 포인터를 활용한 문제를 풀던중 의문이 들었어요~

조회수 559회
#include<stdio.h>

void rotate(int(*ptr)[4])
{
    int i,j;
    int temp[4][4];
    for(i=0;i<4;i++)
    {
        for(j=0;j<4;j++)
        {
            temp[i][j]=ptr[3-j][i];
        }
    }
    for(i=0;i<4;i++)
    {
        for(j=0;j<4;j++)
        {
            ptr[i][j]=temp[i][j];
        }
    }
}

void howmanytimes(int n,void(*ptr1)(int(*ptr2)[4]))
{
    int i=0;
    int a,b;
    while(i<n)
    {
        ptr1(ptr2);
        for(a=0;a<4;a++)
        {
            for(b=0;b<4;b++)
            {
                printf("%1d",ptr2[a][b]);
            }
            printf("\n");
        }
        printf("\n");
        i++;
    }
}
int main(void)
{
    int arr[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
    int num=2;
    printf("회전을 몇번 하실건가요?");
    howmanytimes(num,rotate(arr));
    return 0;
}

4x4 의 int형 2차원 배열에서 입력한 횟수만큼 요소들을 오른쪽 방향으로 90도씩 이동시켜서 그 결과를 각각 출력시키는 프로그램 소스를 짜는건데요, 실행을 하는데 어느 부분들이 틀렸는지 잘 모르겠어요 ㅠㅠ

  • 에러 메시지가 없나요? 엽토군 2018.8.26 23:22

2 답변

  • 함수 포인터를 약간 이상하게 쓰신듯 해서 코드를 조금 수정했습니다. 요새 C 컴파일러가 어떤 방식으로 동작하는지 몰라서 "코드실행기"가 인식하도록만 코드를 바꿔봤네요.

    include

    void rotate(int(*ptr)[4]) { int i,j; int temp[4][4]; for(i=0;i<4;i++) { for(j=0;j<4;j++) { temp[i][j]=ptr[3-j][i]; } } for(i=0;i<4;i++) { for(j=0;j<4;j++) { ptr[i][j]=temp[i][j]; } } }

    void howmanytimes(int n,void(function)(int()[4]), int(*ptr2)[4]) { int i=0; int a,b; while(i<n) { function(ptr2); for(a=0;a<4;a++) { for(b=0;b<4;b++) { printf("%02d ",ptr2[a][b]); } printf("\n"); } printf("\n"); i++; } }

    int main(void) { int arr[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; int num=1;

    howmanytimes(num,&rotate,arr);
    return 0;
    

    }

    • (•́ ✖ •̀)
      알 수 없는 사용자
  • 함수 포인터 쓰시려던게 아닌 것 같아 최소 수정했습니다.

    #include <stdio.h>
    
    void rotate(int (*arr)[4]) {
      int i, j;
      int temp[4][4];
      for (i = 0; i < 4; i++) {
        for (j = 0; j < 4; j++) {
          temp[i][j] = arr[3 - j][i];
        }
      }
      for (i = 0; i < 4; i++) {
        for (j = 0; j < 4; j++) {
          arr[i][j] = temp[i][j];
        }
      }
    }
    
    void howmanytimes(int n, int (*arr)[4]) {
      n = (n & 3);
      for (int i = 0; i < n; i++) {
        rotate(arr);
      }
      for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
          printf("%02d ", arr[i][j]);
        }
        printf("\n");
      }
      printf("\n");
    }
    
    int main(void) {
      int arr[4][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
      int num = 2;
      printf("회전을 몇번 하실건가요?");
      return 0;
    }
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)