2018의 게시물 표시

심화반 예제 (화면 캡쳐)

이미지
이번에 만든 주제는 '화면 캡쳐' (Screen Capture)프로그램 입니다. 물론 더 우수한 화면 캡쳐 프로그램도 이미 많이 있지만, 우리의 목적은 늘 그렇듯이 프로그래밍 공부이죠. 공부를 위한 예제로서, 복잡한 개념은 제외하고 캡쳐와 이미지 저장에 포커스 를 맞춰 만들어 보았습니다. MFC 대화상자 기반의 화면 캡쳐 프로그램의 기능 은 아래와 같습니다. 1. 현재 스크린(화면전체) 캡쳐 2. 특정 윈도우만 캡쳐 3. 캡쳐된 이미지를 JPG, BMP 로 저장 그럼 그 설계 과정 을 한번 살펴볼까요. 1. 대화상자 프로젝트를 만들어 컨트롤을 배치 합니다. - 전체화면, 특정윈도우 선택 라디오 버튼 - 저장 옵션 JPG, BMP 라디오 버튼 - 전체화면 캡쳐 시 현재 캡쳐 스크린을 보여줄 픽쳐 컨트롤 - 특정 윈도우 선택 캡쳐 시 모든 윈도우를 표시할 리스트 박스 2. 캡쳐 대상 윈도우 DC 얻기 전체 화면(스크린 윈도우)을 캡쳐 하기 위해 윈도우 DC 얻기는 쉽습니다. GetDC()함수의 전달인자를 NULL로 넣어주면 전체 윈도우 DC를 얻을 수 있습니다.  HDC hdc = ::GetDC(NULL); 나중에 이 hdc를 이용해 이미지를 복사해 저장만 하면 끝이죠. 특정 윈도우만 캡쳐 하기는 이 보다 조금 복잡합니다. 먼저 현재 내 컴퓨터의 모든 윈도우 를 가져와야 합니다. 왜냐하면 어떤 특정 윈도우를 캡쳐할지 알 수 없기 때문에 모든 윈도우를 다 표시하고 사용자가 선택하게 만들기 위함입니다. 바로 아래 API 함수를 호출하면 모든 윈도우의 핸들(HWND)을 가져올 수 있습니다. BOOL EnumWindows(   WNDENUMPROC lpEnumFunc,   LPARAM      lParam ); 첫 전달인자는 콜백함수의 포인터 입니다. 두번째 전달인자는 콜백함수에 전달할 값입니다. 따라서 EnumWidnows 함수호출시 사용할 콜백함수가 하

파이썬 프로그래밍과정 개설안내

이미지
많은 프로그래밍 언어가 있지만, 요즘 가장 뜨거운 관심을 받는 것은 단연 파이썬 언어입니다. 파이썬은 1991년에 출시되었으며, 창시자인 네덜란드의 "귀도 반 로섬"은 1989년 크리스마스 주간에 연구실 문이 닫혀있어 심심해서 만들었다고 합니다. 아직 우리나라에서 일부 스타트업 기업이나, 머신러닝 분야 종사자들이 주로 사용중이지만,  그 사용자 층이 급격히 증가하고 있으며, 이미 외국에서는 기업, 교육기관에서 주류 언어로 자리잡아 가고 있습니다. 모든 프로그래밍 언어에는, 그 언어만의 철학과 강점, 단점이 존재합니다. 만약 어떤 프로그래밍 언어가 모든 면에서 우수하다면, 다른 언어가 존재할 이유가 없겠지요. 제가 느끼는 파이썬의 가장 큰 강점은 문법이 간결 하여 다른 프로그래밍 언어에 비해 배우기 쉽다 는 점이 아닐까 합니다. 또한, 개발 속도가 타 언어에 비해 빠르고, C, C++과의 연동도 아주 우수합니다. 또한, 제 개인적 관심분야인 머신러닝 계열 (특히, MS CNTK)의 샘플 코드들이 파이썬으로 만들어진 것들이 많아 저도 재미있게 공부해 가고 있습니다. 물론 C, C++에 비해 실행속도가 느리다는 단점은 존재하나, 이는 파이썬을 깊게 공부하면 충분해 해결 가능한 문제입니다. (C++과 접착을 통해, 다만 간단하진 않습니다) 간략히, 파이썬 언어의 장, 단점을 설명드렸고, 학원 파이썬 강좌는  5개월 과정으로 파이썬 교육(이론, 코드 실습)이 진행 됩니다. 아무것도 모른다고 가정하고 교육을 진행하므로, 수업에 대한 부담은 필요없으나, 영어 타자는 사전 연습이 필요 합니다. [파이썬 기초과정 커리큘럼] 1. 하드웨어 소프트웨어 개념 2. 파이썬 기본 자료형 (숫자, 문자, 리스트, 튜플) 3. 이산 수학 기본 (2진수, 논리, 비트 연산 등) 4. 함수(기본개념, 내장, 외장함수) 5. 파이썬 고급 자료형 (딕셔너리, 집합) 6. 제어 명령문(반복, 조건문)

어떤 프로그래밍 언어를 배워야 할까

이미지
제가 많이 듣는 질문중에 하나입니다. 1. 코딩을 처음 접하는 분은 코딩이 무엇인지 물어봅니다. 코딩은 소프트웨어(같은 표현으로 Program, Application)를 만드는 것을 말합니다. 윈도우, 안드로이드, 카카오톡, 게임, 파워포인트 모두 소프트웨어 입니다. 좀 더 정확히 이야기 하자면 윈도우, 안드로이드는 해당 전자기기 내부를 통합(하드웨어, 소프트웨어 모두) 관리하는 운영체제 소프트웨어 (Operating System, OS )이며, 카카오톡, 게임, 파워포인트는 응용소프트웨어( App lication) 라고 분류합니다. 운영체제 소프트웨어는 각종 앱도 관리해야 하며, 모니터, 메모리, 하드디스크 등 하드웨어  기기도 모두 관리해야 하는 막중한 역활을 담당하고 있습니다. 따라서, 운영체제 소프트웨어(이하 OS)를 만드는 것은 응용소프트웨어(이하 앱)을 만드는 것에 비해 상당한 시간과 기술이 필요합니다. 우리가 알고있는 OS는 윈도우즈, iOS, Android, Unix, Linux 등 몇 가지 없습니다. 그만큼 상용화하기 어려운 기술이며, 표준화(대중화) 시키기도 쉽지 않습니다. OS의 종류 일반적으로 우리가 말하는 코딩은 앱(카카오톡, 게임, 파워포인트 등)을 만드는 것을 의미합니다. 좀 더 자세히 표현하면 어떤 OS에 설치되어 동작하는 특정한 목적을 가진 소프트웨어를 만들는 것 이라고 설명드리고 싶습니다. OS든 앱이든 그것을 만들기 위해서는 2진수 기반(전기의 있음 1, 없음 0, 즉 디지털)으로 동작하는 컴퓨터에 내가 원하는 목적에 맞게 동작하도록 명령 을 내려야 하는데요, 이런 명령어들의 조합을 0과 1로만 인간이 작성한다면 굉장히 복잡한 형태가 될 것입니다. 예를 들면 이런 형태의 명령이 될 것입니다. 01110010111111001101110111....  (난해합니다) 왜냐하면 컴퓨터는 정말

Visual Studio 설치하기

이미지
Visual Studio (이하 VS) 는 MS사에서 만든 통합 개발 환경도구(IDE)입니다. C, C++, C#, Python 등의 언어를 지원하며, 프로그래밍 언어를 이용해 소프트웨어 개발이 가능하도록 만들어 주는 프로그램입니다. (보통은 개발 툴, 또는 IDE 라고 이야기합니다) 버전은 커뮤니티(무료), 프로(유료), 엔트프라이즈(유료) 3가지가 있습니다. 무료 버전은 학생, 개인 개발자, 오픈소스용으로 사용 가능 하며, 이름은 Community 버전이라 부릅니다. 버전별로 개발 규모에 따른 약간의 차이는 존재하나 무료버전(Community)으로도 학원에서 배우는 모든 과정을 다 개발, 수정, 빌드가 가능 합니다. 현재 최신 빌드 버전은 VS 2017버전이 있지만, 버그도 존해하며, 지속적으로 업데이트가 진행중이라 학원에서는 VS 2015 버전을 기준 으로 수업합니다. 자, 이제 어떻게 설치하는지 알아 볼까요. 참고로 VS를 설치하고 사용하게 위해서는 MS 계정이 하나 필요합니다. 무료로 계정을 만들 수 있으니 아래 VS를 설치해 가면서 안내에 따라 만들면 됩니다. 1.  MS VS 다운로드 사이트로 접속  (링크 클릭) 아래와 같은 사이트로 연결되며, 최신 버전인 VS 2017을 다운로드 하는 메뉴가 보입니다. 우리는 VS 2015 버전을 설치할 계획이므로 좀 더 다운로드 페이지의 아래로 내려보면 이전 버전을 다운로드 할 수 있는 링크를 찾을 수 있습니다. 2. 이전 버전을 선택 자, 이제 VS 2015 버전 (커뮤니티 버전)을 다운로드 가능한 페이지로 연결되었으며, 해당 파일을 다운받아 설치해 보겠습니다. 3. 설치 프로그램 설정 설치 마법사가 안내하는 대로 계정을 만듭니다. (무료입니다) 아래 설치 페이지를 참조하여 Visual C++ 항목을 체크해 설치를 진행하면 끝입니다. 저는 유료 버전(프로버전)을 구입해 사용해 약간의 차이는

C++ 강의 도서 안내

이미지
2023.09.20일, 현재 C++ 강의 도서 (MFC는 더이상 수업하지 않으며, Qt로 진행)

합격을 진심으로 축하합니다.

이미지
어제 일요일 등산 중에 반가운 전화 2통을 받았습니다. 학원에 다니는 중3학년 양O훈, 박O원 학생들인데, 대견하게도 대덕 SW 마이스터고 에 당당히 합격했다는 연락이었습니다. 늘 학습태도가 우수한 학생들이라 불합격은 생각해 본 적도 없지만, 그래도 참 기분 좋은 하루였습니다. 대전에 위치한 대덕 SW 마이스터고는 수업료, 입학금, 학교운영비가 모두 무료 이며, 정부에서 지원하는 공립학교(특목고)  입니다. 기숙사 생활을 하게되며, 2018년 신입생 정원 80명중 대전 32명, 전국 48명 을 모집합니다. 입학은 일반 내신 전형(상위 20%이내), 사회통합 전형, 코딩테스트 전형이 있는데 전국 우등생들이 많이 지원하고 있습니다. 전국 48명중 부산지역 3~4명학생이 합격했고, 이 중 학원에서 2명이 합격해 더 대견하고 자랑스럽습니다. 이번주 수업때 맛있는거 사줄게 애들아... 너희들의 새로운 시작을 진심으로 축하하고, 앞으로 4차 산업혁명을 이끌 핵심 인재로 성장해 세계를 누비며 너희들의 꿈을 펼치길 진심으로 기원한다. 꿈을 날짜와 함께 적어 놓으면 그것은 목표가 되고, 목표를 잘게 나누면 그것은 계획이 되며, 그 계획을 실행에 옮기면 꿈은 실현되는 것이다. A DREAM written down with a date becomes a GOAL. A GOAL broken down into steps becomes a PLAN. A PLAN backed by ACTION makes your dreams come true. -그레그 S. 레이드(Greg S. Reid)

심화반 예제 (아날로그 시계)

이미지
이번에 만들어 본 예제는 아날로그 시계입니다. C++ 언어와 MFC를 이용해 만들어 보았습니다. 아날로그 시계를 프로그래밍 하기 위해 진행한 설계 과정입니다. 1. 시계 외곽 원 그리기  이 부분은 매우 쉽습니다. CDC 클래스의 Ellipse() 함수를 호출하면 원을 그려줍니다. 다만, Ellipse 함수는 사각형의 왼쪽 위점과 오른쪽 아래점을 지정하면 그 사각형에 내접하는 원을 그려주므로 뷰 클래스의 크기를 얻어와 그 사각형에 내접하는 원을 그리면 끝입니다. 윈도우 기본 좌표계는 왼쪽 위 좌표가 0, 0 이며 X좌표는 오른쪽으로 가면 커지고, Y 좌표는 특이하게 아래쪽으로 가면 커집니다. 눈에 보이는 화면 좌표에서 음수를 없애서 편리하게 좌표를 계산하도록 만들어 줍니다. 만약, 뷰의 크기가 변함에 따라 시계의 크기를 변경하고 싶다면 가로, 세로 축 중 더 작은 값을 알아내 작은 값을 원의 지름으로 적용하면 화면에 맞는 시계의 외곽 원을 그려낼 수 있습니다. 2. 시간, 분 마크 적용하기 시계의 시간, 분 선을 그리기 위해서는 삼각함수가 필요합니다. 원의 외곽선 좌표를 찾아내 시계의 중심점으로 부터 선을 그어야 하기 때문입니다. 시계의 중심점 좌표와 (anchorPt) 시계의 반지름 (radius), 각도를 알고 있다면 다음과 같이 외곽선의 좌표를 구할 수 있습니다. // 각도를 라디안으로 변환 (각도 곱하기 파이 나누기 180) double radian = deg * PI / 180.0; // sin (라디안) 곱하기 반지름으로 X좌표 구하기 double dx = sin(radian)*radius; // cos (라디안) 곱하기 반지름으로 Y좌표 구하기 double dy = cos(radian)*radius; // 원의 외곽선 X 좌표 anchorPt.x + dx // 원의 외곽선 Y 좌표 anchorPt.y + dy 시간, 분 마크는 각도는 360도를 6으로 나누어 총 60번 짧은

심화반 예제 (오목)

이미지
오목을 C++로 구현해 보았습니다. 대학교 과제로 교수님들이 많이 내는  주제입니다. 간단해 보이지만 막상 만들어 보면 그리 간단하지 않습니다. 바둑돌을 바둑판 바깥에 두었을 경우, 바둑판의 교차선위에 돌이 정확하게 놓아져야 하는 문제 등을 잘 해결해야 합니다. 판정처리에 대한 부분은 비교적 쉽습니다. 2차원 배열에서 5개 돌의 연속을 찾아서 처리하면 되지만, 가로, 세로, 대각선 방향의 판정을 모두 고려해서 판정해야 합니다. 심화반 중학생 한명이 오목 판정후 복기 기능까지 넣어서 만든 것을 보고 깜짝 놀랐습니다. 개발 과정을 요약하면 다음과 같습니다. 1. 바둑판을 19X19 크기 2차원 배열로 생성 (각 상태는 빈곳, 흑돌, 백돌 인지 3가지 값을 가짐) 2. 마우스 클릭시 현재 클릭한 화면 좌표가 바둑판의 선이 교차하는 지점에 놓아지도록 가장 가까운 배열의 인덱스를 찾는 알고리즘 구현 (바둑 돌은 바둑판의 클릭 지점에 놓이는 것이 아니라 바둑판 선의 교차점에 놓아져야만 함) 3. 흑돌, 백돌의 순서대로 놓아지도록 상태 저장, 한번 돌을 둔 곳은 다시 돌이 겹칠 수 없도록 체크 필요 4. 돌을 둘 때마다 가로, 세로, 대각선(좌상->우하, 우상->좌하) 방향에 같은 색의 바둑돌이 5개 연속되는지 검사 개발환경 : Microsoft Visual Studio 2015, Windows 10 Pro 64bit 개발언어 : C++, MFC 핵심 적용 기술, 환경  Device Context, GDI, Double Buffering (깜빡임방지) SDI (Single Document Interface) Windows Message (Timer, Mouse) 2차원 배열 (맵 구현) 돌을 놓았을때 가장 가까운 바둑판의 교차선에 놓는 문제 바둑판의 크기 변경

심화반 예제 (스네이크 게임)

이미지
구글에서 "스네이크 게임"으로 검색하면 나오는 게임을 C++로 구현해 보았습니다. 게임의 규칙은 뱀을 이동시켜 랜덤하게 등장하는 먹이를 먹으면 꼬리가 한 칸 길어지는 방식입니다. 다만 뱀이 현재 진행하는 방향의 반대쪽 (오른쪽인 경우 왼쪽)으로 이동은 불가합니다. 뱀 자신의 머리가 자신의 몸통과 부딪히는 경우는 게임종료, 맵 밖으로 뱀머리가 나가도 게임 종료됩니다. 이 게임의 팁이라면 뱀의 마디가 길어질수록 맵의 바깥쪽으로 뱀을 이동시켜 안쪽으로 향하도록 하는 것이 유리합니다. 전체 설계 과정은 아래와 같습니다. 1. 배경 맵으로 표현될 2차원 배열 만든 후, 각 셀의 좌표를 모두 저장 (차후 뱀에 해당하는 사각형을 그리기 위해) 2. 뱀의 위치를 기록해둘 좌표(배경 맵 배열의 인덱스)를 연결리스트로(std::list)로 선언 3. 게임 시작시 최초 3마디의 뱀의 좌표(배경 맵 배열의 인덱스)를 생성 후 이동 시작 4.  키보드의 상,하,좌,우 키 입력에 따라 뱀의 인덱스 위치를 변경. 상(행 감소), 하(행 증가), 좌(열 감소), 우(열 증가) 5. 뱀의 머리 좌표가 뱀의 몸통좌표에 닿았거나, 배경 맵의 위치를 벗어나지 않았는지 검사. 6. 실행흐름을 생성(쓰레드)해 마지막 키보드 방향으로 뱀을 계속 이동(배열 인덱스 변경). 7. 이동 후 바뀐 뱀의 좌표를 계속 사각형으로 그리기 마지막으로, 게임 성공 판정은 코드로 구현하지 않았습니다. 주석이 잘 되어 있으므로, 직접 한번 구현해 보는 것도 나쁘지 않습니다. ^^ 개발환경 : Microsoft Visual Studio 2015, Windows 10 Pro 64bit 개발언어 : C++, MFC 핵심 적용 기술, 환경  Device Context, GDI, Double Buffering (깜빡임방지) SDI (Single

수학의 벡터를 이용한 예제

고등학교 수학에서 배우는 벡터 (크기와 방향을 모두 가지는 어떠한 양) 를 이용해 몇 가지 예제를 C++로 구현해 보았습니다. 1. 속도와 가속도를 이용한 벡터 모션 마우스 위치를 타겟으로 멀어지면 가속도가 증가하고 가까워지면 가속이 느려지도록 만들어 보았으며, 게임에서 유도무기 등의 알고리즘으로 많이 쓰입니다. 2. 바람, 중력, 힘, 마찰력을 이용한 벡터 모션 뉴턴의 운동법칙을 코드로 비슷하게 구현해 보았으며, 약간의 바람의 힘을 오른쪽으로 가했을 경우 입니다. 3. 공기 및 유체 저항을 이용한 벡터 모션 뉴턴의 제 2 법칙 가속도는 힘을 질량으로 나눈 값과 같습니다. (A = F / M) 가속도는 물체의 질량이 작을 수록 빨리 가속하지만 아래 예제에서는 항력으로 인해 유체에서 점점 느리지는 가속을 구현해 보았습니다.  너무 질량이 작은 물체는 유체의 표면 장력으로 튕겨나간 후 다시 유체로 들어가게 됩니다. 개발환경 : Microsoft Visual Studio 2015, Windows 10 Pro 64bit 개발언어 : C++, MFC 참조 문헌 : 칸 아카데미, 다니엘 쉬프만(Daniel Shiffman)이 저술한 "The Nature of Code"

상담 시 많이 받는 질문 정리

안녕하세요. 오션코딩학원장 김주원입니다. 요즘은 벌써 여름이 끝나가는 기분이 드는 시원한 날씨입니다. 상담시 많이 물어보시는 내용을 한 번 정리해 보았습니다. 1. 교육대상 초등학교 2학년 부터 성인까지 수업하고 있습니다. 2. 교육비 엔트리 수업은 월 130,000 원, C++, 파이썬, 윈도우 프로그래밍, 심화반 수업은 월 150,000 입니다. 교육비 외 추가 비용은 없습니다. 3. 교육시간 엔트리 수업은 주 2회 수업을 실시하고 있으며 1회 수업은 60분입니다. (주말반은 주 1회 120분) C++, 파이썬, 윈도우 프로그래밍, 심화반 수업은 주 1회 120분 수업입니다. 모든 수업은 횟수는 다를 수 있으나 월 480분(4주 수업) 기준입니다. 4. 교육과정 엔트리는 초등학생 대상 이며, 블록프로그래밍 언어와 아두이노 보드를 이용해 소프트웨어 교육을 실시합니다. C++은 중,고, 성인 대상 이며, 강의서적과 Microsoft Visual Studio 2015를 이용해 C++ 프로그래밍 언어에 대해 전반적인 교육을 실시합니다. 파이썬은 초등 고학년, 중, 고, 성인 대상 이며, 강의 서적과 Microsoft Visual Studio 2015, 파이썬 언어를 이용해 파이썬의 기본문법과, PyQt를 이용한 GUI과정에 대한 교유을 실시합니다. 윈도우 프로그래밍 과정은 중, 고, 성인 대상 이며, 강의서적과 Microsoft Visual Studio 2015, C++ 언어를 이용해 윈도우 운영체제에서 소프트웨어를 개발하는 방법에 대한 교육을 실시합니다. 심화반 과정은 기본적인 프로그래밍 과정을 이수한 수강생, 또는 기본 프로그래밍 지식을 가진 수강생을 대상 으로 하며, 스스로 주제를 정하고, 주제를 완성하기 위한 개발과정을 문서화 한 후, 선생님과 함께 내가 만들고 싶은 주제를 완성시켜나가는 방식의 수업입니다. 5. 수업시간표 수업시간표는 매월 바뀌며, 사전에 공지드리고 있습니다. 한번 등록한 시간은 거

심화반 예제 (팩맨)

이미지
1980년 5월 일본의 남코라는 회사에서 만든 팩맨 게임을 C++을 이용해 만든 예제입니다. 심화반 고등학생이 정한 주제를 저도 함께 만들어 보았으며, 생각보다 좀 어려웠습니다. 기억나는 몇 가지 어려웠던 부분은, 맵의 크기를 너무 작게 설정하면, 팩맨과 적군의 움직임을 부드럽게 표현하기 어려워, 개발 도중 배경맵의 크기를 키운점. 적군이 팩맨을 추격하는 간단한 인공지능 만들기. 적군이 팩맨에게 죽었을때 적군아지트로 이동시키기 위해 경로 탐색알고리즘이 필요했던 부분 등. 개발 과정을 요약해 정리해 보겠습니다. 1. 배경 맵을 2차원 배열로 만들어 각 셀 별로 상태를 저장 (빈곳, 벽, 먹이가 있는 곳 등) 2. 그래픽을 처리하기 위해 각 셀의 좌표를 모두 저장 (팩맨, 벽, 빈공간, 적군, 먹이, 등을 그리기 위함) 3. 적군과 팩맨을 위한 부모 클래스 생성(추상화 클래스) 4. 적군, 팩맨 자식 클래스를 상속을 통해 구현 (자신의 좌표, 팩맨의 공격모드 인지 저장 등) 5. 게임 시작시 팩맨과 적군을 배치하고 남는 공간에 먹이를 배치 6. 팩맨의 이동을 키보드 이벤트를 통해 처리 (현재 위치의 좌표에서 다음 이동방향으로 이동가능한지 판단 후, 벽이아니라면 좌표이동 등) 7. 적군의 이동을 만들어 내기 위한 2가지 알고리즘 생성 (확율에 기반한 팩맨 쫓아가기, 적군이 아지트에 있는 경우는 아지트 탈출하기) 8. 팩맨과 적군의 접촉 감지 (팩맨은 큰 먹이를 먹으면 적군을 잡아먹을 수 있으므로 상황에 맞

처음 접하는 프로그래밍

이미지
처음 프로그래밍을 접할 때 어렵다고 느낄 수 있습니다. x 프로그래밍을 하려면 컴퓨터에 명령하기 위해 프로그래밍 언어(C++, JAVA, 파이썬 등)를 배워야 하고,  이는 영어, 독일어 등 외국어를 배우는 것과 비슷하지만 문법적으로 조금만 틀려도 컴퓨터는 못 알아 듣고 에러를 출력하죠. 영어를 잘 못해도 외국인과 이야기 할 때는 표정이나, 손짓, 등을 통해 얼마든지 내 뜻을 표현 할 수 있지만, 컴퓨터는 이런 융통성이 부족합니다. 조금만 프로그래밍 언어의 문법에 어긋나면 (예를 들어 마침표를 찍지 않는다던지..) 바로 알아 듣지 못합니다. 사실 조금만 프로그래밍 언어에 익숙해 지면 위에서 말한 코드의 문법적 오류는 쉬운 범주에 속하는 오류라는 걸 알게되죠. 프로그래밍 언어로 만든 코드는 컴파일 과정을 거쳐 기계어에 가까운 형태로 변경되어 실행되는데 , 이 컴파일 과정에서 실수로  잘 못 작성된 코드의 문법적 오류는 컴파일러가 바로 알려주므로 조금만 익숙해지면 금방 찾을 수 있습니다. 찾기 어려운 오류는 코드 작성 시 (컴파일타임 이라고 합니다)에서 일어나는 오류가 아니라, 실행 시 (런 타임이라고 합니다) 일어나는 오류입니다. 단순한 문법적 오류가 아니라 의미상 오류(문법이 맞았지만 결과가 틀렸다)에

심화반 예제 (테트리스)

이미지
모르는 사람이 없는 테스리스 게임 소스코드, 설치파일을 소개합니다. 테트리스 게임은 1984년 구 소련의 프로그래머 알렉세이 퍼지노프가 만든 게임이라고 합니다. C++로 만든 과정은 아래와 같습니다. 1. 테트리스 블록들(총 7가지 모양)을 2차원 배열(4x4)로 만든 후 각자의 모양을 bool 타입의 변수에 저장합니다. 2. 테트리스 맵이 될 2차원 배열을 만들어 (가로 20, 세로 10) 각 셀의 배열의 위치 정보를 저장해 둡니다. 3. 프로그램 시작시 랜덤함수를 이용해 떨어질 도형 모양의 번호를 구한 후, 각 도형모양에 맞는 블록을 맵의 가장 위쪽 좌표에 그려줍니다. 4. 한단계식 아래로 이동시킵니다. (Y축의 배열 인덱스를 증가) 5. 키보드 방향키 (좌, 우)를 누르면, 떨어지는 도형의 배열을 회전 시켜 다시 그립니다. 6. 맨 아래 바닥에 닿았거나 또는 블록에 닿을때까지 계속 아래로 이동하다가 해당 조건을 만족하면 도형의 위치정보를 맵에 기록해 둡니다. 7. 3번 ~ 7번 과정을 반복합니다. 8. 만약 블록이 안착(?) 했다면 한 줄(행)이 모두 도형으로 채워졌는지 검사하고, 맞다면 해당 줄의 도형정보를 삭제한 후, 위에 쌓여진 도형들은 6번의 과정을 거쳐 아래로 내려줍니다. 실제 코드로 구현한 클래스 다이어 그램입니다. 좀 더 자세한 내용은 링크된 소스코드를 참조해서, 한번 만들어 보시기 바랍니다. 생각보다 어렵지만, 테스리스 역시 프로그래밍 공부하기 좋은 예제입니다. 버그가 있다면 알려주세요. ^^ 개발환경 : Microsoft Visual Studio 2015, Windows 10 Pro 64bit 개발언어 : C++, MFC 핵심 적용 기술, 환경  Device Context, GDI, Raster Operation, Double Buffering (깜빡임방지) SDI (Single Document Interface) Wi

심화반 예제 (그림판)

이미지
C++, MFC 과정을 수료 후, 심화반 학원생들이 가장 처음 만드는 그림판 프로젝트의 소스코드와 설치파일을 소개합니다. 제가 대학교 3학년 때 학과 수업으로 진행했었던 프로젝트이며, 윈도우즈 프로그래밍을 처음 접하는 개발자가 공부하기 좋은 예제입니다. 개발환경 : Microsoft Visual Studio 2017, Windows 10 Pro 64bit 개발언어 : C++, MFC 핵심 적용 기술, 환경  Device Context, GDI, Raster Operation SDI (Single Document Interface) Windows Message (Mouse, Command Message) 첨부파일  설치파일 (Installshield로 제작된 설치파일, 클릭)  소스코드 (C++ 소스코드, rar 압축파일형태, 클릭) 구글아이디로 로그인하면 다운로드 가능합니다.

2017 카카오 신입공채 1차 테스트 2번 문제

이번에는 2번 문제 풀이 입니다.  문제를 풀면서 출제자가 얼마나 고민해서 문제를 만들었을지 느껴졌습니다. 문제에 대한 상세 설명은 카카오블로그 를 참조 바랍니다. 2번 문제는 C++ 11에 새롭게 추가된 정규표현식을 이용해서 만들어 보았습니다 #include #include #include using namespace std; // 다트 점수 3회 const int n = 3; enum DARTITEM {DART_SCORE, DART_BONUS, DART_OPTION}; struct dartResult { int score; char bonus; char option; }; void tokenizing(string str, regex reg, DARTITEM item, dartResult dart[]); void print(dartResult dart[]); void calcscore(dartResult dart[]); int main() { while (1) { string str; cout << "다트 결과 문자열을 입력하세요 (종료는 0) : "; getline(cin, str, '\n'); if (str == "0") break; regex score("((10|[0-9])[S|D|T][*|#]?)+"); if (regex_match(str, score)) { dartResult dart[n]; for (int i = 0; i < n; i++) { dart[i].score = 0; dart[i].bonus = 0; dart[i].option = 0; } tokenizing(str, regex("(10|[0-9])"), DART_SCORE, dart); tokenizing(str, regex("[S|

2017 카카오 신입공채 1차 테스트 1번 문제

최근에 웹서핑을 하다 흥미로운 자료을 발견했습니다. 바로 2017년도 카카오 공채 1차 코딩테스트 문제. 카카오 블로그 에 방문해보면 해당 입사 시험 문제에 대해 쉽게 이해하도록 설명하고 있습니다. 개인적으로 프로그래밍을 공부하는 사람이라면 당연히 도전해봐야겠죠. 대한민국에서 손꼽히는 프로그래머 집단에서 출제한 문제인 만큼, 독창성과 함께 기업에서 어떤 프로그래밍 지식을 요구하는지 짐작해 볼 수 있는 좋은 기회가 될 거라 생각합니다. 전체 7문항이며 5시간 안에 4문제 이상을 풀면 1차 통과입니다. 아래는 그 중 가장 난이도가 낮은 1번 문제 입니다. 자세한 내용은 카카오 블로그 에서 참조하기 바라며, 제가 C++로 작성한 코드는 아래와 같습니다. #include #include using namespace std; const int n = 5; void printmap(const bitset map1[], const bitset map2[]) { // 결과 저장용 5비트 비트셋 배열 5개 bitset resultmap[n]; for (int i = 0; i < n; i++) { // 비트 OR 연산 resultmap[i] = map1[i] | map2[i]; for (int j = n-1; j >= 0; j--) { // OR연산 결과 0이면 공백, 아니면 # 출력 if (resultmap[i][j] == 0) { cout << ' '; } else { cout << '#'; } } cout << endl; } } int main() { // 10진수 5가지를 정수형 배열에 저장 int arr1[] = { 9, 20, 28, 18, 11 }; int arr2[] = { 30, 1, 21, 17, 28 }; // 5비트 비트셋 배열 5개, 각 2개 생성

교육 과정 안내 (세부 내용)

이미지
학원에서 교육중인 내용을 좀 더 상세히 안내 드립니다. [전체 과정 요약] [엔트리 초급 과정, 4개월] [엔트리 고급 과정, 4개월] [C++ 과정, 5개월] [윈도우 프로그래밍 과정, 5개월] [심화반 과정] 전체 과정 PDF 링크 감사합니다.

원장 프로필

이미지
약 15년간 현업에서 수행했던 주요 프로젝트와 이력을 정리해 보았습니다. 원장 프로필 (클릭) 구글 블로그는 첨부파일 업로드 할 수 없어 링크로 올렸습니다.

교육과정 안내

이미지
[학원 포스터] [학원 교육 과정 안내]

블록 프로그래밍 언어, 엔트리

이미지
제가 소프트웨어 개발자로 일하면서 사람들을 만나면 많이 듣는 이야기가 "와 어려운거 하시네요!" 입니다. 또 한가지는 "밤늦게 까지 일하시겠네요" 입니다. 그렇지 않습니다. 특히 어렵다는 이야기는 저는 어른들의 막연한 두려움, 고정관념이라고 생각합니다. 제 아이가 초등학교 1학년인데 제가 엔트리를 시험(?)삼아 한번 보여주고 가르쳐 준 적이 있습니다. 크게 기대하지 않았지만 정말 이해가 빠르더군요. 백문이 불여일견이라니 제가 한번 설명드려 보겠습니다. 엔트리는 실무에서 쓰이는 텍스트 기반 프로그래밍 언어가 아니라 아이들이 쉽게 그 개념을 이해할 수 있도록 고안된 블록 기반 프로그래밍 언어입니다 우리나라 과학기술정보 통신부 등 여려 기관이 힘을 합쳐 만들어 만든 무료 소프트웨어 입니다. 공짜니깐 꼭 댁에서 아이들과 함께 즐겁게 해보시길 추천드립니다. 먼저 엔트리는 다음 주소에서 온라인 실행 또는 오프라인 버전으로 무료 다운로드가 가능합니다. 컴퓨터나 태블릿 PC에서 사용가능합니다. 엔트리 : https://playentry.org 1. 회원가입은 하지 않아도 됩니다. (차후 작품저장이나 공유시는 필요합니다) 2. 위 메뉴에서 만들기 -> 작품만들기 버튼을 눌러 볼까요. 3. 다음은 아직 잘 모르지만 시작하기를 눌러 보아요 4. 위 화면의 엔트리봇 이라는 이미지 오브젝트가 움직이는걸 확인할 수 있습니다. 왜 움직일까요? 바로 아래와 같은 명령을 컴퓨터에 지시했기 때문입니다. 이 부분이 우리가 코딩한 소스코드이기 때문이죠. 한번 살펴보면 아주 아주 간단합니다. 1) 시작하기 버튼을 아까 눌러주었죠. 이것이 엔트리를 시작하는 명령입니다. 2) 10번 반복하기는 파란색 블럭안의 블럭을 10번간 반복해서 실행하라는 의미입니다. 3) 이동방향으로 10만큼 움직이기는 3번 그림에서  엔트리봇의 화살표를 의미합니다. 4) 10만큼은 3

이 블로그의 인기 게시물

Qt Designer 설치하기

C++ 예제 (소켓 서버, 이미지, 파일전송)