본문 바로가기
Programming/C

[C] 모래시계, 나비 프로그램 만들기

by graygreat 2017. 4. 19.
728x90
반응형


 (1) 모래시계와 나비 배열, 배열의 크기를 갖는 구조체 만들기


 (2) num을 입력 받고 create() 함수 만들기
   void create(ArrStruct *arr, int num) {
     // num에 맞추어 구조체 내에 모래시계, 나비 배열 만들기
     // num = 5 (홀수만 합시다.)
    Ex. 모래시계
     [1][1][1][1][1]
     [0][1][1][1][0]
     [0][0][1][0][0]
     [0][1][1][1][0]
     [1][1][1][1][1]
    Ex. 나비
     [1][0][0][0][1]
     [1][1][0][1][1]
     [1][1][1][1][1]
     [1][1][0][1][1]
     [1][0][0][0][1]  

   }


 (3) print() 함수를 이용하여 출력하기
   void print(ArrStruct *arr) {
     // 모래시계 출력
     // 나비 출력
   }




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

// ArrStruct 구조체 선언
typedef struct sand_butter{
    char **sandclock;
    char **butterfly;
    int size;
} ArrStruct;

// create 함수
void create(ArrStruct *arr, int num){
    int center, i, j;
             
    arr->size = num;    // num값을 ArrStruct 구조체의 size에 넣어줌
    
    // sandclock 동적할당
    arr->sandclock = (char **)malloc(sizeof(char *) * num);
    for(i = 0; i < num; i ++) 
        arr->sandclock[i] = (char *)malloc(sizeof(char) * num);
        
    center = num / 2;
        
    // sandclock 알고리즘
    for(i = 0; i < num; i++){
        for(j = 0; j < num; j++){
            if(i <= center){
                if(j >= i && j < (num - i))
                    arr->sandclock[i][j] = '*';
                else
                    arr->sandclock[i][j] = ' ';
            }
            else {
                if(j >= num - (i + 1) && j <= i)
                    arr->sandclock[i][j] = '*';
                else
                    arr->sandclock[i][j] = ' ';
            }
        }
    }

    // butterfly 동적할당
    arr->butterfly = (char **)malloc(sizeof(char *) * num);
    for(i = 0; i < num; i++)
        arr->butterfly[i] = (char *)malloc(sizeof(char) * num);

    // butterfly 알고리즘
    for(i = 0; i < num; i++){
        for(j = 0; j < num; j++){
            if(i <= center){
                if(j <= i  || (num - i) <= (j + 1) )
                    arr->butterfly[i][j] = '*';
                else
                    arr->butterfly[i][j] = ' ';
            }
            else {
                if(j <= num - (i + 1) || j >= i)
                    arr->butterfly[i][j] = '*';
                else
                    arr->butterfly[i][j] = ' ';

            }
        }
    }
}

// print 함수
void print(ArrStruct *arr){
    int i, j;
    // sandclock 출력
    for(i = 0; i < arr->size; i++){
        for(j = 0; j < arr->size; j++){
            printf("%c", arr->sandclock[i][j]);
        }
        printf("\n");
    }
    printf("\n\n\n\n");

    // butterfly 출력
    for(i = 0; i < arr->size; i++){
        for(j = 0; j < arr->size; j++){
            printf("%c", arr->butterfly[i][j]);
        }
        printf("\n");
    }
}

int main(){
    int i, num;
    printf("수 입력 : ");
    scanf("%d", &num);

    // 짝수 거르기
    if(num % 2 == 0){
        printf("홀수만 입력하세요. \n");
        return 0;
    }

    // ArrStruct 구조체 동적할당
    ArrStruct *arr = (ArrStruct *)malloc(sizeof(ArrStruct) * 1);

    create(arr, num);   // create 함수 호출

    print(arr);     // print 함수 호출

    for(i = 0; i < num; i++){
        free(arr->sandclock[i]);
        free(arr->butterfly[i]);
    }
    free(arr->sandclock);
    free(arr->butterfly);
    free(arr);

    return 0;
}



반응형

'Programming > C' 카테고리의 다른 글

[C] text file 정렬  (0) 2017.05.13
[C] 버블 정렬과 선택 정렬  (0) 2017.05.13
[C] 포켓몬 연습 문제 2  (0) 2017.04.19
[C] 포켓몬 연습 문제 1  (0) 2017.04.19
[C] 문자열 패턴 찾기  (0) 2017.04.10

댓글