배열의 응용인 달팽이 모양의 배열을 가지는 프로그램을 작성해 보겠습니다
달팽이 배열이란 아래 그림과 같이 배열이 선언된 배열을 뜻합니다
배열을 가리키는 화살 모양대로 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 arr[30][30];
int i;
int x = 0;
int y = -1;
int u = 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가지를 수정하면 조금 더 복잡한 달팽이 배열을 만들수 있습니다
'Embeded C > C언어 예제' 카테고리의 다른 글
C언어 선택정렬법 (0) | 2011.10.26 |
---|---|
C언어 달팽이배열(2차원동적배열 적용) (1) | 2011.06.24 |
C언어로 Lotto 프로그램(배열, 포인터) (1) | 2011.06.10 |
C언어 입력받은 char형 데이터 두개를 서로 바꾸는 프로그램 (0) | 2011.06.10 |
C언어 섭씨(Celsius) 온도를 화씨(Fahrenheit)로 변환 그반대도 가능한 프로그램 (0) | 2011.06.09 |