월레스와 그로밋: 코딩의 날

hourglass(모래시계) 본문

Etc/C

hourglass(모래시계)

구운 감자 2025. 1. 26. 18:24

main.c

#include "hourglass.h"

int main()
{
	input();

	return 0;
}

hourglass.h

#define _CRT_SECURE_NO_WARNINGS

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

void input();
int input_num();

int sandclock(int num);

hourglass.c

#include "hourglass.h"

void input()
{
	int system_num = 0;

	do {
		printf("숫자 입력 (0: 프로그램 종료) >> ");
		int num = input_num();

		system_num = sandclock(num);

		Sleep(3000);
		system("cls");

	} while (system_num);  // system_num 이란 제어 변수 사용, system_num이 0일 시 종료
}

int input_num()
{
	int num;

	scanf("%d", &num);

	return num;
}

int sandclock(int num)
{
	int system_num = 0;

	num = num < 0 ? -(num) : num;  // num 음수면 양수로 만들기

	if (num % 2 == 0 && num != 0)  //num이 0이 아닌 짝수
	{
		printf("\n");

		int k;

		for (int i = 1; i <= num / 2; i++)
		{
			for (k = 0; k < i - 1; k++)
			{
				printf(" ");
			}
			for (int j = num + 1 - i - k; j >= 1; j--)
			{
				printf("*");
			}
			printf("\n");
		}

		for (int i = 1; i <= num / 2 - 1; i++)
		{
			for (int k = (num / 2) - 1 - i; k > 0; k--)
			{
				printf(" ");
			}
			for (int j = 1; j <= i * 2 + 2; j++)
			{
				printf("*");
			}
			printf("\n");
		}
		system_num = 1;
	}

	else if (num % 2 == 1)  // num이 홀수
	{
		printf("\n");

		int k;

		for (int i = 1; i <= (num + 1) / 2; i++)
		{
			for (k = 0; k < i - 1; k++)
			{
				printf(" ");
			}
			for (int j = num + 1 - i - k; j >= 1; j--)
			{
				printf("*");
			}
			printf("\n");
		}

		for (int i = 1; i <= num / 2; i++)
		{
			for (int k = (num / 2) - i; k > 0; k--)
			{
				printf(" ");
			}
			for (int j = 1; j <= i * 2 + 1; j++)
			{
				printf("*");
			}
			printf("\n");
		}

		system_num = 1;
	}

	else if (num == 0)  // 0이면 프로그램 종료
	{
		printf("\n프로그램 종료!\n");

		system_num = 0;
	}

	return system_num;
}

output

숫자 입력 (0: 프로그램 종료) >> 10

**********
 ********
  ******
   ****
    **
   ****
  ******
 ********
**********

 

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

kiosk(카페 키오스크)  (0) 2025.01.26
rsp_game(묵찌빠 게임)  (0) 2025.01.26
369  (0) 2025.01.26
스택(stack)  (0) 2023.07.31
이중연결리스트 사용 예시 (대기자명단)  (0) 2023.07.27