본문 바로가기

Embeded C/C언어 예제

C언어 달팽이배열


배열의 응용인 달팽이 모양의 배열을 가지는 프로그램을 작성해 보겠습니다


달팽이 배열이란 아래 그림과 같이 배열이 선언된 배열을 뜻합니다


배열을 가리키는 화살 모양대로 1부터 16까지 값을 저장한


그림과 같이 출력하면 됩니다

이 숫자들을 분석하면

 

4칸 이동: y값이 1증가하는 배열   arr[x][y+1]    (0,0) (0,1) (0,2) (0,3)

3칸 이동: x값이 1증가하는 배열   arr[x+1][y]    (1,3) (2,3) (3,3)


3
칸 이동: y값이 1감소하는 배열   arr[x][y-1]    (3,2) (3,1) (3,0)

2칸 이동: x값이 1감소하는 배열   arr[x-1][y]    (2,0) (1,0)


2
칸 이동: y값이 1증가하는 배열   arr[x][y+1]    (1,1) (1,2)

1칸 이동: x값이 1증가하는 배열   arr[x+1][y]    (2,2)


1
칸 이동: y값이 1감소하는 배열   arr[x][y-1]    (2,1)


위와 같은 형태를 보입니다

x y기준으로
xy문이 반복적으로1씩 증가(+) 감소를 (-) 반복합니다
1칸씩 이동간격이 줄어듭니다( 4 33 22 11 )

변수를 선언해보겠습니다
int arr[x][y]   //배열선언
int u = 1         //+1을 해주는 변수

int j = 4          //4칸이동부터 시작하기 때문에 
int i               //j와 비교하여 for문을 돌리기 위하여

int num         // arr에 저장할 정수 값

예상구조는 크게 두부분으로 나눌수 있습니다

int main()

1) 배열의 값을 저장 하는 부분

for(4번 실행 그후 33 22 11 번 실행)
    for(y축으로 이동하며 y값증가 및 감소)
    j--; (4 33 22 11순으로 칸이동)
    for(x축으로 이동하며 x값증가 및 감소)
    u = u*-1; (2줄씩 +1, 그다음 2줄 -1 반복 // 양수와 음수를 1씩 더해주기 위해)


2) 배열의 값을 출력만 하는 부분

for()
   for() printf("%d"arr[x][y])

   printf("\n")

저장후에 출력하는 것이 좋다고 판다되어 2부분으로 나누었습니다

이구조를 바탕으로 하여 작성하면 아래와 같습니다>>>

#include <stdio.h>

 

 int  main()

{

  int arr[30][30];

  int i;

  int x = 0;

  int y = -1;

  int u = 1;

  int num = 1;                   //초기 시작값은1

  int j = 4;

 /*       저장 부분       */

for(;0<=j;)

{

             for(i=0;i<j;i++)         //

             {

                           y=y+u;

                           arr[x][y]=num;

                           num++;

             }

             j--;                      //4 33 22 11번 실행            

            for(i=0;i<j;i++)        //

           {

                        x=x+u;

                        arr[x][y]=num;

                        num++;

            }

   

            u=u*-1;                 //양수 음수변환

}

 /*       출력 부분       */
              
for(x=0;x<4;x++)
             {   

                           for(y=0;y<4;y++)

                         {

                                      printf("%4d",arr[x][y]);

                         }

            printf("\n");

             }

 

            return 0;

}



정상적으로 출력이 됩니다

보너스로 가로세로 10줄을 가지는 복잡한 달팽이 배열도 조금만 수정하면 간단하게 바꿀수 있습니다

1)배열수정
int arr[30][30] //넉넉하게 배열 선언

2)변수값 수정
int j=10;          //10 99 88 77 순으로 저장하기 위해서

3)출력부분 수정
for(x=0;x<10;x++)
             {   

                           for(y=0;y<10;y++)

                         {

이상 3가지를 수정하면 조금 더 복잡한 달팽이 배열을 만들수 있습니다