타운스쿨

  • C :: srand(time(null)) 과 usleep() 함수

    요즘 동아리에서 C 스터디를 하고 있습니다. 리눅스 프로그래밍, 윈도우즈 프로그래밍, 루트킷 탐지 프로그램 프로젝트를 하기 위한 선행학습이지요. 복습도 되구요. 우선, 로또 게임 시뮬레이션을 만들었는데, 주석을 포함하여 217줄이 나오더군요. 그 코드 중에서 번호를 무작위로 섞는 함수 부분에 대해 얘기하고자 합니다. 자, 그러면 코드부터 볼까요? 배열에 저장된 45개의 번호를 무작위로 서로 맞바꾸는 알고리즘입니다. 알고리즘 자체는 쉽죠? Swap…

  • imagEmail, GUI 구현

    GTK+와 Glade 3로 구현한 GUI입니다. 이제 여기에 C 코드로 알고리즘만 얹어 놓으면 됩니다. windowMain windowMain은 이름 그대로 메인 화면입니다. 오른쪽의 드롭다운 버튼으로 이메일의 서버종류를 선택할 수 있습니다. 우측 상단의 x 버튼으로 프로그램을 종료합니다. dialogSave dialogSave는 파일을 저장할 때 나오는 대화상자입니다. 아직 100% 구현되지 않았는데, 다 구현되면 “저장”, “취소” 버튼 위에 이메일 이미지가 어떻게 나오는지 보여줄…

  • imagEmail, 간략한 기획

    비주얼 베이직으로 만들었던 hisAlpha Image를 C 언어를 이용하여 리눅스용으로 다시 만들려고 합니다.  리눅스용이라고는 하나, 윈도우나 OS X용으로도 쉽게 포팅될 듯합니다. hiaAlpha Image는 일종의 프로토타입인 것이죠. 사실, 강분도 님의 권유가 아니었으면 그냥 묻혔을겁니다. ㅋ 아래는 간략한 기획입니다. 기능 이메일 주소를 이미지로 만듬. 15종의 메일서버 지원. 개발환경 환경: 리눅스 (Ubuntu 8.10, i386) 언어 및 툴킷 : C,…

  • C :: 0xE0 == 224 ?

    어느 한 분이 게시판에 질문을 올리셨습니다. 소코반 소스중에 일부분입니다. int ch; ch = getch(); //키 입력 if( ch==0xE0 ) { //실행 } 0xE0 은 십진수로 224입니다. 그러면 ch==224 랑 같으면 실행 된다는 말인가요 ㅡ.ㅡ? 『혼자 연구하는 C/C++』에 나오는 한 예제에 대한 질문이었습니다. C에서는 문자형으로 char가 사용됩니다. char는 1byte 자료형으로 -128~127의 값을 가집니다. 그럼 여기서부터 문제가…

  • C :: 1byte씩 메모리 읽기

    Shinnara 님이 알려주신 1byte씩 메모리를 읽는 방법입니다. 스택이나 정적메모리 영역 등에 이용할 수 있겠네요. unsigned char에 대해서는 거들떠 보지도 않았는데 이번 기회로 참 유용하다는 걸 알게되었습니다. ptr = (unsigned char *) &fNumber; 이 부분에 대해서는 지난 글에서 설명했었지요. 차이라고는 unsigned * 대신에 unsigned char *을 사용함으로써 4byte가 아닌 1byte씩 끊어 읽을 수 있다는 것입니다. 아래…

  • 알고리즘 :: 함수의 반환값을 범위 점검할 때 abs 함수를 응용하자.

    abs 함수에 대해 다들 잘 아실 것입니다. 절대값을 구하는 함수지요. 이 abs 함수를 응용하면 함수의 반환값을 범위 점검할 때 걸리는 시간을 줄일 수 있습니다. 가령, 이와 같은 코드가 있다고 가정하겠습니다. Func 함수에서 반환된 값이 MIN ~ MAX 사이의 범위에 있는지 점검하는 코드입니다. 이 코드는 함수를 2회 호출합니다. 만약 1회만 호출하여 같은 연산을 할 수 있다면…

  • 알고리즘 :: 최적화된 에라토스테네스의 체

    오늘은 코드 전체를 알려드리진 않을 생각입니다. 어차피 여기저기서 쉽게 알 수 있는 유명한 코드이고, 스스로 한 번 생각해 보시라는 의미에서요. 이번 글이 시리니 님의 글과 비교해서 진행 되므로 시리니 님의 글에 나와 있는 코드를 참조하시는 것도 도움이 될 것 같습니다. 에라토스테네스의 체 우선, 시리니 님의 글에 에라토스테네스의 체에 대해 잘 정리 되어있으니 살짝 인용 좀…

  • 알고리즘 :: floor 함수로 반올림하기

    이 글에서 소개할 내용은 알 사람은 다들 알지만, 그래도 혹 (저처럼)모르는 분들을 위한 글입니다. 결국, 정리하자면 정리용 메모라는… C 표준 라이브러리에는 math.h 헤더파일이 있고, 그 안에는 floor 함수가 있습니다. 이 함수의 의미는 주어진 인수보다 크지 않은 최대 정수 입니다. 즉, 주어진 인수가 x라고 하면, x-1보다 크거나 같고 x보다 작은 정수를 뜻합니다. 위키피디어에서는 이를 아래와 같이…