티스토리 뷰

안녕하세요, IT디자이너입니다.

 

이번에는 재귀함수를 활용하여 간단한 페인트? 프로그램을 구현하였습니다. 

 

보통 포토샵에서 특정 색상을 선택 후 특정 구역을 클릭하면 해당 구역만 색칠되는 기능을 활용해보셨을 것입니다.

 

 

- 프로그램의 실행 결과 예시

 

위 사진처럼 '0'으로된 값을 찾아서 '.' 으로 변경하는 코드입니다. 

 

변경된 후

실행 결과 인접해있지 않은 '0'은 '.' 으로 토글되지 않는 모습입니다.

 

※ 팁 !! 재귀 함수를 이용해서 배열의 가로와 세로를 if문으로 비교 후 '0'이면 토글시키면 됩니다.!!

 

꼭 혼자 힘으로 시도 후 답을 보셨으면 합니다.!!! 

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

 

#include <stdio.h>
#include <Windows.h>
#include <string.h>



void test(char(*arr)[18], int column, int row) {

    Sleep(50); // sleep을 이용하여 출력의 속도를 조금 늦춥니다.

    system("cls"); // 콘솔창을 클리어하는 코드입니다. 

    for (int i = 0; i < 9; i++) { // 배열의 값을 전체 출력

        for (int j = 0; j < 18; j++) {

            printf_s("%c", arr[i][j]);

        }
        printf_s("\n");
    }



    if (arr[column][row + 1] == '0') { // 오른쪽으로 증가 후 0일 경우 if문 통과

        arr[column][row + 1] = '.'; // '.'으로 토클!

        test(arr, column, row + 1); // 재귀함수를 이용하여 매개변수의 값을 +1 씩 증가시킵니다.
    }


    if (arr[column][row - 1] == '0') {

        arr[column][row - 1] = '.';

        test(arr, column, row - 1);
    }


    if (arr[column + 1][row] == '0') {

        arr[column + 1][row] = '.';

        test(arr, column + 1, row);

    }


    if (arr[column - 1][row] == '0') {

        arr[column - 1][row] = '.';

        test(arr, column - 1, row);

    }
}




int main()
{

    char arr[][18] = {
        {' ','0','0',' ',' ',' ',' ','0','0','0',' ',' ',' ',' ',' ',' ','0','0'},
        {' ','0','0','0','0','0','0','0','0','0','0','0','0',' ',' ','0','0','0'},
        {'0','0','0','0','0',' ',' ','0','0','0','0','0','0',' ',' ','0','0','0'},
        {'0','0','0','0',' ',' ',' ','0','0','0','0','0','0','0','0','0','0','0'},
        {'0','0','0',' ','0',' ','0','0','0','0','0','0','0','0','0','0','0','0'},
        {'0','0',' ',' ','0',' ','0','0','0','0','0','0','0','0','0','0','0',' '},
        {'0','0',' ','0','0',' ','0','0','0','0','0','0','0','0','0','0',' ',' '},
        {' ','0',' ',' ','0',' ','0','0','0','0','0','0','0','0','0',' ',' ',' '},
        {' ',' ',' ',' ',' ',' ',' ',' ','0','0','0','0','0','0',' ',' ',' ',' '}

    };

    test(arr,5,10);
    

}

 

 


재귀함수를 이용해서 페인팅 프로그램을 구현해보았습니다. 사실 재귀함수는 스택에 계속해서 매개변수를 할당하기 때문에 그렇게 좋은 코드는 아닙니다.

 

모든 재귀함수는 재귀함수를 피하여 소스코드를 만들 수 있습니다.!!! 다음에는 재귀함수를 이용하지 않고 구현해보도록 하겠습니다.

 

 

이상  IT디자이너였습니다. 감사합니다.

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함