처음 접하는 프로그래밍

이미지
처음 프로그래밍을 접할 때 어렵다고 느낄 수 있습니다. 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

C++

이미지
오늘은 C++ 언어에 대해 한번 말씀드리고자 합니다. 꼭 대학교 학점같은 느낌의 C++ 이라는 단어네요. C++은 C 라는 프로그래밍 랭귀지를 기반으로 발전된 언어입니다. 둘 사이의 차이점은 C는 구조적, 절차적 방식의 프로그래밍 언어이고, C++은 객체지향적 언어입니다. 사실 처음 프로그래밍을 배우는 사람은 절차적, 객체지향적의 의미를 잘 몰라도 됩니다. 그냥 C 프로그래밍은 복잡하고 거대한 현실을 표현/구현하기에는 부족해서 C++이 나왔다고 이해하시면 좋을 것 같습니다. 처음 프로그래밍을 공부하고자 한다면 저는 C를 배우고 C++을 배우는 것 보다는 C++을 처음부터 배우는 것을 추천드립니다. 그 이유는 C++은 C의 개념을 모두 포함하고 있고, 여기에 새로운 개념이 추가된 언어이기 때문입니다. C++은 공대에 입학하면 학부 1학년 모든 공대생이 배우는 전공기초 과목입니다.  (공업수학, 전기회로이론 등등) 사실 요즘은 중,고등학생들도 관심을 가지고 독학하는 친구들도 많이 보았습니다. C++은 모든 전자기기와 인간이 소통하는 중요한 수단 입니다. 그래서 언어라고 부릅니다. 우리가 외국인과 영어로 이야기하는 것처럼요. 아래는 간단한 C++코드입니다.  // iostream이라는 파일을 열어서 여기에 복사 #include <iostream> // std라는 이름공간을 사용(클래스간 이름충돌 방지) using namespace std; int main() {         // 1. i라는 정수 저장변수를 만들고 0을 대입, 즉 i 는 0.         // 2. i가 10보다 작다면 반복문 for{ 여기 } 여기 내용을 수행.         // 3. for{ }한번 끝나면 ( }를 만나면 ) i값을 1씩 증가 (i++)         // 4. 즉, i 변수는 처음 0 부터

이 블로그의 인기 게시물

Qt Designer 설치하기

PyQt5 기반 동영상 플레이어앱 만들기