프로그래밍 605

c++0x 의 vector 타입과 for 반복문에 관하여

다음 소스는 g++ 4.6.2, g++ 4.8.0, g++ 4.8.1 그리고 Visual Studio 2013 Express 의 cl 로 컴파일됨이 확인되었다. (g++ 4.5.3 과 Visual Studio 2010 의 cl 로는 range based for 구문 때문에 컴파일되지 않는다.) // Filename: vector_for_loop_01.cpp // // Purpose: How to use vector types and for loops. // // With g++ 4.6 above // Compile: g++ -std=c++0x -o vector_for_loop_01 vector_for_loop_01.cpp // Compile: g++ -std=c++11 -o vector_for_loop_..

프로그래밍/C++ 2013.09.27

Visual C++ 12와 cygwin64 의 g++로 테스트해 본 C++11 의 vector 타입 초기화

아래의 소스는 (64 비트) 윈도우 8 에서 Visual Studio 2013 Express 의 명령줄 컴파일러 cl 및 cygwin64 의 컴파일러 g++ 로 테스트되었다. (소스를 저장할 시, Visual C++ 용으로는 KSC5601-1987 인코딩으로 저장하고, cygwin64 의 g++ 용으로는 UTF-8 인코딩으로 저장해야 한글이 정상 출력된다.) vector 타입을 초기화(initializer lists)하는 구문 vecor v { .... } 또는 vector v = { ... } 은 C++0x(정확하게는 C++09 이후) 또는 C++11 에서만 지원되는 구문이다. 그러므로 다음 소스는 Visual Studio 2010 이나 g++ 의 버전이 4.4 미만이면 컴파일되지 않는다. Visual..

프로그래밍/C++ 2013.09.25

(Common Lisp 언어로 구현해 보는) 십진법의 신비: 숫자 계산 피라미드 세 가지

다음 소스는 GNU CLisp 으로 실행됨을 확인하였다. 세 함수 pyra1(int int), pyra2(int int), pyra3(int int) 는 재귀호출을 사용하였고, 세 함수 pyramid1(), pyramid2(), pyramid3() 은 loop for 반복문을 사용하였다. #!/usr/bin/env clisp ;; Filename: pyramidOfDigits2.lsp ;; ;; Execute: clisp pyramidOfDigits2.lsp ;; ;; Or ;; ;; Execute: ./pyramidOfDigits2.lsp ;; ;; See: http://darvish.wordpress.com/2008/03/16/the-beauty-of-mathematics-and-the-love-of..

vector 타입을 이용한 간단한 행렬 곱셈을 수행하고 행렬식을 구하는 C++ 언어 소스

다음은 행렬 곱셈을 수행하는 C++ 언어 소스이다. 행의 수, 열의 수. 그리고 두 행렬의 요소들을 모두 컨솔에서 입력해야 한다. 소스는 http://www.physics.utah.edu/~detar/lessons/c++/matrices/node4.html 의 것을 다소 수정한 것이다. // Filename: testSomeMat-03.cpp // // Copmpile: cl /EHsc testSomeMat-03.cpp // Execute: testSomeMat-03 // // Date: 2003.9. 20. #include #include #include using namespace std; typedef vector Vec; typedef vector Mat; Vec operator*(const Ma..

프로그래밍/C++ 2013.09.20

우순열 기순열을 이용하여 정사각행렬의 행렬식을 계산하는 C++ 언어 소스

정리 (정사각행렬의 행렬식, derterminant) n × n 행렬 A = \big( a_{ij} \big) 의 행렬식 \det(A) 는 다음 식과 같다 \det(A) \ = \ \sum_{\sigma} \, \textrm{sign}(\sigma) \, a_{1 \sigma(1)} a_{2 \sigma(2)} \cdots a_{n \sigma(n)} 위에서 합은 집합 \{ 1, 2, \cdots, n \} 위에서의 모든 순열 \sigma에 관한 합이며, \textrm{sign}(\sigma) 는 \sigma가 우순열인 경우에는 +1이고, 기순열인 경우에는 -1이다. 다음의 C++ 언어로 작성된 소스는 순열을 출력하는 소스를 수정아여 정사각행렬의 행렬식을 계산하도록 하였다. 컴파일은 g++ 또는 Visu..

프로그래밍/C++ 2013.09.20

지정한 개수의 모든 순열을 출력하는 C++ 언어 소스

정의 (순열(또는 치환), permutation) S가 집합일 때, S에서 S 위로 가는 일대일함수 즉, S에서 S로 가는 전단사함수를 집합 S 위에서의 순열이라고 한다, 특히 S가 원소 n개를 갖는 유한집합인 경우 S 위에서의 서로 다른 순열은 총 n!(n 팩토리얼)개이다. 다음의 C++ 언어로 작성된 소스는 유한집합 S = { 0, 1, 2, ... , n - 1 } 상에서의 모든 순열을 컨솔에 출력해준다. 우순열(even permutation)인지 기순열(odd permutation)인지도 판별해준다. 컴파일은 g++ 또는 Visual C++ 의 명령줄 컴파일러 cl 을 이용한다. // Filename: permutations.cpp // // Compile: g++ -std=c++11 -o per..

프로그래밍/C++ 2013.09.20

Common Lisp 언어로 한 번의 floor 함수 호출로 몫과 나머지 구하기

(실수) = (정수부) + (소수부) (단, 0 (q, r) = divmod(23, 7) >>> q 3 >>> r 2 >>> divmod(-20, 7) (-3, 1) >>>>>> quit() 이제 CLisp 의 경우에 대해서 알아 보자. Common Lisp 언어의 floor 함수는 몫과 나머지를 함께 리턴하지만 리턴된 값들을 받으려면 다소 까다롭다. setq 나 setf 로는 안 되고 multiple-value-setq 를 사용해야 한다. 명령 프롬프트> clisp i i i i i i i ooooo o ooooooo ooooo ooooo I I I I I I I 8 8 8 8 8 o 8 8 I \ `+' / I 8 8 8 8 8 8 \ `-+-' / 8 8 8 ooooo 8oooo `-__|__-' ..

스트링 벡터에서 스트링 찾기(find) with Common Lisp

[파일명: testStringFindInVector.lsp]------------------------------------------------ #!/usr/bin/env clisp ;; Filename: testStringFindInVector.lsp ;; ;; Approximate square roots, cubic roots and n-th roots of a given number. ;; ;; Execute: clisp testStringFindInVector.lsp ;; Or ;; Execute: ./testStringFindInVector.lsp ;; ;; Date: 2013. 9. 12. (defun my-exact-find(arr s) ; (position s arr)) (let ((r ..

Common Lisp 언어로 역삼각함수, 역쌍곡선함수 값을 구하는 예제

역삼각함수란 삼각함수의 역함수를 의미하고, 역쌍곡선함수란 쌍곡선함수의 역함수를 의미한다. 수학에서 sin 함수의 역함수는 arcsin 으로 표기되는데, Common Lisp 언어에서는 asin 함수로 이미 구현되어 있다. 마찬가지로 쌍곡선 함수 sihh, cosh 들의 역함수들도 각각 asinh, acosh 라는 이름으로 이미 구현되어 있다. #!~/usr/bin/env clisp ;; Filename: testArcSine.lsp ;; ;; Execute: clisp testArcSine.lsp ;; Or ;; Execute: ./testArcSine.lsp ;; ;; Date: 2013. 9. 12. #| def asinh(x): y = math.log(x + math.sqrt(x*x + 1)) re..

감마함수(gamma function)의 값을 (유효수자 15자리 까지 정밀하게) 계산하는 Common Lisp 언어 소스

Lanczos 알고리즘은 Stirlng 공식에 의한 알고리즘 보다 정밀하며, 십진수로 유효숫자 약 15자리 까지는 정확하게 계산해 준다. 단지 exp 함수를 이용하는 부분에서는 exp 함수의 구현에 따라 오차가 더 있을 수 있다. 단, Common Lisp 언어의 float 타입은 유효숫자를 약 7개~8개 밖에 알아내지 못한다. Comon Lisp 언어의 디퐁트 부동소수점수는 단정밀도 부동소수점수이다. 단정밀도 부동소수점수는 그 처리 가능한 양수의 범위가 최소 2−126 ≈ 1.18 × 10−38 부터 최대 (2−2−23) × 2127 ≈ 3.4 × 1038 밖에 되지 않는다. 이 범위를 벗어나는 양수에 대해서는 overflow 에러가 나게 마련이다. 이런 이유로 100! 을 계산하기 위해 (gamma ..