감마보정에 대해 간단하게 테스트 해 볼 수 있는 MFC 프로그램. 매우 간단한 대화상자 응용프로그램이다. 웹프로그래밍같은 걸 잘 몰라서, 그나마 익숙한 비주얼C 6.0 mfc로 짰다. 빨리 대충 짠 거라 버그가 많이 있을 수 있다. 소스도 올려 놓으니, 더 개선할 사람은 개선하라. 소스는 자유롭게 사용할 수 있다. 최초저자를 밝혀줘서 피드백 받을 수 있게 해주면 고맙고.
대화상자위에서 마우스 휠을 돌리면, 감마값이 바뀌면서 바뀐 감마에 대한 그레이스케일과 그래프를 보여준다. 그래프의 위아래라던가, 어느 축이 무얼 나타내는지는 소스를 보고 파악하시라. 딱 보면 알겠지만, 일반적인 수학 그래프랑 원점과 x, y 축의 방향이 다르다. 따로 윈도우 그리기 좌표계에서 변환을 하지 않아서 그렇다.
### DFT Bruteforce ### didn't check if this coding gives the right answer. I just followed the ### definition.
### by DwYoon
N_DATA = 1024 #N_DATA = 16
import cmath import random
# populate raw data using random generator # you can change this to use your own data set x = [] for i in xrange(N_DATA): x.append(random.random())
## Following is the definition of discrete fourier transformation ## essentially, it approximates frequency of the give data.
## N-1 / 2 pi i \ ## X = sum x exp | - ------- n k | ## k n=0 n \ N /
## What computer is good at is computing, don't think much, we just follow ## the given definition.
X = [] for k in xrange(N_DATA): Xk = 0 # initialize Xk # do summation over n = [ 0, ..., N-1 ] for n in xrange(N_DATA): Xk += (x[n] * cmath.exp( - 2*cmath.pi*1j*n*k/N_DATA ) ) # / 2 pi i \ # x exp | - ------- n k | # n \ N / X.append(Xk)
# check the result. Do beutify this to see the meaning clearly. print x print "-------------------------" print X
exp(x) 의 테일러 급수를 이용하여, exp(5)의 값을 구하는 기초기초적인 프로그래밍. 포트란 77로 짠 소스이고, 문제에서는 20번째 항까지 계산하라고 한다. 포트란에서 인자 받고 하는 걸 몰라서 소스에 박혀있다.
간단한 거지만 살짝 설명하면, TERM이 더할 각 항이고, 각 항과 다음 항 하고의 관계가 아주 예뻐서 프로그래밍 숙제로 나오기 아주 좋다.
PROGRAM Exp SUM = 0 X = 5 TERM = 1 SUM = SUM + TERM DO 1, I = 1, 20 TERM = TERM * X / I SUM = SUM + TERM 1CONTINUE PRINT*, SUM STOP END
빨간 색으로 된 부분은 스페이스가 아니라 탭으로 들여쓰기 한 걸 구분해 주기 위해 빔에서 표시된 것. DO 루프의 끝을 1이라는 표지와 CONTINUE 문에 나오는 첫 줄의 1이라는 표지가 일치해야 하는 것 같다. 포트란 공부해 본 게 아니고, 예전에 짰던 코드 보고 다시 짠거라 맞는지 모르겠다. 아무튼 cygwin환경에서 g77 로 컴파일해서 돌려본 결과는 잘 나왔다.
double lagrange(DATA *dataList, int nData, double x) { // L(x) = sum (j=0 to k) y_j x l_j(x) // // x -x_i // where l_j(x) = prod (i=0, i!=j to k) ----- // x_j-x_i double sum = 0;
#!/usr/bin/env python
# Daum sinjisik
# Author : DwYoon
##################################################################
print"---------------------"for i in xrange(12):
for j in xrange(12):
print (((i+2)/2)%2)^(((j)/2)%2),
print
##################################################################
print"---------------------"for i in xrange(12):
for j in xrange(12):
print (((i+3)/3)%2)^(((j)/3)%2),
print
##################################################################
print"---------------------"
array = [ [ 0 for i in xrange(6) ] for j in xrange(6) ]
# for i in xrange(6):
# print array[i]
n = 1
x, y = 0, 0
v = 1, 0
array[y][x] = n
while [ x, y ] != [ 0, 1 ]:
if (x, y) == (5, 0):
v = 0, 1
elif (x, y) == (5, 5):
v = -1, 0
elif (x, y) == (0, 5):
v = 0, -1
n+=1
x, y = x+v[0], y+v[1]
array[y][x] = n
for y in xrange(6):
for x in xrange(6):
print"%2d"%array[y][x],
print
##################################################################
print"---------------------"
array = [ [ 0 for i in xrange(6) ] for j in xrange(6) ]
n = 1
x, y = 0, 0
v = 1, 0
array[y][x] = n
while 1:
x, y = x+v[0] , y+v[1]
if x < 0 or x > 5 or y < 0 or y > 5 or array[y][x] != 0:
x, y = x-v[0] , y-v[1]
v = -v[1], v[0] # velocity vector +90 degree rotation
x, y = x+v[0] , y+v[1]
n+=1
array[y][x] = n
if n == 36:
breakfor y in xrange(6):
for x in xrange(6):
print"%2d"%array[y][x],
print
staticvoid 점수출력하기() { 콘솔출력.Write("이름\t"); for(int k = 0; k < 4; k++) 콘솔출력.Write(성적구분[k] + "\t"); 콘솔출력.WriteLine("합계\t학점");
for (int i = 0; i < 30; i++) { if (이름[i] == "") break; 콘솔출력.Write(이름[i] + "\t"); for (int k = 0; k < 5; k++) 콘솔출력.Write(점수[i,k] + "\t"); 콘솔출력.WriteLine(학점[i]); } }