본문 바로가기
반응형

Programming400

이벤트 핸들링에서의 case 문장 이벤트 핸들링 방식으로 프로그램을 짠다면, 유용하게 사용할만한 방법입니다. Visual C/C++ 기준입니다. #if defined(_DEBUG) #define CASE(X) case X: OutputDebugString("[" #X "]\n") #else #define CASE(X) case X: #endif void proc(int event, unsigned short wParam, unsigned long lParam) { switch(event) { CASE(EVENT_START); { ... break; } .... } } 이런 식으로 프로그램을 짜면, 디버그 모드일때는 이벤트 값을 디버그 창에 계속 뿌려주게 됩니다. 릴리즈 모드일때에는 불필요한 코드를 없애줄 수 있습니다. 프로그램을 짤 때 .. 2011. 9. 16.
조건문의 최적화 방법 if 문장 안에 쓴 조건문의 표현 방식에 따라서 속도차이가 발생한다는 것입니다. 요즘 진보된 프로세서에서는 이것마저도.. 아주 훌륭하게 잘 처리되고 있지만.. (실제.. 조건문을 두세단계정도는 미리 계산하는 것이 요즘프로세서던가?? 테스트해보질 않아서.. 하하.. 나중에 기회가 되면 한번 속도 테스트해보아야지.. :) 예를 들어서 조건문 A의 확률이 80%, 조건문 B의 확률이 20%였다면, 다음의 두 조건문은 같은 기능을 하지만 속도에서는 약간 차이가 발생합니다. if(A || B) return; if(B || A) return; 이경우.. 첫번째 조건문은 80%확률로 A 조건을 검사하고, 20% 확률로 A 조건과 B 조건을 검사합니다. 두번째 조건문은 20% 확률로 B 조건을 검사하고 80% 확률로 .. 2011. 9. 16.
이중 링크드 리스트 만들기 (Making double linked list) 링크드 리스트가 단일인 경우에는 포인터로 처리하는 것이 좋겠지만, 이중인 경우에는 그게 만만치 않아요. 포인터로 관리하려면, 포인터가 NULL인 경우 처리가 필요합니다. 새로운 노드를 추가하는 경우에는 포인터가 NULL인지 검사해야 하고, 기존 노드를 삭제하는 경우에는 노드의 갯수가 1개인지를 검사해야 합니다. 그래서 사용하는 방법은 바로 이것입니다. 클래스만 설계해보면, class CNode { public: CNode *m_pPrev; CNode *m_pNext; }; class CIntNode : public CNode { public: int data; }; class CDLinkedList { public: CDLinkedList() { m_kRoot.m_pPrev = &m_kRoot; m_kR.. 2011. 9. 16.
미로찾기 프로그램 미로의 크기는 10x10 으로, [0,0] 이 입구, [ 9,9]를 출구로 했습니다. 미로로 사용되는 데이터파일에는 다음과 같은 형식으로 미로가 지정되어 있습니다. 0 0 1 1 1 1 1 1 1 1 1 0 0 0 1 1 0 0 0 1 ... 1 1 1 1 1 0 1 1 1 0 즉 갈 수 있는 셀(cell)은 0으로 갈 수 없는 셀은 1로 설정되어 있죠. 사용한 알고리즘은 제일 간단한 방법을 사용했습니다. 더 좋은 방법이 당연히 있지만.. 2011. 9. 16.
728x90