본문 바로가기
반응형

Programming406

Win32 Sierpinsky Triangle 그리기 프랙탈을 그리는데 일반적으로 많이들 해보는 것이 코시곡선, 맨델브로트 집합 등인 듯 합니다. 여기서는 간단하게 Win32 API를 이용해서 Sierpinsky 삼각형을 그려보도록 합니다. 일단 이 프로그램을 이해하기 위해서는 Win32의 기본적인 프로그램 구조를 알아야 하겠죠. 프랙탈 자체가 자기 복제이기 때문에 이미지를 축소시켜서 복사하는 방법도 있겠지만, 여기서는 순수하게 라인만 가지고 그려봅니다. 프랙탈이 자기 복제이므로, C/C++ 프로그램에서도 자기복제가 되는 자기호출함수를 이용해서 프로그램을 짭니다. 정삼각형을 자기복제를 이용해서 그리면, 전체를 그리지 않아도 훌륭하게 완성됩니다. 여기서는 가장 중요한 키 함수만 소개하면 다음과 같습니다. void DrawTriangle(HDC hdc, flo.. 2014. 4. 29.
C/C++ 에서 변수 선언자의 위치에 따른 차이 일반적으로 C/C++ 프로그램을 짜다 보면, const, *, &, volatile 등 변수 타입에 붙는 많은 형태를 쓰게 됩니다. 그런데 많이들 헷갈려하시는 것이 변수 타입에 붙는 수식어가 어떤 영향이 있는가입니다. 여기에 간단한 프로그램을 소개합니다. #include void main() { int a = 10, b = 5; const int *p1 = &a; int * const p2 = &a; printf("a = %d, *p1 = %d, *p2 = %d\n", a, *p1, *p2); //*p1 = 3;//p1이 const int의 포인터이므로 변수에 값 저장 불가 //printf("a = %d, *p1 = %d, *p2 = %d\n", a, *p1, *p2); *p2 = 4; printf("a.. 2014. 3. 11.
캐시에 의한 효율성 캐시에 의한 효율성 서버 프로그램을 하면서 가장 고려를 해야 하는 부분은 메모리에 의한 병목현상(bottleneck)입니다. 이러한 병목현상을 줄이기 위해서 최소한의 메모리 복사가 이루어져야 하는 것은 당연하겠지만, 자료구조를 비롯해서 캐시를 잘 활용해야 합니다. 서버로 사용하는 CPU는 캐시 메모리가 큰 것을 일반적으로 사용합니다. 그만큼 캐시에 대한 이해도가 높아야 하겠죠. 캐시는 CPU와 메모리 사이에 위치하면서, 느린 메모리 속도를 보완해주는 역할을 합니다. 최근의 CPU 캐시는 일반적으로 L1, L2, L3 로 나누어집니다. L1 캐시가 CPU와 가장 근접해 있는 것이라고 생각하시면 됩니다. L2는 L1을 보완해주는 역할을 주로 합니다. L3 캐시는 L1, L2와 달리 코어간 공유 캐시로 사용됩.. 2012. 1. 25.
트레이 프로그램 작성 프로그램을 개발할 때, 트레이(tray)에만 표시되고 화면에 표시되지 않는 프로그램을작성하고 싶을 때가 있습니다. 프로그램이 화면에 표시되지 않게 하는 방법은 간단합니다. 화면을 보여주지 않으면 됩니다. 그렇게 하면 작업 표시줄에도 아무런 표시가 생기지 않습니다. 그렇게 한 후 트레이에 아이콘만 표시하면 됩니다. 트레이에 아이콘을 표시하는 방법은 윈도우 API에 있지는 않습니다. 트레이를 관리하는 주체는 쉘(Shell)입니다. 쉘에 대해서 간단하게 설명하자면, 윈도우 운영체제와 사용자를 이어주는 역할을 해준다고 보시면 됩니다. 트레이 영역은 윈도우 운영체제가 아닌 쉘이 담당하는 부분입니다. 쉘 명령어를 이용하면 간단하게 트레이에 아이콘을 표시할 수 있고, 트레이 아이콘에서 간단한 마우스 입력을 받을 수도.. 2011. 11. 28.
숫자 야구 게임 만들기 Making baseball game. 숫자로 즐길 수 있는 숫자 야구게임은 어느정도 머리를 쓰면서 하는 게임이라 중고등학교를 다니면서 한두번씩은 접해본 적이 있는 게임일겁니다. 요즘은 컴퓨터 게임이 대세니 이런 장난스러운 게임도 안 할지도 모르겠네요. 서로 숫자를 생각하고 숫자맞추기를 하는 게임입니다. 한사람이 세자리 숫자를 생각합니다. 이 세자리 숫자의 각 자릿수는 서로 달라야 합니다. 맞추어야 하는 사람은 같은 규칙의 세자리 숫자를 제시합니다. 같은 자리의 숫자가 맞은 경우에는 스트라이크를, 다른 자리의 숫자가 맞은 경우에는 볼을 셉니다. 3 strike가 될 때까지 숫자를 제시해야 하며, 서로 더 적은 횟수만에 숫자를 맞추면 이기는 게임입니다. 예를 들어서 431 이라는 숫자를 생각했고, 제시한 .. 2011. 11. 20.
Eight queens problem 체스판에서 8개의 퀸을 서로 죽이지 않도록 배치하는 문제는 알고리즘에서 많이 다루어집니다. 여기서는 알고리즘의 문제도 있지만, 어떻게 프로그램을 작성해야지 더 효율적일지를 생각해볼까 합니다. 체스에서 퀸은 전후좌우 그리고 대각선까지 장애물이 있지 않는 한 원하는 칸 수만큼 이동할 수 있습니다. 체스판에서 8개의 퀸을 어떻게 배치하면 서로 잡을 수 없는 위치에 놓일까 하는 것입니다. 이 조건을 간단하게 정리하면 다음과 같습니다. 각 열에는 오직 하나의 퀸만 존재해야 한다. 각 행에는 오직 하나의 퀸만 존재해야 한다. 각각의 퀸의 대각선에 다른 퀸이 존재해서는 안 된다. 여기서 첫번째 조건과 두번째 조건은 손쉽게 프로그램으로 작성할 수 있습니다. 만약 8개의 룩(Rook)을 가지고 이 문제를 냈다면, 수학적.. 2011. 11. 14.
728x90