Article Category

분류 전체보기 (108)
나의 이야기 (52)
Study - Programming (39)
Study- MSC (11)
Study - ETC (0)
Project (3)

Recent Comment

Recent Trackback

Calendar

«   2008/08   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

Archive

  • Total45,125
  • Today25
  • Yesterday33
  1. 2008/07/12
    3rd Project : RAD Tool for Win32 API (2)
  2. 2007/12/08
    2007년 2학기 C프로그래밍 텀 프로젝트 : 러시안테트리스 Ver 2 (2)
  3. 2007/11/17
    [C++]2007학년도 2학기 C프로그래밍 텀 프로젝트 - 러시안 테트리스 Vol1 (7)
  4. 2007/11/10
    하고 싶은게 너무 많아 감당을 못할때
  5. 2007/11/06
    [C++]String Class
  6. 2007/11/04
    [C++]Integer Class 구현 (2)
  7. 2007/09/02
    friend 함수
  8. 2007/08/29
    [C++] 논리형 bool
  9. 2007/08/29
    가변 인수 이야기

프로젝트명 : RAD Tool for Win32 API

수행 기간 : 2008.8~2009.12
                군 기간 중 약 3번의 정기 휴가(총 30일) 간 수행할 예정

사용 언어 : C++/MFC

계획중인 기능
- Win32 API 코드를 읽고 그에 따른 디자인을 해 주는 기능
- 직접 GUI를 통한 직관적인 디자인을 하면 그에 따른 Win32 API 코드를 생성해주는 기능



- 윈도우 프로그래밍을 하는 방법은 여러 가지가 있지만 그 중 대표적인 방법으로 Win32 API 를 이용하는 방법이 있다. 그러나 그 방법이 직관적이지 않고 수많은 함수들을 사용해서 일일히 작성해야 하므로 그 강력함 만큼 불편한 점이 있다.
  이를 극복하기 위하여 다양한 방식의 윈도우 프로그래밍 기술이 나왔는데 MFC 등의 방법도 생겼고, RAD(Rapid Application Development) Tool을 이용하는 방법도 있다.
  특히 Visual Basic, Delphi 등으로 대표되는 RAD 툴의 경우, 직관적인 디자인 방식을 제공하기 때문에 높은 생산성을 보여주지만 그만큼 기능상의 한계도 가지고 있다.
  그래서 이번 프로젝트에서 API 코드를 읽어서 그에 따른 디자인을 화면으로 보여 주고 또한 직접 디자인 하면 코드를 생성해 주는 방식의 프로그램을 만들어 보고자 한다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback 0 and Comment 2
사용자 삽입 이미지

사용자 삽입 이미지


2007년 2학기 C 프로그래밍 텀 프로젝트인 러시안 테트리스이다.

참 고생 많이 했다.. 잘 알지도 못하는 MFC가지고 지지고 볶는다고.. 보면 Ver1과 모습이 좀 다르다. 블럭을 비트맵 처리하였고, 크기도 조금 줄였다.

하지만 Game클래스는 거의 변화하지 않아 만드는데 그렇게 힘들이지는 않았다. 실제로 이 버전은 하루만에 환성 할 수 있었다.

하지만 문제는 인공지능.. 진짜 머리 나쁘다. 이거 랜덤이랑 붙어도 질것 같다. 동생이랑 해서 6연패.. 심히 걱정된다. 일단 이정도로 해놓고 시험 공부좀 하고 인공지능을 업그레이드 시켜 보아야 겠다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback 0 and Comment 2
사용자 삽입 이미지


2007학년도 2학기 C프로그래밍 과목의 텀 프로젝트 과제이다.

러시안 테트리르라고 불리는 게임인데(참고로 이렇게 해서 검색 해보면 한개도 안나온다.)

판에 테트리스 블록을 하나씩 놓으면서 상대방이 못놓게 하는게 이 게임의 목적. 즉 내가 마지막으로 블록을 놓으면 이기는 게임이다.

MFC를 이용하였다. 내 첫 MFC 프로그램인데, 생각보다 순조롭게 일이 진행되어서 다행이다. 현재까지는 버그가 없어보인다.

자 여기서 추가해야 할 것은 컴퓨터의 인공지능. 원래 목적은 여기서 컴퓨터가 놓을 수 있게 만들고, 학생들이 자신들이 만든 컴퓨터 인공지능을 붙여서 경쟁하는 것이 목적이다.

지금은 게임 룰만 되도록 하였다. 즉 인공지능은 없다. 이제 남은 기간동안 만들어야 할 것이다.

소스코드는 아직 텀 프로젝트 기간이므로 올리지 않고 실행 파일만 올린다.
이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback 0 and Comment 7
  지금 내가 공부 하고 있는 언어들을 한번 세어 보면

1. C
2. C++
3. JAVA
4. C#
5. VB.NET
6. Delphi

  여기에 세부 분야까지 넣어 보면
1. API
2. MFC
3. TCP/IP

  뭐 이정도. 문제는 이런 것들을 그냥 배워 보고 싶다는 생각에 건드려만 본다는 것이다. C/C++이야 항상 만지고 있는 거니 예외라 치고, 델파이는 거의 안하니 제외 해도 너무 하려고 하는게 많다. 특히 C#이랑 JAVA는 의욕에 비해 하는게 너무 없는듯하다.

  지금 생각은 이렇다. 한 두가지 정도만 집중할것이냐 조금만 더 힘낼 것이냐. 솔직히 말해서 조금 버겁긴 하지만 그렇다고 못하겠는건 아니다. 그냥 진도가 너무 안나가는 것에 대한 불안감?

  그래도 대학 와서 내가 이쪽 분야 그동안 공부했던것과 비교해 본다면 결코 무리라는 생각은 안든다. 다만 걱정되는건 어린 시절 근 10년간 VB를 파 오면서 너무 공부하기에는 어렸었다는 것도 있었겠지만 여러가지를 많이 해보고 싶어서 이것 저것 해보다가 어중간하게 얕고 넓게(?) 익히게 되어서 그게 반복되지 않을까 신경쓰인다.

  1월 안에는 윈어플 큰거 하나 짜놓고 가긴 가야 하는데.. 제일 승산 있는게 무엇일까? 제일 승산있는건 MFC나 C#쪽인데.. 아무래도 최근에 새로 배우는 언어는 C#이 제일 무난하게 나가고 있어 조금만 더 하면 윈폼 시작할것이니. 아니면 지금 텀 프로젝트한다고 공부중인 MFC도 요즘들어 뭔가 감이 잡혀가기 시작해서 조금만 더 노력하면 속도가 붙을 것 같은데..

  이렇게 해봐야 겠다. JAVA로는 뭐 만드는건 잠시 미루되 꾸준히 공부는 하고 MFC는 텀에 충실하되 실력이 늘 수 있게, 그리고 C#으로는 뭘 만들도록 주로 공부해 봐야지. 이렇게 실천할수 있으면 얼마나 좋아.
이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback 0 and Comment 0

  Int Class에 이어 이번에 만들어 본 것은 String Class. C/C++에서의 문자열 처리를 보완하기 위하여 만들어 본 클래스이다. VB나 기타 다른 언어의 String형과 비슷하게 만들어 보았다.
구현한 것은 다음과 같다.

1. Constructors/Destructor
2. Adding Operator(+)
3. Equal Operator(==)
3. Assignment Operator(=)
4. Lenght Method
5. Standard IO Interface
  이렇게 나열하고 보니 몇가지 구현해보고 싶은게 많이 생기네.. Mid,Left,Right Method나 != Operator 같은것들.. 뭐 다음 기회로 미루자.

int Class 만들때보다 연산자 오버로딩을 좀 더 익숙하게 다룬 것 같다. 다음에 만들어 볼 것은 Matrix Class.

String.cpp

Class_String

이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback 0 and Comment 0

  솔직히 말해서 C++은 공부를 거의 문법 스펙을 읽기만 하고 실제로 짜본건 거의 없었다. 한떄는 C보다 C++을 훨씬 많이 하곤 했었는데 지금은 거의 C로만하니 당연히 까먹을 수밖에.

  거기다 이번에 하드디스크 데이터를 날려먹으면서 그동안 연습해왔던 C++코드까지 다 잃어버려서 새로 시작하자는 의미로 하나 하나 클래스 몇개를 만들어 보기로 했다.

  그 첫번째로 우선 Integer Class를 구현해 보았다. 기본 데이터 타입인 int를 직접 만들어 본 것. 역시 많이 버벅대었다. 제대로 되었는지도 잘 모르겠고. 특히 멤버의 생성과 소멸 부분에서 많이 헤매었고 연산자 오버로딩 부분도 아직 잘 모르겠다.

  구현한 것들은 다음과 같다.
1. Constructor//Destructor
2. Assignment Operator
3. Relationship Operator
4. Arithmetic Operator
5. Array Operator

  뭐 대부분이 연산자와 관련된 부분이지만 실제 필요한 부분은 거의 넣은 것 같다. 많이 부족하지만 앞으로 많이 공부해 봐야지.

  다음 구현할 것은 String Class. 힘내자.

Class_Int.cpp

Integer_class

이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback 0 and Comment 2

#include <iostream>
using namespace std;
class Example
{
public:
       Example()
       {
                x = 3;
       }
       friend void Show(Example &ex);
private:
       int x;
                  
};

void Show(Example &e)
{
     cout << "x is : " << e.x << endl;
}

int main(void)
{
    Example ex;
   
    Show(ex);

    return 0;
   
}
 
  우선 Show라는 함수의 정의 부분을 보자. 일반 멤버 함수의 정의와는 달리 Example라는 클래스에 있음에도 Example :: 이런 식으로 스코프(Scope)를 해 주지 않았다. 그럼 위로 올라가 Example클래스의 Show함수의 선언을 보자. 특이한 키워드가 붙어 있을 것이다. friend 이 키워들를 붙이면 Show라는 함수는 이 클래스의 멤버 함수가 아니게 된다. 굳이 구분하자면 전역 함수쯤 될 것이다.
 main함수 안에서 Show의 사용을 보자. ex.Show()가 아닌 그냥 Show()로 불러 들였다. 그리고 인자를 보면 ex라는 객체를 레퍼런스로 넣었다. 외부 함수라는 것이다. 그런데 실행을 해 보면 신기하게 ex라는 객체에 private로 선언되어 있는 멤버 변수 x의 값을 불러 온것을 알 수 있다. 즉 friend 함수는 예외적으로 클래스 내부의 멤버에 접근 할 수 있게 해 주는 역할을 한다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback 0 and Comment 0

  우선 C에서 거짓은 0으로, 0이 아닌 값은 모두 참으로 인식한다. 0은 거짓이 확실하지만 참은 굳이 1이 아니어도 된다는 말. 1을 하는 이유는 그냥 보편적이기 때문이다. 단, 다른 언어에서는 종종 보이는 true와 false라는 것을 표현해주는 데이터형이 C에는 없다.


  bool형은 이런 것을 보완하기 위해 C++에서 새로 나온 것이다.


bool ex = true; //ex에는 true가 대입

ex = !ex ; //ex에는 false(!true)가 대입

ex = (ex == false); //ex에는 true가 대입


  물론 이런식으로도 가능하다.


bool ex = -123; // true 대입

bool ex = 0; //false 대입


  다시 한번 체크하자. 참은 굳이 1일 필요가 없다. -123처럼 음수라도 0만 아니면 참이 된다.

 

  하지만 bool을 출력한다고 하면 이야기는 달라진다. 다음 소스를 보자

bool ex = true;

cout << ex << ',';

ex = false;

cout << ex;

 

출력 : 1,0

  즉 출력을 하면 false는 0, true는 1로 출력이 된다. 하지만 좀더 명확하게 true 또는 false로 표현해줄 필요가 있다. 그럴떄는 이렇게 하면 된다.

 

cout << boolalpha;

cout << true << endl;

cout << false << endl;

 

cout << boolalpha로 해주면 true 또는 false로 출력을 해준다.

 

참고로 C99에서는 bool형을 지원한다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback 0 and Comment 0

혹시 이런 생각 해본적 있는가? 보통 함수의 인자의 개수는 정해져 있는데, printf함수 같은 경우는 그 수가 제한이 없지 않은가?


예전에 이런 것과 관련해서 함수 하나를 구현할 일이 있었는데 미루다 미루다 이제야(한 일주일 된듯 -_-;;) 한번 찾아 보았다.


먼저 printf 함수 원형을 한번 보자

int printf(const char*,...);

이렇게 되어 있다. 사실.. 이거는 컴파일러가 'printf(' 여기까지만 치면 원형을 보여주는데 쓸데없이 stdio.h를 열어보는 뻘짓까지 했다 ㅋ


한번 분석해 보자.


  우선 printf의 리턴 데이터 형식은 int형이였다. 이 함수의 리턴값은 출련한 변수의 갯수이다. 예를 들어 ("%d,"%d",a,b)했으면 리턴 값은 2.


 그리고 첫 번째 인자는 우리가 "name %s\b"하는 이런 거고.. 중요한 것은 두 번째 인자 '...'이다. 인자를 생략한다는 표시인데, 이 표시를 통해서 함수 호출 시 인자를 얼마든지 넣을 수 있게 된다. 그것을 처리하는 것은 원형에서 해줄 몫이고.. 그리고 이것을 '가변 인수'라고 한다. 뭐 자세한 사용법은 알아서 공부해볼것, 이건 대충 사용법만 보고 거기에서 합계 구하는 예제 있길래 안보고 만들어 본 것. 이해 자체는 그리 어렵지 않은데.. 음 좀더 공부해 봐야지.



#include
#include

int GetSum(int Num,...)
{
 va_list ap;
 va_start(ap,Num);
 int arg;
 int i;
 int Sum = 0;

 for(i = 0 ; i < Num ; i++)
 {
  arg = va_arg(ap,int);
  Sum+= arg;
 }

 va_end(ap);
 return Sum;
}

void main()
{
 printf("%d\n",GetSum(10,1,2,3,4,5,6,7,8,9,10));
}



참, 참고로 C#에서는 가변 인수를 사용하는 방법이 따로 지원한다. 이것보다 더 쉽게.. (맞나?) 그때는 이게 말 뜻 자체도 이해가 안되다가 아! printf! 해서 이해만 하고 그래서 뭘 만들어볼까할때 아이디어가 생각이 안나 넘어갔는데.. 이렇게 다시 해볼 기회가 생겨서 다행이다.  뭐 이거 찾다가 VB에서도 가변인수 쓸수 있다는거 알았고, VB,C# 둘다 연습해 봐야겠다 함.. 그리고 C/C++에서도 계속 공부하고..

이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback 0 and Comment 0