블로그 이미지
훅크선장

카테고리

분류 전체보기 (362)
사진이야기 (23)
펭귄컴퓨팅 (121)
라이브씨디 (102)
프로그래밍 (14)
임베디드 리눅스 (5)
컴퓨터보안 (84)
절름발이 프로그래머 (59)
하드웨어개조 (23)
멀알려줄까 (35)
홈베이킹&홈쿠킹 (2)
잡다한것들 (15)
Total
Today
Yesterday

달력

« » 2024.5
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

공지사항

태그목록

최근에 올라온 글

'펭귄컴퓨팅/프로그래밍'에 해당되는 글 14건

  1. 2009.03.04 중급 개발자가 되기 위해서는... 1
  2. 2007.01.29 임백준의 소프트웨어산책 (3)
  3. 2007.01.29 임백준의 소프트웨어산책 (2)
  4. 2007.01.29 임백준의 소프트웨어산책 (1)
강남의 S사 교육기관에서 C++ 교육을 받았다.
오랬만에 새로운 지식을 몇 가지 얻었다.

이전부터 알고 있던 사항이지만, 마음에 새겨볼려고? 블로그에 올리기로 하였다.

컴퓨터 프로그램의 오류(Error)는 크게 두 가지로 나뉘어진다.

구문오류 : 컴파일러가 잡아주는 프로그램 언어의 문법적 오류
논리오류 : 개발자의 잘못된 알고리즘에서 발생하는 오류 (찾아내기도 힘들고, 도구를 사용해도 불가능하다. 거의 죽음이다~.)

그러나, 신경쓰면 논리오류를 구문오류로 바꿀 수 있기도 하다.

if (NULL == 변수) {....}
매우 흔하게 나오는 실수이다. NULL과 같은 상수를 앞에 쓰면, 논리오류를 줄일 수 있다.
if (변수 = NULL) 로 써서, 한참 헤매는 상황을 피할 수 있다.

이런 것과 관련된 3가지 반드시 지켜야 할 사항이다. 이것만 잘 지켜도 중급개발자란 소리를 들을 수 있겠다.

1. const 키워드를 늘 사용한다.
바뀌지 말아야할 정보들에 대해서, 상수 선언을 한다.
void func( const int Count, char* const SzBuf){ ... }
함수를 사용할 때도, 항상 const를 사용함으로써, 버퍼의 주소위치가 바뀌는 것을 막아준다.
버퍼의 내용은 항상 변할 수 있더라도, 버퍼의 주소 위치를 고수하는 것이 좋다.
의외로 많이 하는 실수중의 하나이다. 

2. __try { } __except { } 구문을 항상 사용한다.
문제가 생기더라도, 프로그램이 불완전 종료되지 않기를 바란다면...
반드시 __try __except  와 __try __finally 구문을 사용하여야 한다.

__try {
...
}
__except( filter(GetExceptionCode() ) {
...
}

int filter( const int code ) {
switch (code) {
case 111 : 계속하기전에 수정작업; return -1;
case 222 : 또 다른 작업; return -2;
default :   ... return -100;
}
}
GetExceptionInformation() 함수도 사용해본다.


3. 예외 상황이 발생할 것을 대비하고, 예외상황을 로그로 남기는 기능을 넣는다.
프로그램이 아무리 완벽해 보여도, 무슨 상황이 발생할 지 모르는 법.
디버깅을 위해서는 항상 예외상황을 로그가 남도록 프로그램을 작성한다.

자세한 사용법은 모두 MSDN을 참고하시면 됩니다.


Posted by 훅크선장
, |
임백준의 소프트웨어 산책
에 나오는
퀴즈문제 푸는 과정중의 하나

f()함수의 각 값들이 어디서 나타나는 지 보여준다.

===========================================================
import re

f = open('e_value.txt')
s = f.read()

for i in ('7182818284', '8182845904', '8747135266', '7427466391'):
  m = re.search(i, s)
  print m.group(), m.start()
===========================================================
Posted by 훅크선장
, |
임백준의 소프트웨어산책

두번째 퀴즈문제
역시 파이썬으로 테스트해본 것

f(1) = 7182818284
f(2) = 8182845904
f(3) = 8747135266
f(4) = 7427466391
f(5) = ??????????
문제를 푸는 것.

================================
import string
import os
import math

def addum_all(s):
  val = 0
  for i in range(10):
    val += string.atoi(s[i])
  return val

f = open('e_value.txt')
s = f.read()
idx = 0
for k in range(990):
  a = addum_all(s[k:(k+10)])
  if (a == 49):
    idx += 1
    print 'f(%d) = %s' % (idx, s[k:(k+10)])
print "Done"
=================================
Posted by 훅크선장
, |
임백준의 소프트웨어 산책
에서 나오는
(소설) 프로그래머 K씨의 하루
입니다.

그안에 나오는 퀴즈문제입니다.
진짜로 "구글"에서 프로그래머를 구하기위해 낸 광고랍니다.

{First 10-digit prime found in consecutive digits of e}.com
: 오일러상수 e 의 연속적인 10개의 숫자로 첫번째로 발견되는 소수

이걸 파이썬으로 한번 짜보았습니다. 흐흐

============================================
import string
import os
import math

def isPrime(n):
  """Detect if a number is prime"""
  if n < 2: return False
  for i in range(int(math.sqrt(n)) + 1)[2:]:
    if n % i == 0: return False
  return True

f = open('e_value.txt')
s = f.read()
for i in range(990):
  a = string.atof(s[i:(10+i)])
  if (isPrime(a)):
    print '%010.0f' % a
print "Done"
===========================================

e_value.txt 파일은 오일러상수의 텍스트파일입니다.
http://www.hsd.or.kr/~hook7346/Doc/e_value.txt
Posted by 훅크선장
, |