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;
}
}
출력 결과:
매크로 상수값을 약간 조정하면 이렇게도 크기를 바꿀 수 있습니다.
'자작 프로그램' 카테고리의 다른 글
| 자바로 구현한 로또 번호 생성 프로그램 (0) | 2012.02.03 |
|---|---|
| 완전 심플 메모장 프로그램 (옴니아 Windows CE용) (0) | 2011.10.09 |
| C++로 구현해 본 간단 스택 (0) | 2011.07.19 |
| Windows Mobile용 스톱워치 프로그램 (0) | 2011.04.25 |
| 간단한 C# LINQ 식 예제 (0) | 2011.03.20 |