본문 바로가기

자작 프로그램

숫자 출력 시리즈 1편 - 무지개 피라미드

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

숫자 출력 시리즈 1편입니다.
구 버전 Borland C++용 함수들을 썼기 때문에 현재 버전의 Visual Studio에서는 컴파일이 안 될 수 있습니다.

 

/*
 * 삼각, 역삼각 숫자 출력 프로그램
 * 작성자: tapitolife
 *         http://tapito.tistory.com
 *         http://kin.naver.com/profile/dkhighest
 * 사용 환경: Borland C++ 3.1, Windows 3.1
 * 
 */

#include <stdio.h>
#include <conio.h>

#define BUFCOL 5 // 버퍼의 열 수를 설정합니다.
#define BUFROW 8 // 버퍼의 행 수를 설정합니다.
#define NUMMIN 1 // 숫자의 최소 값을 설정합니다.
#define NUMMAX 40 // 숫자의 최대 값을 설정합니다.

// 버퍼의 열이 홀수인지 검사합니다.
#if (((BUFCOL >> 1) << 1) == BUFCOL)
#error "버퍼의 열은 홀수여야 합니다."
#error "BUFCOL % 2 != 1"
#endif

// NUMMIN, NUMMAX의 범위를 검사합니다.
#if (!((1 <= NUMMIN) && (NUMMIN <= NUMMAX)))
#error "!(1 <= NUMMIN <= NUMMAX)"
#endif

int forecolor(const int depth);
int backcolor(const int depth);

int main()
{
	// 출력할 내용이 보관되는 2차원 배열 버퍼
	int aBuffer[BUFCOL][BUFROW];
	// 배열에 접근하기 위한 인덱스 변수
	int i, j;
	// 배열에 넣을 값과 그 증감
	int value = 1, vstep = +1;
	// 색상을 지정할 때 쓰이는 깊이와 그 증감
	int depth = 0, dstep = +1;
	// 행에 채워넣을 숫자의 수
	int rowcount = 1, rstep = +1;
	// 텍스트 서식 정보
	struct text_info ti;

	clrscr();

	// 직각삼각형으로 숫자들을 배열합니다. 
	for(i = 0; i < BUFROW; i++) // n회 수행
	{
		for(j = 0; j < BUFCOL; j++) // n회 수행
		{
			if(j < rowcount) // 1
			{
				aBuffer[j][i] = value; // 3

				if(NUMMIN == NUMMAX) vstep = 0; // 2
				else if(value == NUMMIN) vstep = +1; // 2
				else if(value == NUMMAX) vstep = -1; // 2

				value += vstep; // 2
			}
			else
			{
				aBuffer[j][i] = 0; // 3
			}
		}

		rowcount += rstep;
	}
	// 연산 속도 O(n) = n^2


	gettextinfo(&ti);
	window(30, 9, 50, 19);

	for(i = 0; i < BUFROW; i++)
	{
		depth = i; dstep = -1;

		for(j = 0; j < BUFCOL; j++)
		{
			textcolor(forecolor(depth));
			cprintf("%02d ", aBuffer[j][i]);
			depth += dstep;
		}

		cprintf("\n\r");
	}

	textcolor(ti.normattr);
	getch();
}

int forecolor(const int depth)
{
	switch(depth)
	{
		case 0 : return LIGHTRED;
		case 1 : return LIGHTMAGENTA;
		case 2 : return YELLOW;
		case 3 : return LIGHTGREEN;
		case 4 : return LIGHTBLUE;
		case 5 : return BLUE;
		case 6 : return MAGENTA;
		default : return LIGHTCYAN;
	}
}

 

출력 결과:

매크로 상수값을 약간 조정하면 이렇게도 크기를 바꿀 수 있습니다.