컴퓨터 엑셀 워드 포토숍 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Monthly Archive
Wednesday, February 28, 2007

Excel/엑셀] 분수 입력, 소수를 분수로 변환 표현 방법; Fraction Input, Decimal To Fraction

컴퓨터에서는, "2분의 1"을 "1/2" 로 표현합니다. 그렇지만 엑셀의 셀에, 1/2 이라고 입력하면, "01월 02일"이라는 날짜로 변환되어 버립니다.

분수 "1/2"을 정확히 입력하기 위해서는,

0 1/2

이라고 입력하면 됩니다. "0과 2분의 1"이라는 뜻입니다. 그러면 셀에 "1/2"이라고 입력됩니다. 또한 "수식창에 "0.5" 라는 값이 나타날 것입니다. 분수를 소수로 나타낸 값입니다.

주의! 반드시 0 다음에 1칸의 공백(스페이스 문자)을 찍어야 합니다.


"1과 2분의 1" 같은 대분수(帶分數)를 입력하려면

1 1/2

이렇게 하면 됩니다. 셀에 "1 1/2"이라고 분수가 입력되고, 수식창에는 1.5 라고 나옵니다.


소수를 분수로 변환


예를 들어, 0.333 이라는 소수를 분수로 변환하려면, 셀에 0.333 이라고 기입한 후, 그 셀을 "마우스 우측 버튼"으로 클릭하여, 셀 서식 항목을 선택하고, "표시 형식"에서, 분수 를 선택하면

"0.333" 이 "1/3" 이라는 분수로 변환됩니다.


그런데 예를 들어, 0.4525 라는 소수를 분수로 변환하는 경우,

분수 형식을

"한 자릿수 분모"로 지정하면: 4/9
"두 자릿수 분모"로 지정하면: 19/42
"세 자릿수 분모"로 지정하면: 181/400

이라는 값으로 변환됩니다. 정밀한 값이 필요할 때는 "세 자릿수 분모"로 지정하는 것이 좋습니다.

분수를 다시 소수로 되돌려 보면 다음과 같이 정밀도의 차이가 있습니다.

4/9 = 0.44444444444444444444444444444444
19/42 = 0.45238095238095238095238095238095
181/400 = 0.4525


분수를 소수로 변환


간단한 방법으로는 예를 들어, 4/9 라는 분수를 소수로 변환하려면

=4/9

이렇게 하면 됩니다. 즉, 분자 나누기 분모입니다.


또는
0 4/9
이렇게 분수를 직접 셀에 입력한 후, 마우스 우측 버튼의 "셀 서식"에서, 숫자를 선택하고, "소수 자릿수" 입력 칸에 3 정도를 지정하면 됩니다.





보다 정밀하게 소수를 분수로 변환하려면 매스매티카에서 계산하는 것이 좋습니다: ▶▶ 매스매티카] 소수를 분수로 변환 함수/명령; Mathematica Decimal To Fraction


소수를 분수로 변환한 표 보기: ▶▶ 소수를 분수로 변환하기 표, 0.01에서 10.0까지; Frac Table


소수 분수 상호 변환기: ▶▶ 소수 분수 변환기; 소수를 분수로, 분수를 소수로 변환; Frac Converter

대분수 가분수 자동 변환기: ▶▶ 대분수 가분수 변환 계산기; Mixed Number Calc





Excel/엑셀 VBA] 숫자 앞에 공백 추가, 자릿수 맞추기 함수; Add Leading Spaces to Number

엑셀 비베에서, 숫자 앞의 빈 자리에 영(0)을 추가하는 것은 Format 함수로 가능하지만, 아래와 같이 숫자 앞에 공백(스페이스)을 추가하는 것은 되지 않았습니다. 엑셀의 특성상, 숫자 앞에 공백을 넣어야 할 경우가 아주 드물기에 그런 것 같습니다.
[  5]
[ 55]
[555]

그래서 그런 일을 하는 함수를 만들었습니다.

leadingSpaces(숫자, 자리수)
이런 형식으로 사용합니다.

숫자 여백에 스페이스(Space) 문자 넣기 예제; printf() 함수처럼


(엑셀에서 Alt+F11키를 눌러, 비베 에디터를 실행하고, 비베 에디터 메뉴의, "삽입 > 모듈"을 선택한 후, 다음 코드를 붙여 넣습니다.)
비베 에디터에서 F5 키를 누르거나, 엑셀에서 Alt+F8 키를 누르면 VBA 매크로가 실행됩니다.

(공백 문자가 앞에 붙어 있는지 아닌지 알아 보기 쉽도록, 숫자 양옆에 대괄호를 붙였습니다.)
Sub Add_Leading_Spaces_Example()

  MsgBox "[" & leadingSpaces(5, 3) & "]"
  ' 출력 결과: [  5]


  MsgBox "[" & leadingSpaces(55, 3) & "]"
  ' 출력 결과: [ 55]


  MsgBox "[" & leadingSpaces(555, 3) & "]"
  ' 출력 결과: [555]

End Sub




Function leadingSpaces(n, digits)

  Dim I, Space

  If (Len(n) < digits) Then
    For I = 1 To digits - Len(n)
      Space = Space & " "
    Next I
  End If

  leadingSpaces = Space & n

End Function



숫자 앞에 0 추가: ▶▶ Excel/엑셀 VBA] 숫자 앞에 공(0), 제로(영) 붙이기-추가. Leading Zero to Number

자바스크립트] 숫자 앞에 공백 추가, 자릿수 맞추기; Leading Spaces to Number JavaScript

자바스크립트에서 숫자를 표현할 때, 앞에 공백(스페이스)을 붙여서 자릿수를 맞추는 함수를 만드는 방법입니다. 예를 들어 다음과 같이
[  5]
[ 55]
[555]

작은 자릿수의 숫자 앞에 공백을 추가하여, 큰 자릿수 숫자와 줄을 맞추는 것입니다.
leadingSpaces(숫자, 자리수)
이런 형식으로 사용합니다.

그런데 HTML에서는 폰트의 종류에 따라, 공백의 폭이 들쭉날쭉합니다. 따라서 "돋움체(DotumChe)" 같이, 폭이 일정한 폰트를 지정해야, 숫자 앞의 공백이 보기 좋게 정렬되어 나옵니다. 다음 예제와 같습니다.

JavaScript: 숫자 여백에 스페이스(Space) 문자 넣기 예제; printf() 함수처럼


파일명: example.html
(공백 문자가 앞에 붙어 있는지 아닌지 알아 보기 쉽도록, 숫자 양옆에 대괄호를 붙였습니다.)
<script type="text/javascript">

document.write('<div style="font:12pt DotumChe">');



document.write('[', leadingSpaces(5, 3), ']<br />');
// 출력 결과: [  5]

document.write('[', leadingSpaces(55, 3), ']<br />');
// 출력 결과: [ 55]

document.write('[', leadingSpaces(555, 3), ']<br />');
// 출력 결과: [555]



document.write('</div>');




function leadingSpaces(n, digits) {
  var space = '';
  n = n.toString();

  if (n.length < digits) {
    for (var i = 0; i < digits - n.length; i++)
      space += '&nbsp;';
  }
  return space + n;
}

</script>



실용적인 예제: ▶▶ 자바스크립트] 구구단 출력, 구구단표 만들기; HTML JavaScript Multiplication Table 99



숫자 앞의 여백에 0을 추가하기: ▶▶ 자바스크립트] 숫자 앞에 공(0), 제로(영) 붙이기/추가. Leading Zero to Number JavaScript

Tuesday, February 27, 2007

자바스크립트] 구구단 출력, 구구단표 만들기; HTML JavaScript Multiplication Table 99

아래와 같은 구구단표를 화면에 출력하는 자바스크립트(JavaScript) 소스입니다. 2단 ~ 5단까지, 그리고 6단 ~ 9단까지, 이렇게 두 줄로 나누어서 브라우저에 출력합니다.


                   [ 구구단 ]

2 X 1 =  2   3 X 1 =  3   4 X 1 =  4   5 X 1 =  5
2 X 2 =  4   3 X 2 =  6   4 X 2 =  8   5 X 2 = 10
2 X 3 =  6   3 X 3 =  9   4 X 3 = 12   5 X 3 = 15
2 X 4 =  8   3 X 4 = 12   4 X 4 = 16   5 X 4 = 20
2 X 5 = 10   3 X 5 = 15   4 X 5 = 20   5 X 5 = 25
2 X 6 = 12   3 X 6 = 18   4 X 6 = 24   5 X 6 = 30
2 X 7 = 14   3 X 7 = 21   4 X 7 = 28   5 X 7 = 35
2 X 8 = 16   3 X 8 = 24   4 X 8 = 32   5 X 8 = 40
2 X 9 = 18   3 X 9 = 27   4 X 9 = 36   5 X 9 = 45

6 X 1 =  6   7 X 1 =  7   8 X 1 =  8   9 X 1 =  9
6 X 2 = 12   7 X 2 = 14   8 X 2 = 16   9 X 2 = 18
6 X 3 = 18   7 X 3 = 21   8 X 3 = 24   9 X 3 = 27
6 X 4 = 24   7 X 4 = 28   8 X 4 = 32   9 X 4 = 36
6 X 5 = 30   7 X 5 = 35   8 X 5 = 40   9 X 5 = 45
6 X 6 = 36   7 X 6 = 42   8 X 6 = 48   9 X 6 = 54
6 X 7 = 42   7 X 7 = 49   8 X 7 = 56   9 X 7 = 63
6 X 8 = 48   7 X 8 = 56   8 X 8 = 64   9 X 8 = 72
6 X 9 = 54   7 X 9 = 63   8 X 9 = 72   9 X 9 = 81



아래의 소스 코드로 위의 출력 결과를 얻을 수 있습니다:

JavaScript 소스: 구구단표 작성 예제


파일명: example.html
<script type="text/javascript">

document.write('<div style="font:12pt DotumChe">');
document.write('<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [ 구구단 ]<br />');


for (var j = 1; j <= 9; j++) {
  document.write('<br />');
  for (var i = 2; i <= 5; i++) {  // 2단 ~ 5단까지
    document.write(i, ' X ', j, ' = ', leadingSpaces(i * j, 2), ' &nbsp; ');
  }
}


document.write('<br />');  // 줄바꿈


for (var j = 1; j <= 9; j++) {
  document.write('<br />');
  for (var i = 6; i <= 9; i++) {  // 6단 ~ 9단까지
    document.write(i, ' X ', j, ' = ', leadingSpaces(i * j, 2), ' &nbsp; ');
  }
}


document.write('</div>');




// 1자리 숫자 앞에 공백을 붙여 2자리로 맞추는 함수
// 가령, '5'를 ' 5'로
function leadingSpaces(n, digits) {
  var space = '';
  n = n.toString();

  if (n.length < digits) {
    for (var i = 0; i < digits - n.length; i++)
      space += '&nbsp;';
  }
  return space + n;
}

</script>


위의 코드를 example.html 등의 이름으로 저장하고, 인터넷 브라우저로 열어서 보면 구구단표가 나옵니다.


자바스크립트가 아닌 자바로 구구단 출력 소스: ▶▶ Java/자바] 구구단 출력, 구구단표 만들기 자바 소스; Multiplication Table 99


구구단 게임 (온라인 버전):
▶▶ 구구단 게임, 99단 외우기 Game; 인터넷 브라우저에서 구구단 암기



Java/자바] 구구단 출력, 구구단표 만들기 자바 소스; Multiplication Table 99

아래와 같은 구구단표를 화면에 출력하는 Java 소스입니다. 2단 ~ 5단까지, 그리고 6단 ~ 9단까지, 이렇게 두 줄로 나누어서 보기 좋게 출력합니다. 이렇게 하면 도스창(콘솔) 화면에서 보기에도 적당하고, 종이에 인쇄하기에도 적합할 것입니다.

D:\Z>javac Example.java && java Example

                   < 구구단 >

2 X 1 =  2   3 X 1 =  3   4 X 1 =  4   5 X 1 =  5
2 X 2 =  4   3 X 2 =  6   4 X 2 =  8   5 X 2 = 10
2 X 3 =  6   3 X 3 =  9   4 X 3 = 12   5 X 3 = 15
2 X 4 =  8   3 X 4 = 12   4 X 4 = 16   5 X 4 = 20
2 X 5 = 10   3 X 5 = 15   4 X 5 = 20   5 X 5 = 25
2 X 6 = 12   3 X 6 = 18   4 X 6 = 24   5 X 6 = 30
2 X 7 = 14   3 X 7 = 21   4 X 7 = 28   5 X 7 = 35
2 X 8 = 16   3 X 8 = 24   4 X 8 = 32   5 X 8 = 40
2 X 9 = 18   3 X 9 = 27   4 X 9 = 36   5 X 9 = 45

6 X 1 =  6   7 X 1 =  7   8 X 1 =  8   9 X 1 =  9
6 X 2 = 12   7 X 2 = 14   8 X 2 = 16   9 X 2 = 18
6 X 3 = 18   7 X 3 = 21   8 X 3 = 24   9 X 3 = 27
6 X 4 = 24   7 X 4 = 28   8 X 4 = 32   9 X 4 = 36
6 X 5 = 30   7 X 5 = 35   8 X 5 = 40   9 X 5 = 45
6 X 6 = 36   7 X 6 = 42   8 X 6 = 48   9 X 6 = 54
6 X 7 = 42   7 X 7 = 49   8 X 7 = 56   9 X 7 = 63
6 X 8 = 48   7 X 8 = 56   8 X 8 = 64   9 X 8 = 72
6 X 9 = 54   7 X 9 = 63   8 X 9 = 72   9 X 9 = 81

D:\Z>


아래의 소스 코드로 위의 출력 결과를 얻을 수 있습니다:

자바 소스: 구구단표 작성 예제


소스 파일명: Example.java
public class Example {
  public static void main(String[] args) {

    System.out.format("%n                   < 구구단 >%n");


    for (int j = 1; j <= 9; j++) {
      System.out.println();
      for (int i = 2; i <= 5; i++) {  // 2단 ~ 5단까지
        System.out.format("%d X %d = %2d   ", i, j, i * j);
      }
    }


    System.out.println(); // 줄바꿈


    for (int j = 1; j <= 9; j++) {
      System.out.println();
      for (int i = 6; i <= 9; i++) {  // 6단 ~ 9단까지
        System.out.format("%d X %d = %2d   ", i, j, i * j);
      }
    }


    System.out.println(); // 줄바꿈


  }
}


컴파일한 후

java Example > out.txt

라는 명령으로 실행하면, 화면 출력 결과를 out.txt 라는 파일로 저장할 수 있습니다.



자바 컴파일러를 설치하지 않았을 때에는, 다음과 같은 자바스크립트 코드를 사용하면 인터넷 브라우저에 구구단을 출력할 수 있습니다: ▶▶ 자바스크립트] 구구단 출력, 구구단표 만들기; HTML JavaScript Multiplication Table 99



19단 출력: ▶▶ Java/자바] 19단표 만들기, 19단 출력 예제 소스, 십구단 십구단표; 19 x 19 Table

구구단 게임 (온라인 버전):
▶▶ 구구단 게임, 99단 외우기 Game; 인터넷 브라우저에서 구구단 암기 놀이



C언어] 구구단 출력, 구구단표 만들기 C소스; Multiplication Table 99

다음과 같은 구구단표를 화면에 출력하는 C소스입니다. 2단 ~ 5단까지, 그리고 6단 ~ 9단까지, 이렇게 두 줄로 보기 좋게 출력합니다. 초등학생의 책받침에 있는 구구단처럼 그렇게 출력하는 것입니다.

D:\Z>cl /nologo example.cpp && example.exe
example.cpp

                   < 구구단 >

2 X 1 =  2   3 X 1 =  3   4 X 1 =  4   5 X 1 =  5
2 X 2 =  4   3 X 2 =  6   4 X 2 =  8   5 X 2 = 10
2 X 3 =  6   3 X 3 =  9   4 X 3 = 12   5 X 3 = 15
2 X 4 =  8   3 X 4 = 12   4 X 4 = 16   5 X 4 = 20
2 X 5 = 10   3 X 5 = 15   4 X 5 = 20   5 X 5 = 25
2 X 6 = 12   3 X 6 = 18   4 X 6 = 24   5 X 6 = 30
2 X 7 = 14   3 X 7 = 21   4 X 7 = 28   5 X 7 = 35
2 X 8 = 16   3 X 8 = 24   4 X 8 = 32   5 X 8 = 40
2 X 9 = 18   3 X 9 = 27   4 X 9 = 36   5 X 9 = 45

6 X 1 =  6   7 X 1 =  7   8 X 1 =  8   9 X 1 =  9
6 X 2 = 12   7 X 2 = 14   8 X 2 = 16   9 X 2 = 18
6 X 3 = 18   7 X 3 = 21   8 X 3 = 24   9 X 3 = 27
6 X 4 = 24   7 X 4 = 28   8 X 4 = 32   9 X 4 = 36
6 X 5 = 30   7 X 5 = 35   8 X 5 = 40   9 X 5 = 45
6 X 6 = 36   7 X 6 = 42   8 X 6 = 48   9 X 6 = 54
6 X 7 = 42   7 X 7 = 49   8 X 7 = 56   9 X 7 = 63
6 X 8 = 48   7 X 8 = 56   8 X 8 = 64   9 X 8 = 72
6 X 9 = 54   7 X 9 = 63   8 X 9 = 72   9 X 9 = 81

D:\Z>


아래의 소스 코드로 위의 출력 결과를 얻을 수 있습니다:

C소스: 구구단표 작성 예제


소스 파일명: example.cpp
#include <stdio.h>

int main(void) {

  puts("\n                   < 구구단 >");

  for (int j = 1; j <= 9; j++) {
    puts("");
    for (int i = 2; i <= 5; i++) {  // 2단 ~ 5단까지
      printf("%d X %d = %2d   ", i, j, i * j);
    }
  }


  puts("");  // 줄바꿈


  for (int j = 1; j <= 9; j++) {
    puts("");
    for (int i = 6; i <= 9; i++) {  // 6단 ~ 9단까지
      printf("%d X %d = %2d   ", i, j, i * j);
    }
  }


  puts("");  // 줄바꿈


  return 0;
}



소스를 컴파일하여 example.exe 라는 실행 파일을 만든 후
example.exe > out.txt
라는 명령으로 실행하면, 화면 출력 결과를 out.txt 라는 파일로 저장할 수 있습니다.


19단 출력 소스: ▶▶ C언어] 19단표 만들기, 19단 출력 소스, 십구단 십구단표; 19 x 19 Table


구구단 게임 (온라인 버전):
▶▶ 구구단 게임, 99단 외우기 Game; 인터넷 브라우저에서 구구단 암기 놀이

Perl/펄] 구구단 출력, 구구단표 만들기; Multiplication Table 99

펄로, 구구단(구구단표)을 화면에 출력하는 프로그램입니다. 구구단을 출력하는 것 자체는 쉽지만, 화면 크기에 맞추어서 보기 좋게 정렬하여 출력하려면 약간의 알고리즘(?)이 필요합니다.

D:\Z>example.pl

                   < 구구단 >

2 X 1 =  2   3 X 1 =  3   4 X 1 =  4   5 X 1 =  5
2 X 2 =  4   3 X 2 =  6   4 X 2 =  8   5 X 2 = 10
2 X 3 =  6   3 X 3 =  9   4 X 3 = 12   5 X 3 = 15
2 X 4 =  8   3 X 4 = 12   4 X 4 = 16   5 X 4 = 20
2 X 5 = 10   3 X 5 = 15   4 X 5 = 20   5 X 5 = 25
2 X 6 = 12   3 X 6 = 18   4 X 6 = 24   5 X 6 = 30
2 X 7 = 14   3 X 7 = 21   4 X 7 = 28   5 X 7 = 35
2 X 8 = 16   3 X 8 = 24   4 X 8 = 32   5 X 8 = 40
2 X 9 = 18   3 X 9 = 27   4 X 9 = 36   5 X 9 = 45

6 X 1 =  6   7 X 1 =  7   8 X 1 =  8   9 X 1 =  9
6 X 2 = 12   7 X 2 = 14   8 X 2 = 16   9 X 2 = 18
6 X 3 = 18   7 X 3 = 21   8 X 3 = 24   9 X 3 = 27
6 X 4 = 24   7 X 4 = 28   8 X 4 = 32   9 X 4 = 36
6 X 5 = 30   7 X 5 = 35   8 X 5 = 40   9 X 5 = 45
6 X 6 = 36   7 X 6 = 42   8 X 6 = 48   9 X 6 = 54
6 X 7 = 42   7 X 7 = 49   8 X 7 = 56   9 X 7 = 63
6 X 8 = 48   7 X 8 = 56   8 X 8 = 64   9 X 8 = 72
6 X 9 = 54   7 X 9 = 63   8 X 9 = 72   9 X 9 = 81

D:\Z>


아래의 펄 코드로 위의 출력 결과를 얻을 수 있습니다:

구구단표 작성 예제


파일명: example.pl
#!/usr/bin/perl
use strict; use warnings;

  print "\n                   < 구구단 >\n";


  for (my $j = 1; $j <= 9; $j++) {
    print "\n";
    for (my $i = 2; $i <= 5; $i++) {  # 2단 ~ 5단까지
      printf("%d X %d = %2d   ", $i, $j, $i * $j);
    }
  }


  print "\n";  # 줄바꿈


  for (my $j = 1; $j <= 9; $j++) {
    print "\n";
    for (my $i = 6; $i <= 9; $i++) {  # 6단 ~ 9단까지
      printf("%d X %d = %2d   ", $i, $j, $i * $j);
    }
  }


  print "\n";  # 줄바꿈



또한
example.pl > out.txt
라는 명령으로 실행하면, 화면 출력 결과를 out.txt 라는 파일로 저장할 수 있습니다.




19단표 만들기: ▶▶ Perl/펄] 19단 출력, 19단표 만들기, 십구단 십구단표; 19 x 19 Table

구구단 게임 (온라인 버전):
▶▶ 구구단 게임, 99단 외우기 Game; 인터넷 브라우저에서 구구단 암기 놀이

자바스크립트] 음수, 양수의 곱셈 방법 설명; JavaScript Multiply Negative Numbers

음수의 곱셈에 대해서 자바로 만들었던 코드인데, 자바 컴파일러를 설치하지 않은 분을 위해서, 자바스크립트로 만들었습니다.

설명은 여기를 참고: ▶▶ Java/자바] 음수 곱하기 음수가, 양수가 되는 이유, 음수 곱셈; Multiplication of Negative Numbers


파일명: example.html
(※ 스크롤 박스 사용법: 박스 안을 마우스로 클릭한 후, 키보드의 좌우 화살표키를 누르면 양옆으로 움직일 수 있습니다. 박스에서 다시 나오려면, 박스 바깥의 아무곳이나 클릭하면 됩니다.)
<script type="text/javascript">

//*********************************************************
// 양수 곱하기 양수 = 양수
//*********************************************************
document.write(3 * 4, '<br />');                     // 12
document.write(3 + 3 + 3 + 3, '<br />');             // 12
/* 3을 4번 더하기 (쉬움) */
/* 3이라는 재산을, 4번 증가 */


//*********************************************************
// 음수 곱하기 양수 = 음수
//*********************************************************
document.write(-3 * 4, '<br />');                    // -12
document.write((-3) + (-3) + (-3) + (-3), '<br />'); // -12
/* -3를 4번 더하기 (쉬움) */
/* -3이라는 빚이 4번 생김 */



///////////////////////////////////////////////////////////
// 양수 번 더하기는 상식적이지만
// 다음의, 음수 번 더하기는 상상하기 어렵습니다.
// 음수 번 더하기는, 결국 앞의 숫자의 부호가 거꾸로
// 된다는 뜻입니다.
///////////////////////////////////////////////////////////



//*********************************************************
// 양수 곱하기 음수 = 음수
//*********************************************************
document.write(3 * -4, '<br />');                    // -12
document.write((-3) + (-3) + (-3) + (-3), '<br />'); // -12
/* 3이라는 재산을, 빚으로 만들기를 4번 */


//*********************************************************
// 음수 곱하기 음수 = 양수
//*********************************************************
document.write(-3 * -4, '<br />');                   // 12
document.write((+3) + (+3) + (+3) + (+3), '<br />'); // 12
/* -3이라는 빚을, 재산으로 만들기를 4번 */


</script>


위의 코드를 example.html 이라는 이름의 파일로 저장하고, 인터넷 브라우저로 example.html 파일을 보면, 다음과 같은 결과가 나옵니다.

브라우저 출력 결과:
12
12
-12
-12
-12
-12
12
12



참고로, document.write() 는 숫자나 문자를 인터넷 브라우저에 출력하는 함수이고, 그 속의
, '<br />'
이라는 부분은 다음줄로 줄바꿈하는 것입니다.



Java/자바] 음수 곱하기 음수가, 양수가 되는 이유, 음수 곱셈; Multiplication of Negative Numbers

"음수 곱하기 음수 = 양수"를, "빚 곱하기 빚 = 이익"이라는 식으로 생각하면 이상하지만, 실은,

"음수 곱하기 음수"는

"빚 곱하기 빚"이 아니라

"빚을 이익으로 몇 번 전환하기" 입니다.

따라서 -3 X -4 는
-3 이라는 빚을, 이익(재산)으로 바꾸기를 4번한다는 뜻이 되어, 답은 12가 됩니다.

또한 -4 X -3 도
-4 라는 빚을, 이익(재산)으로 바꾸기를 3번한다는 뜻이 되어, 답은 12가 됩니다.



왜냐하면
-3 X 4 = -12 이기에
-3 X -4 는 정반대의 값인 12 가 나와야 하기 때문입니다.


참고로, 컴퓨터에서 곱셈 기호는 X가 아니라 *(별표;애스터리스크)입니다. 그리고 나눗셈이나 분수 기호는 슬래시(/)입니다. 아래 자바 소스부터는 X 를 * 로 표현합니다.


음수/양수 곱셈 예제


소스 파일명: Example.java
public class Example {
  public static void main(String[] args) {


//***************************************************
// 양수 곱하기 양수 = 양수
//***************************************************
System.out.println(3 * 4);                      // 12
System.out.println(3 + 3 + 3 + 3);              // 12
/* 3을 4번 더하기 (쉬움) */
/* 3이라는 재산을, 4번 증가 */


//***************************************************
// 음수 곱하기 양수 = 음수
//***************************************************
System.out.println(-3 * 4);                    // -12
System.out.println((-3) + (-3) + (-3) + (-3)); // -12
/* -3를 4번 더하기 (쉬움) */
/* -3이라는 빚이 4번 생김 */



/////////////////////////////////////////////////////
// 양수 번 더하기는 상식적이지만
// 다음의, 음수 번 더하기는 상상하기 어렵습니다.
// 음수 번 더하기는, 결국 앞의 숫자의 부호가 거꾸로
// 된다는 뜻입니다.
/////////////////////////////////////////////////////



//***************************************************
// 양수 곱하기 음수 = 음수
//***************************************************
System.out.println(3 * -4);                    // -12
System.out.println((-3) + (-3) + (-3) + (-3)); // -12
/* 3이라는 재산을, 빚으로 만들기를 4번 */


//***************************************************
// 음수 곱하기 음수 = 양수
//***************************************************
System.out.println(-3 * -4);                    // 12
System.out.println((+3) + (+3) + (+3) + (+3));  // 12
/* -3이라는 빚을, 재산으로 만들기를 4번 */


  }
}


그렇지만 음수를 3번 곱하면 음수가 나옵니다: ▶▶ Java 자바] 음수에 대한 제곱, 거듭제곱(세제곱, 네제곱); Power of Negative Number



자바 컴파일러를 설치하지 않은 분은, 다음의 자바스크립트 코드를 사용하면 인터넷 브라우저로도 쉽게 계산해 볼 수 있습니다: ▶▶ 자바스크립트] 음수, 양수의 곱셈 방법 설명; JavaScript Multiply Negative Numbers



Monday, February 26, 2007

KAGAYA 천문 월페이퍼 (가가야 별자리 벽지) 다운로드 홈페이지 주소; Wallpaper Download

일본에 "천문화가"로 알려져 있는, "가가야"라는 유명한 화가가 있습니다. 본명은
加賀谷 穣(かがや・ゆたか; Kagaya Utaka)
입니다.

현재 星ナビ.com 이라는 일본 천문학 사이트에서, 가가야 씨의 작품들을 컴퓨터용 월페이퍼로 만들어서 무료로 제공하고 있습니다. 몇 년 전에 발견했을 때에는 일시적인 전시인 줄 알았는데, 지금도 계속 다운로드가 가능한 것을 보니 고정 코너인 것 같습니다.

* 초등학교 운동장에 있는 정글짐(Jungle Gym)이라는 놀이 기구에 올라 밤하늘을 올려다 보는 벽지

* 여름날 밤에 향(お香)을 피워놓고 문턱에서 밤하늘을 올려다 보는 벽지

* 남매가 동네 난간에서 밤하늘을 올려다 보는 벽지

* 고이노보리(鯉幟;こいのぼり)가 밤하늘을 향해 휘날리는 벽지

등등이 있습니다.


다운로드 주소


< KAGAYAイラスト 壁紙 >
이곳입니다. 사이즈는 800×600 과 1024×768 이렇게 두 종류가 있습니다. 되도록 1024×768 쪽이 좋습니다.



가가야 월페이퍼에 대한 여담


제가 몇 년 전에 뉴스그룹에서 "오누이가 주택가 난간에서 밤하늘을 올려다 보는 그림(そらのおはなし'하늘의 이야기'라는 작품)"의 축소판을 받았는데, 그림이 좋아서 원본을 받으려고 했습니다. 그렇지만 누가 그린 것인지 알 수가 없어서 어려웠습니다. 처음에는 한국 사람이 그린 줄 알았지만, 구글링을 하다 보니까 가가야 씨의 작품이라는 것을 알게 되었고, 그래서 위의 사이트를 찾을 수 있게 되었습니다.

그리고 처음에는 그림들을 "에어 브러시"로 그린 줄 알았는데, 맥킨토시 컴퓨터로 그린 것이라고 하더군요. 그 사실을 알고 나서부터 저도 맥을 한 대 갖고 싶다는 작은(?) 소망이 생겼습니다.




C언어] NaN 출력, 실수 연산 에러 판단 함수 _isnan(); isnan

NaN 또는 NAN 또는 nan 이라는 것은 "not a number" 즉, "숫자가 아님"이라는 뜻입니다.

함수 내에서 실수 연산을 하다가 예외적인 상황이 발생하거나 에러가 났을 때 0.0 을 돌려주면, 에러가 났는지 아니면 진짜 0인지 알 수 없어서 모호하고, NULL 을 반환해도 0.0으로 표시되고 해서 곤란한 경우에는

sqrt(-1.0) 을 돌려주면 적당했습니다. 이 경우에도 비주얼C는 NaN을 돌려주지는 않고 -1.#IND00 이라는 값을 반환합니다. 이것을 _isnan() 함수는 NaN 으로 인식합니다.

float.h 헤더파일의 _isnan() 함수는, 파라미터로 입력해준 double형의 숫자가 정상적인 숫자이면 0을, NaN 이라면 0이 아닌 숫자를 반환합니다. 이것으로 어떤 결과값이 NaN 인지 아닌지 판단할 수 있습니다.

C의 표준 함수가 아니기에, isnan() 이렇게 하면 안되고, 앞에 언더스코어를 붙여서 _isnan() 이렇게 표현해야 합니다.


_isnan() / isnan() 사용 예제 소스


소스 파일명: example.cpp
#include <stdio.h>
#include <float.h> // isnan()
#include <math.h> // sqrt()


int main(void) {

  // 음수의 제곱근은 없기에,
  // 즉, 제곱해서 음수가 되는 숫자는 없기에 NaN 입니다.
  double d = sqrt(-1.0);
  printf("%f\n", d);
  // 출력 결과: -1.#IND00



  if (_isnan(d))
    printf("NaN 입니다\n");
  else
    printf("정상적인 숫자입니다\n");
  // 출력 결과: NaN 입니다



  if (_isnan(2.3))
    printf("NaN 입니다\n");
  else
    printf("정상적인 숫자입니다\n");
  // 출력 결과: 정상적인 숫자입니다



  return 0;
}



-1.#IND00 이라는 값을 실제로 사용한 케이스: ▶▶ C언어] 표준 편차 구하기/계산 함수 소스; Standard Deviation Function

Perl/펄] 표준 편차 구하기/계산 함수; Standard Deviation Function

펄에서는 아래 예제와 같은 방법으로, 표준편차 구하는 함수(서브 루틴)를 만들 수 있습니다.

standardDeviation(배열명, 옵션)
의 형식입니다.

숫자가 든 배열명이 @foo 일 때,

standardDeviation(@foo, 1)
이라고 하면, 엑셀의 STDEV() 함수에 해당하는 "표본의 표준 편차"를 구할 수 있고

standardDeviation(@foo, 0)
이라고 하면, 엑셀의 STDEVP() 함수에 해당하는 "모집단 전체의 표준 편차"를 구할 수 있습니다.

표준편차 계산 예제 코드


파일명: example.pl
#!/usr/bin/perl
use strict; use warnings;

  my @foo = ( 1345, 1301, 1368, 1322, 1310, 1370, 1318, 1350, 1303, 1299 );


  # 평균 구하기
  print mean(@foo), "\n";
  # 출력 결과: 1328.6


  # 표본의 표준편차 구하기 (STDEV)
  print standardDeviation(@foo, 1), "\n";
  # 출력 결과: 27.4639157198435


  # 모집단 전체의 표준편차 구하기 (STDEVP)
  print standardDeviation(@foo, 0), "\n";
  # 출력 결과: 26.0545581424825




sub mean {  # 산술 평균 구하기
  return "NaN" if ($#_ < 0); # 빈 배열일 경우의 에러 처리

  my @array = @_;
  my $sum = 0.0;

  for (my $i = 0; $i <= $#array; $i++) {
    $sum += $array[$i];
  }

  # 소괄호로 둘러싸 주지 않으면
  # 연산자 우선 순위 때문에 버그 생김
  return $sum / ($#array + 1);
}


sub standardDeviation {
  my $option = pop;
  my @array = @_;

  return "NaN" if ($#array + 1 < 2); # 배열 요소 개수가 최소한 2가 되어야 함

  my $sum = 0.0;
  my $sd = 0.0;
  my $diff;
  my $meanValue = mean(@array);

  for (my $i = 0; $i <= $#array; $i++) {
    $diff = $array[$i] - $meanValue;
    $sum += $diff * $diff;
  }
  $sd = sqrt($sum / ($#array + 1 - $option));

  return $sd;
}



▶▶ Perl/펄] 배열 합계, 산술 평균 구하기; Array Sum, Average (Mean)

표준편차 계산기: ▶▶ 평균 계산기, 합계 구하기, 표준편차 계산기, 중앙값; Sum Average Stdev Median Calc

Python/파이썬] 표준편차 구하기/계산 함수 소스; Standard Deviation Function

파이썬에서 숫자가 든 리스트(배열)의 표준편차를 구하려면 다음 예제의 함수를 사용하면 됩니다.

standardDeviation(리스트명, 옵션)

의 형식이며, 표준편차를 반환합니다.


옵션을 1로 지정하면, 엑셀의 STDEV() 함수에 해당하는 "표본의 표준 편차"를 구할 수 있고

0으로 지정하면, 엑셀의 STDEVP() 함수에 해당하는 "모집단 전체의 표준 편차"를 구할 수 있습니다.


숫자 리스트(배열)의 표준 편차 계산 예제
파일명: example.py
#!/usr/bin/python
# -*- coding: cp949 -*-

import math

# 평균 구하기 함수
def mean(values):
  if len(values) == 0:
    return None
  return sum(values, 0.0) / len(values)


# 표준 편차 구하기 함수
def standardDeviation(values, option):
  if len(values) < 2:
    return None

  sd = 0.0
  sum = 0.0
  meanValue = mean(values)

  for i in range(0, len(values)):
    diff = values[i] - meanValue
    sum += diff * diff

  sd = math.sqrt(sum / (len(values) - option))
  return sd




# 리스트(배열) 정의
foo = [ 1345, 1301, 1368, 1322, 1310, 1370, 1318, 1350, 1303, 1299 ]


# 리스트 요소들의 평균 구하기
print mean(foo)
# 출력 결과: 1328.6


# 표본의 표준편차 구하기 (STDEV)
print standardDeviation(foo, 1)
# 출력 결과: 27.4639157198


# 모집단 전체의 표준편차 구하기 (STDEVP)
print standardDeviation(foo, 0)
# 출력 결과: 26.0545581425




참고: ▶▶ Python/파이썬] 한국인 남녀 키(신장)의 평균, 표준편차 랜덤 난수 생성; Human Stature Random Number

표준편차 계산기: ▶▶ 평균 계산기, 합계 구하기, 표준편차 계산기, 중앙값; Sum Average Stdev Median Calc

C언어] 표준 편차 구하기/계산 함수 소스; Standard Deviation Function

C에서 실수 배열의 표준편차를 구하려면 다음 예제의 함수를 사용하면 됩니다.

standardDeviation(실수_배열명, 배열_요소_개수, 옵션)

의 형식이며, 표준편차를 double형 실수로 반환합니다.


옵션을 1로 지정하면, 엑셀의 STDEV() 함수에 해당하는 "표본의 표준 편차"를 구할 수 있고

0으로 지정하면, 엑셀의 STDEVP() 함수에 해당하는 "모집단 전체의 표준 편차"를 구할 수 있습니다.

실수 배열 표준편차 계산 예제


소스 파일명: example.cpp
#include <stdio.h>
#include <math.h> // sqrt()

double mean(double* array, int size);
double standardDeviation(double* array, int size, int option);


int main(void) {

  double foo[] = { 1345, 1301, 1368, 1322, 1310, 1370, 1318, 1350, 1303, 1299 };

  // 평균 구하기
  printf("%f\n", mean(foo, sizeof(foo) / sizeof(foo[0])));
  // 출력 결과: 1328.600000


  // 표본의 표준편차 구하기 (STDEV)
  printf("%f\n", standardDeviation(foo, sizeof(foo) / sizeof(foo[0]), 1));
  // 출력 결과: 27.463916


  // 모집단 전체의 표준편차 구하기 (STDEVP)
  printf("%f\n", standardDeviation(foo, sizeof(foo) / sizeof(foo[0]), 0));
  // 출력 결과: 26.054558


  return 0;
}




// 산술 평균 구하기
double mean(double* array, int size) {
  double sum = 0.0;

  for (int i = 0; i < size; i++)
    sum += array[i];

  return sum / size;
}


// 표준 편차 계산 함수
double standardDeviation(double* array, int size, int option) {
  // 배열 요소가 1개밖에 없을 때는
  // NaN(숫자가 아님)이라는 의미로
  // -1.#IND00 을 반환
  if (size < 2) return sqrt(-1.0);

  double sum = 0.0;
  double sd = 0.0;
  double diff;
  double meanValue = mean(array, size);

  for (int i = 0; i < size; i++) {
    diff = array[i] - meanValue;
    sum += diff * diff;
  }
  sd = sqrt(sum / (size - option));

  return sd;
}



▶▶ C언어] 배열 합계, 산술 평균 구하기; Array Sum, Average (Mean)

표준편차 계산기: ▶▶ 평균 계산기, 합계 구하기, 표준편차 계산기, 중앙값; Sum Average Stdev Median Calc

Java/자바] 표준 편차 구하기/계산 메서드; Standard Deviation Method

자바에는 표준편차 구하는 메소드(함수)가 없기에 만들어 주어야 합니다. 다음의

public static double standardDeviation(double[] array, int option)

이라는 메서드로 실수 배열의 표준편차를 구할 수 있습니다.

실수 배열명이 foo 일 때,

standardDeviation(foo, 1)
이라고 하면, 엑셀의 STDEV() 함수에 해당하는 "표본의 표준 편차"를 구할 수 있고

standardDeviation(foo, 0)
이라고 하면, 엑셀의 STDEVP() 함수에 해당하는 "모집단 전체의 표준 편차"를 구할 수 있습니다.


자바로 표준편차 구하기 예제 소스


소스 파일명: Example.java
public class Example {
  public static void main(String[] args) {

    double[] foo = { 1345, 1301, 1368, 1322, 1310, 1370, 1318, 1350, 1303, 1299 };


    // 평균 구하기
    System.out.println(mean(foo));
    // 출력 결과: 1328.6


    // 표본의 표준편차 구하기 (STDEV)
    System.out.println(standardDeviation(foo, 1));
    // 출력 결과: 27.46391571984349


    // 모집단 전체의 표준편차 구하기 (STDEVP)
    System.out.println(standardDeviation(foo, 0));
    // 출력 결과: 26.054558142482477
  }




  public static double mean(double[] array) {  // 산술 평균 구하기
    double sum = 0.0;

    for (int i = 0; i < array.length; i++)
      sum += array[i];

    return sum / array.length;
  }


  public static double standardDeviation(double[] array, int option) {
    if (array.length < 2) return Double.NaN;

    double sum = 0.0;
    double sd = 0.0;
    double diff;
    double meanValue = mean(array);

    for (int i = 0; i < array.length; i++) {
      diff = array[i] - meanValue;
      sum += diff * diff;
    }
    sd = Math.sqrt(sum / (array.length - option));

    return sd;
  }


}



▶▶ Java/자바] 한국 남녀 키(신장)의 평균, 표준편차 랜덤 난수 생성; Human Stature Random Number

Sunday, February 25, 2007

C언어] 파일 복사 함수, 화일 카피 소스; File Copy Function Source Code

C에는 파일 복사 함수가 없기에 직접 만들어 주어야 하는데, 복사 자체는 쉽지만 에러 처리 부분이 상당히 복잡하고 어렵습니다. 그래서 이 소스를 만드는 데 1주일 넘게 걸렸지만 아직 완벽하지는 않습니다.

파일을 복사하다가 Ctrl+C나 Ctrl+Break키를 눌렀을 때에는, 복사 중인 파일 전체를 지우고 프로그램을 종료해야 하는데, 볼랜드C와 달리, 비주얼C에서 Ctrl+C 처리 부분이 잘 안되더군요. 그리고 테스트를 많이 했지만 제가 발견하지 못한 버그가 아직 있을지도 모르겠습니다.


int fileCopy(const char* src, const char* dst)

라는 함수가 본체인데,

fileCopy("원본_파일_경로", "사본_파일_경로")
의 형식으로 파라미터를 입력하고, 에러가 나면 에러 코드를 정수로 반환합니다.

원본 파일명과 사본 파일명이 다르면, 현재 디렉토리에 다른 이름으로 복사됩니다.

대부분의 경우에는 원본과 사본의 파일명이 같고, 사본 파일의 디렉토리만 다릅니다. 즉 다른 디렉토리로 복사하는 것입니다.


다음 예제는 현재 디렉토리(폴더)에 있는 test.mp3 라는 파일을,

현재 디렉토리의 하위 디렉토리인 000 이라는 이름의 디렉토리 밑에 복사합니다.

파일 복사 함수 사용법 예제


소스 파일명: file_copy.cpp
(버전 0.4c)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MSIZE 16777216  // 16메가로 메모리 버퍼 지정

int fileCopy(const char* src, const char* dst);


int main(void) {
  int e = fileCopy("test.mp3", "000/test.mp3");

  if (e == 0)
    printf("파일이 복사되었습니다.\n");
  else {
    switch (e) {
      case  1 : fputs("원본 파일을 열 수 없습니다.\n", stderr); break;
      case  2 : fputs("대상 파일에 쓸 수 없습니다. 읽기 전용?\n", stderr); break;
      case  3 : fputs("쓰기 에러, 디스크 용량 초과?\n", stderr); break;
      case  4 : fputs("원본 경로와 대상 경로가 동일합니다\n", stderr); break;
      case 10 : fputs("메모리가 부족합니다\n", stderr); break;
      default : fputs("알 수 없는 에러\n", stderr); break;
    }
  }

  return 0;
}




// 파일 복사 함수의 본체
int fileCopy(const char* src, const char* dst) {
  FILE *in, *out;
  char* buf;
  size_t len;

  if (!strcmpi(src, dst)) return 4; // 원본과 사본 파일이 동일하면 에러

  if ((in  = fopen(src, "rb")) == NULL) return 1; // 원본 파일 열기
  if ((out = fopen(dst, "wb")) == NULL) { fclose(in); return 2; } // 대상 파일 만들기

  if ((buf = (char *) malloc(MSIZE)) == NULL) { fclose(in); fclose(out); return 10; } // 버퍼 메모리 할당

  while ( (len = fread(buf, sizeof(char), sizeof(buf), in)) != NULL )
    if (fwrite(buf, sizeof(char), len, out) == 0) {
      fclose(in); fclose(out);
      free(buf);
      _unlink(dst); // 에러난 파일 지우고 종료
      return 3;
    }

  fclose(in); fclose(out);
  free(buf); // 메모리 할당 해제

  return 0;
}





버그 수정: 원본과 대상이 동일할 때의 문제를 처리했습니다.


Excel/엑셀] 표준편차 구하기 함수 (표본, 모집단 전체); Standard Deviation

엑셀에서는 STDEV() 라는 함수로 "표본의 표준 편차"를 구할 수 있고,

또한 STDEVP() 함수로는 "모집단 전체의 표준 편차"를 계산할 수 있습니다. 대부분의 경우에는 STDEV() 함수를 사용하면 됩니다.

표준편차 계산 예제


우선 다음과 같은 데이터를 모두 A열에 붙여 넣습니다. (20~24세 한국 남자의 키를 mm 단위로 나타낸 것임)
1892
1640
1771
1713
1754
1772
1870
1679
1714
1743
1694
1735
1664
1766
1846
1768
1682
1707
1673
1750


그런 후 아무 셀에나

=STDEV(A:A)

라고 적어넣으면 표준편차가 계산되어 67.63701494 라는 값이 나타납니다.


만약 위의 데이터가 표본이 아니라, 전체라면

=STDEVP(A:A)

이렇게 하면 65.92440747 이라는 표준편차가 출력됩니다.




실제 20 ~ 24세 한국 남자의 키의 표준편차는 58.3 mm 지만

위의 경우에는 표본의 수가 너무 적어서 약간 다르게 나왔습니다. 참고: ▶▶ Excel-엑셀-VBA] 남녀 키(신장)의 평균, 표준편차 랜덤 난수 발생; Human Stature Random Number


표준편차 계산기: ▶▶ 평균 계산기, 합계 구하기, 표준편차 계산기, 중앙값; Sum Average Stdev Median Calc

▶▶ Excel 엑셀] 분산 구하기 함수 (표본의 분산); Variance Function



Perl/펄] MS가 개발한 Win32용 펄 스크립트 다운로드; Microsoft Script Download

MS(마이크로소프트)에서는 회사 내부적으로 Perl(펄) 스크립트를 많이 사용합니다. 물론 VBS(비베 스크립트)도 사용하지만, VBS라는 것이 너무 기능이 미약해서 MS도 어쩔 수 없는 것 같습니다.

윈도우나 하드웨어의 정보를 출력하거나 제어할 수 있는 펄 스크립트를 MS에서 무료로 제공하고 있습니다.

< The Script Center Script Repository: Sample Perl Scripts >
위의 주소에서 다운로드받을 수 있습니다.


예를 들어, 비디오 카드의 해상도 목록을 출력하는 펄 스크립트를 다운받아 보겠습니다.

위의 주소에서 Hardware 라는 항목을 선택한 후,

Video and Display 라는 항목을 또 선택하고,

최종적으로 List All Possible Video Controller Resolutions (사용 가능한 모든 비디오 해상도 출력) 라는 곳을 클릭하면

다음과 같은 펄 스크립트가 나옵니다:

비디오 해상도 목록 출력 스크립트


use Win32::OLE('in');
use constant wbemFlagReturnImmediately => 0x10;
use constant wbemFlagForwardOnly => 0x20;

$computer = ".";
$objWMIService = Win32::OLE->GetObject
    ("winmgmts:\\\\$computer\\root\\CIMV2") or die "WMI connection failed.\n";
$colItems = $objWMIService->ExecQuery
    ("SELECT * FROM CIM_VideoControllerResolution","WQL",wbemFlagReturnImmediately | wbemFlagForwardOnly);

foreach my $objItem (in $colItems)
{
      print "Caption: $objItem->{Caption}\n";
      print "Description: $objItem->{Description}\n";
      print "Horizontal Resolution: $objItem->{HorizontalResolution}\n";
      print "Max Refresh Rate: $objItem->{MaxRefreshRate}\n";
      print "Min Refresh Rate: $objItem->{MinRefreshRate}\n";
      print "Number Of Colors: $objItem->{NumberOfColors}\n";
      print "Refresh Rate: $objItem->{RefreshRate}\n";
      print "Scan Mode: $objItem->{ScanMode}\n";
      print "Setting ID: $objItem->{SettingID}\n";
      print "Vertical Resolution: $objItem->{VerticalResolution}\n";
      print "\n";
}


위의 스크립트를 example.pl 등의 이름으로 저장하고 실행하면, 다음과 같은 결과가 출력됩니다:
D:\Z>example.pl
Caption: 320 x 200 x 256색 @ 74Hz
Description: 320 x 200 x 256색 @ 74Hz
Horizontal Resolution: 320
Max Refresh Rate:
Min Refresh Rate:
Number Of Colors: 256
Refresh Rate: 74
Scan Mode: 4
Setting ID: 320 x 200 x 256 colors @ 74 Hertz
Vertical Resolution: 200

Caption: 320 x 200 x 256색 @ 85Hz
Description: 320 x 200 x 256색 @ 85Hz
Horizontal Resolution: 320
Max Refresh Rate:
Min Refresh Rate:
Number Of Colors: 256
Refresh Rate: 85
Scan Mode: 4
Setting ID: 320 x 200 x 256 colors @ 85 Hertz
Vertical Resolution: 200

Caption: 320 x 240 x 256색 @ 63Hz
Description: 320 x 240 x 256색 @ 63Hz
Horizontal Resolution: 320
Max Refresh Rate:
Min Refresh Rate:
Number Of Colors: 256
Refresh Rate: 63
Scan Mode: 4
Setting ID: 320 x 240 x 256 colors @ 63 Hertz
Vertical Resolution: 240

Caption: 320 x 240 x 256색 @ 85Hz
Description: 320 x 240 x 256색 @ 85Hz
Horizontal Resolution: 320
Max Refresh Rate:
Min Refresh Rate:
Number Of Colors: 256
Refresh Rate: 85
Scan Mode: 4
Setting ID: 320 x 240 x 256 colors @ 85 Hertz
Vertical Resolution: 240

Caption: 512 x 384 x 256색 @ 78Hz
Description: 512 x 384 x 256색 @ 78Hz
Horizontal Resolution: 512
Max Refresh Rate:
Min Refresh Rate:
Number Of Colors: 256
Refresh Rate: 78
Scan Mode: 4
Setting ID: 512 x 384 x 256 colors @ 78 Hertz
Vertical Resolution: 384

... 이하 생략 ...


출력 결과가 너무 길어서 첫부분 일부만 실었습니다.



주의 사항:

MS에서 제공하는 펄 스크립트는 반드시 윈도우에 "액티브펄(ActivePerl)"을 설치한 후 실행해야 합니다. 액티브펄이 아닌 다른 종류의 펄, 예를 들어, Cygwin용 펄은 안됩니다. 왜냐하면 액티브펄(ActivePerl)에는 윈도우를 제어할 수 있는 각종 모듈들이 기본으로 내장되어 있기 때문입니다.

▶▶ [Perl/펄] 윈도우용 액티브펄(ActivePerl) 다운로드 설치법

C언어 에러 해결] unresolved external symbol _main referenced in function _mainCRTStartup

C소스를 컴파일하고 링크하여 실행 파일로 만들 때 "unresolved external symbol _main referenced in function _mainCRTStartup..." 이런 에러가 생길 수 있습니다. 이것은 프로그램의 본체가 되는 메인 함수 즉 main() 함수가 없기 때문에 생기는 링커 에러입니다.

링커 에러 화면:
D:\Z>cl /nologo example.cpp && example.exe
example.cpp
LIBC.lib(crt0.obj) : error LNK2019: unresolved external symbol _main referenced
in function _mainCRTStartup
example.exe : fatal error LNK1120: 1 unresolved externals

D:\Z>



에러 발생 예제 (메인 함수가 없기에):
#include <stdio.h>

void test() {
  printf("test\n");
}



에러 수정 예제 (메인 함수 추가):
#include <stdio.h>

void test();


int main (void) {

  test();

  return 0;
}




void test() {
  printf("test\n");
}


즉, 위와 같이 C소스에 main() 함수를 추가해 주면 됩니다. 그런데 만약 그 C소스가 실행파일을 만드는 소스가 아니라, 라이브러리를 만드는 소스라면 메인 함수가 없습니다.

▶▶ C언어] argc, argv 파라미터(인수; 매개변수) 사용 예제; main Function Parameter

KChess Elite] 체스 오프닝 사전; Encyclopedia of Chess Openings

KChess(케이 체스)라는 쉐어웨어 체스 프로그램 속에 "체스 오프닝 사전"이 내장되어 있습니다. 책으로 된 것이나, 사이트 형태의 것보다, 사용이 더 편리하더군요.

KChess(케이 체스)의 메인 화면은 다음과 같습니다.

컴퓨터 체스

▶▶ [Chess] 체스 프로그램 쉐어웨어: KChess 란? 다운로드는 어디서?


케이체스를 실행시킨 후, Ctrl+G 키를 누르면, 즉 Ctrl키를 누르면서 G키를 누르면 다음과 같은 체스 오프닝 사전이 나타납니다. (다만, 체스 기물들을 전혀 움직이지 않은 초기 상태여야만 사전이 나옵니다.)

Encyclopedia of Chess Openings: 체스 오프닝 사전

체스 오프닝 사전(Encyclopaedia of Chess Openings) 클릭하면 확대, 옆으로 스크롤 가능

위의 상자의 목록에서, 마음에 드는 오프닝을 더블클릭하면, 그 오프닝대로, 체스판에 기물들이 자동으로 놓여집니다. 그런 후 체스를 두면 됩니다.


좌표 설명


위의 그림에서는 현재 "Reti opening"이라는 간단한 오프닝이 선택되어 있습니다.

g1f3 d7d6 이것은

백: G1 좌표에 있던 화이트 나이트를, F3좌표로 이동시키고
흑: D7 좌표에 있던 블랙 폰을, D6 좌표로 옮긴다는 뜻입니다.



사전 파일 위치


KChess 설치 폴더(디렉토리)는 보통 "C:\Program Files\KChess" 이곳입니다. 여기에 English.eco 라는 파일이 있는데, 이것이 체스 오프닝 사전의 데이터입니다. 파일 크기가 176KB (181,173 바이트) 나 되는 상당히 큰 파일입니다.

오프닝 사전인 English.eco 파일의 첫부분:
a2a3    A00     Anderssen's opening
a2a4 e7e5 h2h4  A00     Crab opening
a2a4    A00     Ware (Meadow Hay) opening
b1a3    A00     Durkin's attack
b1c3 c7c5 d2d4 c5d4 d1d4 b8c6 d4h4      A00     Novosibirsk opening
b1c3 e7e5 a2a3  A00     Battambang opening
b1c3 e7e5       A00     Dunst (Sleipner,Heinrichsen) opening
b1c3    A00     Dunst (Sleipner, Heinrichsen) opening
b2b3 b7b5       A01     Nimzovich-Larsen attack: Polish variation
b2b3 b7b6       A01     Nimzovich-Larsen attack: symmetrical variation
b2b3 c7c5       A01     Nimzovich-Larsen attack: English variation
b2b3 d7d5       A01     Nimzovich-Larsen attack: classical variation
b2b3 e7e5       A01     Nimzovich-Larsen attack: modern variation
b2b3 f7f5       A01     Nimzovich-Larsen attack: Dutch variation
b2b3 g8f6       A01     Nimzovich-Larsen attack: Indian variation
b2b3    A01     Nimzovich-Larsen attack
b2b4 c7c6       A00     Polish: Outflank variation
b2b4 g8h6       A00     Polish: Tuebingen variation
b2b4    A00     Polish (Sokolsky) opening
c2c3    A00     Saragossa opening
c2c4 b7b5       A10     English: Jaenisch gambit
c2c4 c7c5 b1c3 b8c6 g1f3 g8f6   A35     English: symmetrical, four knights system
c2c4 c7c5 b1c3 b8c6 g2g3 g7g6 f1g2 f8g7 e2e3 e7e5       A36     English: symmetrical, Botvinnik system reversed
c2c4 c7c5 b1c3 b8c6 g2g3 g7g6 f1g2 f8g7 e2e4    A36     English: symmetrical, Botvinnik system
c2c4 c7c5 b1c3 b8c6 g2g3 g7g6 f1g2 f8g7 g1f3 e7e5       A37     English: symmetrical, Botvinnik system reversed
c2c4 c7c5 b1c3 b8c6 g2g3 g7g6 f1g2 f8g7 g1f3 g8f6 e1g1 e8g8 b2b3        A38     English: symmetrical, main line with b3
c2c4 c7c5 b1c3 b8c6 g2g3 g7g6 f1g2 f8g7 g1f3 g8f6 e1g1 e8g8 d2d3        A38     English: symmetrical, main line with d3
c2c4 c7c5 b1c3 b8c6 g2g3 g7g6 f1g2 f8g7 g1f3 g8f6 e1g1 e8g8 d2d4        A39     English: symmetrical, main line with d4
c2c4 c7c5 b1c3 b8c6 g2g3 g7g6 f1g2 f8g7 g1f3 g8f6       A38     English: symmetrical variation
c2c4 c7c5 b1c3 b8c6 g2g3 g7g6 f1g2 f8g7 g1f3    A37     English: symmetrical variation
c2c4 c7c5 b1c3 b8c6 g2g3 g7g6 f1g2 f8g7 A36     English: ultra-symmetrical variation
c2c4 c7c5 b1c3 b8c6 g2g3        A36     English: symmetrical variation
c2c4 c7c5 b1c3 b8c6     A35     English: symmetrical variation
c2c4 c7c5 b1c3 g8f6 g1f3 d7d5 c4d5 f6d5 A34     English: symmetrical, three knights system
c2c4 c7c5 b1c3 g8f6 g2g3 d7d5 c4d5 f6d5 f1g2 d5c7       A34     English: symmetrical, Rubinstein system
c2c4 c7c5 b1c3 g8f6 g2g3        A34     English: symmetrical variation
c2c4 c7c5 b1c3  A34     English: symmetrical variation
... 이하 생략 ...



▶▶ [Chess/체스 기초] 첫수와 오프닝(Opening)에 대해

자바스크립트] 원주율(파이 값; PI)상수, 자연 로그의 밑 e 상수; JavaScript

자바스크립트에서는 Math.PI 로 원주율 값을 구할 수 있고, Math.E 로 자연로그의 밑인 e 의 값을 구할 수 있습니다.

또는 비주얼C++의 math.h 에는 다음과 같이, 정밀도 높은 수학 상수가 정의되어 있기에, 이것을 직접 적어 주어도 됩니다.
#define M_E        2.71828182845904523536
#define M_PI       3.14159265358979323846

그렇지만 출력 결과는 어떤 경우든 동일했습니다.

JavaScript Math Constant: 파이 값과 e 상수 출력 예제


파일명: example.html
<script type="text/javascript">

// 원주율 상수 출력
document.write(Math.PI + '<br />');
// 출력 결과: 3.141592653589793

document.write(3.14159265358979323846 + '<br />');
// 출력 결과: 3.141592653589793




// 자연 로그의 밑 e 출력
document.write(Math.E + '<br />');
// 출력 결과: 2.718281828459045

document.write(2.71828182845904523536 + '<br />');
// 출력 결과: 2.718281828459045

</script>



Saturday, February 24, 2007

자바스크립트] log2 (밑이 2인 로그 함수), log (ln), log10(상용 로그) 구하기 JavaScript

자바스크립트에는, 자연로그(Natural Logarithm)를 구하는 log() 함수만 있기에,

밑(Base)이 10인 상용 로그를 구하는 log10() 함수나, 밑이 2인 로그 함수인 log2() 는 직접 만들어야 합니다.

아래 예제에 logB() 라는 함수를 사용하면, 밑이 10이든 2이든 3이든 임의의 밑을 가진 로그 값을 구할 수 있습니다.

logB(숫자, 밑)

이런 형식으로 사용합니다.

JavaScript: 자연로그, 상용로그, 밑(Base)이 2인 로그 계산 예제


파일명: example.html
<script type="text/javascript">

document.write('[ 자연 로그 ]<br /><br />');
for (var d = 1.0; d <= 10.0; d++)
  document.write(d + ' = ' + Math.log(d) + '<br />');

document.write('<br /><br /><br /><br />'); // 줄바꿈




document.write('[ 상용 로그 ]<br /><br />');
for (var d = 1.0; d <= 10.0; d++)
  document.write(d + ' = ' + logB(d, 10) + '<br />');

document.write('<br /><br /><br /><br />'); // 줄바꿈




document.write('[ 밑이 2인 로그 ]<br /><br />');
for (var d = 1.0; d <= 10.0; d++)
  document.write(d + ' = ' + logB(d, 2) + '<br />');




// 임의의 밑의 로그 함수
function logB(x, base) {
  return Math.log(x) / Math.log(base);
}

</script>



브라우저 출력 결과 화면:
[ 자연 로그 ]

1 = 0
2 = 0.6931471805599453
3 = 1.0986122886681097
4 = 1.3862943611198905
5 = 1.6094379124341002
6 = 1.791759469228055
7 = 1.9459101490553132
8 = 2.0794415416798357
9 = 2.1972245773362195
10 = 2.302585092994046




[ 상용 로그 ]

1 = 0
2 = 0.30102999566398114
3 = 0.47712125471966243
4 = 0.6020599913279623
5 = 0.6989700043360187
6 = 0.7781512503836435
7 = 0.8450980400142567
8 = 0.9030899869919434
9 = 0.9542425094393249
10 = 1




[ 밑이 2인 로그 ]

1 = 0
2 = 1
3 = 1.5849625007211563
4 = 2
5 = 2.321928094887362
6 = 2.584962500721156
7 = 2.807354922057604
8 = 3
9 = 3.1699250014423126
10 = 3.3219280948873626



자바스크립트가 아닌 "자바"에서의 로그 구하기: ▶▶ Java/자바] log2 (밑이 2인 로그 함수), log (ln), log10(상용 로그) 구하기

자바스크립트 수학 함수] 상용 로그 log10 함수; JavaScript Math Function LOG

자바스크립트에서 수학 함수를 사용하는 방법입니다. 그런데 자바스크립트에는 상용 로그 즉 log10() 함수가 없더군요. 그래서 아래의 예제에 있는 것처럼 만들어 주었습니다.

JavaScript: 상용 로그 등, 수학 함수 사용법 예제


파일명: example.html
<script type="text/javascript">

// 제곱근 함수
document.write(Math.sqrt(2) + '<br />');
// 출력 결과: 1.4142135623730951



// 자연 로그 함수
document.write(Math.log(12) + '<br />');
// 출력 결과: 2.4849066497880003



// 상용 로그 계산
document.write(log10(12) + '<br />');
// 출력 결과: 1.0791812460476246




// 상용 로그 함수
function log10(x) {
  return Math.log(x) / Math.log(10);
}


</script>




밑이 2인 로그 함수: ▶▶ 자바스크립트] log2 (밑이 2인 로그 함수), log (ln), log10(상용 로그) 구하기 JavaScript

Perl/펄] 독일어 숫자 읽기, 아라비아 숫자를 독어로 세기; Arabic Number To German Spell

아라비아 숫자를 독일어 읽기 발음으로 변환하는 프로그램입니다. 단독으로 실행되지는 않고 별도의 CPAN 모듈을 다운받아서 설치해야 아래의 프로그램이 실행됩니다.

그런데 숫자를 서수로 읽는 함수는 아래의 모듈에 들어 있지 않더군요.

펄 모듈 설치법


< Lingua::DE::Num2Word > 에서

"Lingua-DE-Num2Word-0.03.tar.gz" 라는 파일을 다운로드받은 후, 그 안에서 Num2Word.pm 이라는 파일을 풀어서,

하드에

<펄_라이브러리_디렉토리>\Lingua\DE

이런 구조의 디렉토리(폴더)를 만들고, DE 라는 최종 폴더 속에 Num2Word.pm 파일을 넣어주면 설치가 끝납니다.

참고로 저의 경우에는

D:\myhome\perl_\site\lib\Lingua\DE

이런 폴더를 만들었습니다. 더 자세한 것은 여기를 참조: ▶▶ 펄/Perl] 아라비아 숫자를, 일본어 숫자 읽기 발음으로 변환, Lingua-JA-Number


아라비아 숫자를 독어 발음(스펠링)으로 쓰기/변환 예제


파일명: example.pl
(한글 윈도우에서는 독어의 움라우트 문자를 표시할 수 없기에, UTF-8 유니코드 파일로 결과를 출력합니다. out.txt 라는 파일이 생성됩니다.)
#!/usr/bin/perl
use strict; use warnings;

use Lingua::DE::Num2Word;


  # 유니코드(UTF-8) 인코딩으로 새 파일 만들기
  open OUT, ">:encoding(UTF-8)", "out.txt" or die "$!\n";


  for (my $i = 0; $i <= 125; $i++) {
    printf OUT ("%d = %s\n", $i, Lingua::DE::Num2Word::num2de_cardinal($i));
  }


  for (my $i = 100; $i <= 12500; $ i+= 100) {
    printf OUT ("%d = %s\n", $i, Lingua::DE::Num2Word::num2de_cardinal($i));
  }




위의 스크립트를 실행한 출력 결과는 여기에 있습니다: ▶▶ 독일어 숫자 읽기, 아라비아 숫자를 독어로 세기; Arabic Number To German Spell


▶▶ Perl/펄] 숫자를 영어 스펠링으로 변환; 영어식으로 읽기; Number to English

▶▶ Perl/펄] 프랑스어 숫자 읽기, 서수로 세기; Number to French Spell

C언어] 숫자 천 단위, 3자리마다 쉼표(콤마) 넣기; 1000 Number Comma

다른 언어들에는 숫자 천단위마다 쉼표를 넣는 방법이 제공되거나, 또는 정규식으로 쉽게 구현할 수 있지만, C에서는 좀 힘듭니다.

쉼표 넣기 C소스는 많이 있는데, 마이너스 부호(-)를 처리하지 못하거나, 즉 음수에 콤마를 넣을 수 없거나, 소수점 이하 부분을 처리하지 못하는 등의 문제가 있었습니다. 어제 뉴스그룹에서 좋은 소스를 발견했습니다. 다음의 commify() 라는 함수입니다.

다만, 정수에 쉼표를 넣을 때는, 끝에 마침표가 찍히는 문제가 있어서, 그 마침표를 제거하는 코드를 메인 함수에 추가했습니다.

commify 함수의 3번째 인수인 "int round" 는, 소수점 몇째 자리까지 나타낼지를 지정하는 것입니다.

숫자 세자리(1000단위)마다 콤마 찍기 예제


소스 파일명: example.cpp
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *commify(double val, char *buf, int round);


int main (void) {
  char buf[50];

  // 실수(float)에 콤마 넣기
  printf("%s\n", commify(-1234567890.55, buf, 2));
  // 출력 결과: -1,234,567,890.55


  // 정수(int)에 콤마 넣기
  printf("%s\n", commify(-1234567890, buf, 0));
  // 출력 결과: -1,234,567,890.


  // 정수(float)에 콤마 넣기 + 마침표 제거
  commify(-1234567890, buf, 0);
  buf[strlen(buf) - 1] = '\0';
  printf("%s\n", buf);
  // 출력 결과: -1,234,567,890


  return 0;
}




// http://groups.google.co.kr/group/comp.lang.c/msg/165f11c5f832321e?dmode=source

/*****************************************************************************
 *                                commify()                                  *
 *                                                                           *
 *  Commify a number, that is add commas between every third digit ahead of  *
 *  the decimal point.  Rounds off to abs(round) digits following the        *
 *  decimal point. Stores the results into the buf[] passed to the function  *
 *  and returns a pointer to it.  Uses the standard library function fcvt()  *
 *  to do the conversion from the double val to the string of digits.        *
 *                                                                           *
 *****************************************************************************/
char *commify(double val, char *buf, int round) {
  static char *result;
  char *nmr;
  int dp, sign;


  result = buf;

  if (round < 0)                        /*  Be sure round-off is positive  */
    round = -round;

  nmr = fcvt(val, round, &dp, &sign);   /*  Convert number to a string     */

  if (sign)                             /*  Prefix minus sign if negative  */
    *buf++ = '-';

  if (dp <= 0){                         /*  Check if number is less than 1 */
    if (dp < -round)                    /*  Set dp to max(dp, -round)      */
      dp = -round;
    *buf++ = '0';                       /*  Prefix with "0."               */
    *buf++ = '.';
    while (dp++)                        /*  Write zeros following decimal  */
      *buf++ = '0';                     /*     point                       */
  }
  else {                                /*  Number is >= 1, commify it     */
    while (dp--){
      *buf++ = *nmr++;
      if (dp % 3 == 0)
        *buf++ = dp ? ',' : '.';
    }
  }

  strcpy(buf, nmr);                     /*  Append rest of digits         */
  return result;                        /*  following dec pt              */
}



RSS 2.0 피드(Feed) 작성 방법, 문법 기초; UTF-8 인코딩의 최소 버전

RSS 2.0 피드를 직접 만드는 법과 예제입니다. 우선, 아래 예제는 필수적인 최소한의 태그들만 사용하여, 되도록 간단히 만든 것입니다.

RSS 2.0 피드 파일 만들기 예제


다음 파일은 반드시 "유니코드(UTF-8)" 인코딩으로 저장해야 합니다.
파일명: rss20.xml
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>블로그 이름</title>
<link>http://www.example.com/</link>
<description>블로그 설명 (블로그에 대한 짤막한 소개글)</description>




<item>
<title>두 번째 포스트의 제목</title>
<link>http://www.example.com/2007/02/foo.html</link>
<description>포스트 본문 전체, 또는 포스트의 첫부분 일부</description>
<pubDate>Tue, 06 Feb 2007 03:23:00 +0000</pubDate>
<guid>http://www.example.com/2007/02/foo.html</guid>
</item>




<item>
<title>첫 번째 포스트의 제목</title>
<link>http://www.example.com/2007/01/bar.html</link>
<description>포스트 본문 전체, 또는 포스트의 첫부분 일부</description>
<pubDate>Sat, 20 Jan 2007 03:38:00 +0000</pubDate>
<guid>http://www.example.com/2007/01/bar.html</guid>
</item>


<!-- 주석문이 필요할 경우에는 이렇게 -->


</channel>
</rss>


피드는 XML 의 일종입니다. 유니코드(UTF-8) 인코딩의 피드의 첫부분에는

<?xml version="1.0" encoding="UTF-8"?>

이렇게 적어 줍니다. 피드 파일 자체도 UTF-8 인코딩이어야 합니다.

첫부분의 <title></title> 태그 속에는, 블로그 이름을 적어 줍니다. 예를 들어, "맹구의 블로그" 하는 식입니다.

<link></link> 태그 속에는, 블로그 홈 주소(URL)를 적습니다.

<description></description> 태그 사이에는, 블로그에 대한 간단한 설명을 적어 줍니다. "맹구의 일상을 소개하는 블로그" 하는 식입니다.

그 다음 <item>... 태그에서부터 본격적으로 포스트들이 나열됩니다.


포스트 제목 태그, <title>


<item>... 태그 속의 <title> 태그는, 블로그 이름이 아니라, "포스트 제목"입니다. 예를 들어, "오늘 사귄 새 친구 소개" 라는 식으로 적습니다. 실제 블로그 사이트의 실제 포스트의 제목과 일치해야 합니다.


본문 태그인, <description>


<item>... 태그 속의 <description> 태그는, 맨 처음의 그것과 달리, "포스트 본문"입니다. <description> 태그가 없으면, 본문은 없이 제목만 공개됩니다. 그러나 이러면 에러가 나는 경우가 있으니, 반드시 <description> 속에 본문을 넣어주어야 합니다.

본문 전체를 넣을 수도 있고, 본문 맨 앞부분에서 200~400자 정도까지만 넣을 수도 있습니다. 그렇지만 특정 글자 개수까지 잘라내는 것이 좀 어렵기 때문에, 본문 전체를 넣는 것이 좋습니다.

그리고 만약 본문 속에 예를 들어, <div></div> 이런 HTML 태그가 있다면

&lt;div&gt;&lt;/div&gt;

이런 식으로 변경해 주어야만 합니다. 피드 속에는, HTML태그가 허용되지 않습니다. 부등호(꺾은 괄호) 2개와, 앰퍼샌드(&) 기호를 반드시

< : &lt;
> : &gt;
& : &amp;

이렇게 변경해 주어야 합니다. 일일이 손으로 변경할 수는 없기에, 텍스트 에디터의 바꾸기 기능을 사용하거나, 스크립트 언어로 프로그래밍을 해야 합니다.




포스팅 시각 태그, <pubDate>


포스팅된 시각을 표시해 주어야 합니다. 반드시
<pubDate>Tue, 06 Feb 2007 03:23:00 +0000</pubDate>
이런 영어식 날짜/시간으로 적어주고, 또한 세계표준시(GMT)로 적어야 합니다. 요일 등을 생략하거나 한국시간으로 적어주면 안됩니다. 그리고 시간 끝의
+0000
이것은 세계표준시(GMT)라는 뜻으로 넣어준 것입니다.

시간은 24시간제이기에, AM/PM 등이 붙을 수 없습니다. 그리고 시분초의 맨 마지막 "초" 단위는 그냥 00초로 해두는 것이 보통입니다. 그러나 "시"와 "분"은 정확해야 합니다.

XML은 태그의 대소문자를 엄격히 구분하기 때문에, <pubdate> 이런 식이나 <PUBDATE> 이런 식으로 적으면 안되고, 태그의 대소문자를 정확히 기입해야 합니다.


<link> 와 <guid> 태그


<item>... 태그 속의 <link> 는, 구독자가 그 포스트 제목을 클릭했을 때, 브라우저에 나올 포스트의 개별적인 주소(URL)입니다.

그리고 <guid> 태그는 좀 모호한데, RSS리더기가 그 포스트가 새로운 것인지 아닌지 판단할 때 사용하는 주소입니다. 또는 그 포스트에 링크를 걸고자 할 때 사용하는 주소입니다. 대부분의 블로그는 <link> 와 <guid> 에, 같은 주소를 넣어주면 됩니다.



마무리


포스트 내용을 적어준 후
</channel>
</rss>
이런 2개의 태그로 피드 파일을 끝맺으면 됩니다.


피드 파일명에는 xml 이라는 확장자를 붙여
rss20.xml
이런 식으로 지정합니다. 파일명은 아무 이름이라도 되지만, 한글이 섞여 있으면 안됩니다.





더 자세한 내용은 여기를 참고: RSS 2.0 포맷의 규약 (영문): RSS 2.0 Specification

현재의 피드를 RSS 2.0 피드로 변환하고자 할 때는, FeedBurner 에 등록하면 간단히 해결됩니다: ▶▶ 블로그의 사이트 피드를 피드버너(FeedBurner)에 등록







Friday, February 23, 2007

Perl/펄] 복소수 절대값, 실수부, 허수부 구하기 함수; Complex Number Absolute Value, Magnitude

복소수의 절대값(크기값)과, 실수부 허수부 등을 구하는 방법입니다. Math::Complex 라는 기본 모듈을 사용합니다.

복소수 크기값, Re, Im 등 구하기 예제


파일명: example.pl
#!/usr/bin/perl
use strict; use warnings;

use Math::Complex;

my $a = 8+3*i;  # 복소수 8+3i 를 대입



# 복소수의 절대값
print abs($a), "\n";
# 출력 결과: 8.54400374531753
# 8+3i의 경우, 8^2 + 3^2 의 제곱근입니다.


# 복소수의 실수부 구하기
print Re($a), "\n";
# 출력 결과: 8


# 복소수의 허수부 구하기
print Im($a), "\n";
# 출력 결과: 3


# abs 함수 없이, 절대값 구하기
my $x = sqrt(Re($a)**2 + Im($a)**2);
print $x;
# 출력 결과: 8.54400374531753




복소수의 사칙연산: ▶▶ Perl/펄] 복소수 사칙연산; 덧셈, 뺄셈, 곱셈, 나눗셈; Complex Number

Thursday, February 22, 2007

C언어] 문자열 배열(포인터 배열) 순서 거꾸로 뒤집기; Reverse String Array

문자열 배열의 각 요소들에는 순서가 있습니다. 그 순서를 반대로 뒤집는 것입니다. 예를 들어

AAA, BBB, CCC

이런 문자열들이 들어 있는 배열이 있다면,

CCC, BBB, AAA

이렇게 변경하는 것입니다. 아래의 reverseArrayString() 이라는 함수가 바로 이런 작업을 하는데, 2번째 파라미터로서, 배열 요소 개수, 즉 배열 크기를 넣어 주어야 합니다.

문자열 배열 요소 순서 정반대로 반전 예제


소스 파일명: example.cpp
#include <stdio.h>

void reverseArrayString(char* s[], size_t size);


int main(void) {
  char *s[] = {
    "A", "BB", "CCC", "DDDD", "EEEEE", "가나다라", "마바사하"
               };


  // 문자열 배열 뒤집기
  // sizeof(s) / sizeof(s[0]) 는 배열의 요소 개수
  reverseArrayString(s, sizeof(s) / sizeof(s[0]));



  // 뒤집어진, 문자열 배열 출력
  for (int i = 0; i < sizeof(s) / sizeof(s[0]); i++)
    printf("%s, ", s[i]);

  // 출력 결과: 마바사하, 가나다라, EEEEE, DDDD, CCC, BB, A,

  return 0;
}




// 문자열 배열 순서 거꾸로 뒤집는 함수
void reverseArrayString(char* s[], size_t size) {
  char *temp;

  for (size_t i = 0; i < size / 2; i++) {
    temp = s[i];
    s[i] = s[(size - 1) - i];
    s[(size - 1) - i] = temp;
  }
}



"문자열 배열"이 아닌, 그냥 문자열을 거꾸로 만드는 방법입니다: ▶▶ C언어] 문자열 거꾸로 뒤집기, 반전시키기; Reverse String

▶▶ C언어] 포인터 배열 (문자열 배열) 요소 개수(크기/사이즈) 구하기; String Array Size

Wednesday, February 21, 2007

C언어] 문자열 거꾸로 뒤집기, 반전시키기; Reverse String

문자열의 앞뒤 순서를 정반대로 변환하는 것입니다. 예를 들어, "ABC"를 "CBA"로 변경합니다.

다만 현재 이 소스로는, 영문과 숫자 등의 1바이트 문자만 되고, 한글이나 한자 등 2바이트 문자는 되지 않습니다.

문자열 앞뒤 순서 정반대로 변환 예제


소스 파일명: example.cpp
#include <stdio.h>
#include <string.h>

void reverseString(char* s);


int main(void) {
  char s[] = "ABCDEF 123 apple"; // 총 16글자 (공백까지 포함하여, 16바이트)

  // 문자열 순서 거꾸로 뒤집기
  reverseString(s);



  // 뒤집어진 문자열 출력
  printf("%s\n", s);
  // 출력 결과: elppa 321 FEDCBA

  return 0;
}




void reverseString(char* s) {
  size_t size = strlen(s);
  char temp;

  for (size_t i = 0; i < size / 2; i++) {
    temp = s[i];
    s[i] = s[(size - 1) - i];
    s[(size - 1) - i] = temp;
  }
}






단어 단위로 거꾸로 뒤집어서 출력하기

#include <stdio.h>
#include <string.h>

void reverseString(char* s);


int main () {
  char s[] = "This is a test.";
  char* word;
  char* dummy = NULL;


  word = strtok_s(s, " ", &dummy); // word 에 첫 단어 This 가 들어감

  while (word != NULL) {
    reverseString(word);
    printf("%s ", word);
    word = strtok_s(NULL, " ", &dummy);
  }


  return 0;
}


void reverseString(char* s) {
  size_t size = strlen(s);
  char temp;

  for (size_t i = 0; i < size / 2; i++) {
    temp = s[i];
    s[i] = s[(size - 1) - i];
    s[(size - 1) - i] = temp;
  }
}


컴파일 후 실행 결과 (비주얼C++ 2005에서):
D:\Z>cl example.cpp && example.exe
example.cpp
sihT si a .tset
D:\Z>


참고: VC 2005 버전부터는 strtok 함수보다 안전한 strtok_s 함수를 추천하므로
strtok 함수를 사용하면 다음과 같은 경고가 나옴:

0.cpp(10) : warning C4996: 'strtok': This function or variable may be unsafe.
Consider using strtok_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
See online help for details.




이것은 위의 "단어 단위로 뒤집기" 소스와 같지만, 화면으로 곧바로 출력하지 않고, 결과를 메모리에 저장한 후, 한꺼번에 출력합니다.
따라서 이것이 더 실용성이 있습니다.

#include <stdio.h>
#include <string.h>

#define BUF_SIZE 1000

void reverseString(char* s);


int main () {
  char s[] = "This is a test.";
  char* word;
  char* dummy = NULL;

  char buf[BUF_SIZE];  // 결과 저장용 문자열을 위한 버퍼
  buf[0] = NULL;       // 초기화

  word = strtok_s(s, " ", &dummy); // word 에 첫 단어 This 가 들어감

  while (word != NULL) {
    reverseString(word);
    strcat_s(buf, BUF_SIZE, word);
    strcat_s(buf, BUF_SIZE, " ");
    word = strtok_s(NULL, " ", &dummy);
  }

  printf("%s\n", buf);

  return 0;
}


void reverseString(char* s) {
  size_t size = strlen(s);
  char temp;

  for (size_t i = 0; i < size / 2; i++) {
    temp = s[i];
    s[i] = s[(size - 1) - i];
    s[(size - 1) - i] = temp;
  }
}




▶▶ C언어] 정수 배열 순서 거꾸로 뒤집기 함수; Reverse Array (int) Function

▶▶ C언어] 문자열 배열(포인터 배열) 순서 거꾸로 뒤집기; Reverse String Array

Tuesday, February 20, 2007

C언어] 포인터 배열 (문자열 배열) 요소 개수(크기/사이즈) 구하기; String Array Size

크기를 지정하지 않은, 포인터 배열을 선언하고 문자열들로 초기화한 후, 그 배열의 "요소 개수 (배열 사이즈)" 등을 구하는 방법입니다.

문자열 배열 선언, 초기화, 크기 계산 예제


소스 파일명: example.cpp
#include <stdio.h>
#include <string.h> // strlen()

int main(void) {

  // char형 포인터 배열 (문자열 배열) 선언 + 초기화
  // 5개의 문자열이 들어가 있는 배열(5 element array of pointer to char)입니다.
  char *s[] = {
    "A",
    "BB",
    "CCC",
    "DDDD",
    "EEEEE",
  };


  // 포인터 배열의 바이트 수 출력
  printf("%d\n", sizeof(s));
  // 출력 결과: 20
  // 4바이트인 포인터가, 5개 있어, 4 * 5 = 20 이기에



  // 모든 문자열의 길이의 합계 (null 문자는 제외)
  size_t total_size = 0;
  for (size_t i = 0; i < sizeof(s) / sizeof(s[0]); i++) {
    total_size += strlen(s[i]);
  }
  printf("%d\n", total_size);
  // 출력 결과: 15
  // s 에 들어 있는 글자들이 총 15글자이기에
  // (영문 1글자는 1바이트, 한글 1글자는 2바이트)




  // 배열 요소 개수 출력
  printf("%d\n", sizeof(s) / sizeof(s[0]));
  // 출력 결과: 5
  // 배열에 5개의 요소가, 즉, 5개의 문자열이 있으므로


  // 0번째(첫번째) 배열 요소 사이즈 출력
  printf("\"%s\" = %d\n", s[0], sizeof(s[0]));
  // 출력 결과: "A" = 4
  // 32비트 컴퓨터에서, 포인터 변수는 4바이트이므로


  // 4번째(마지막) 배열 사이즈 출력
  printf("\"%s\" = %d\n", s[4], sizeof(s[4]));
  // 출력 결과: "EEEEE" = 4
  // 32비트 컴퓨터에서, 포인터 변수는 4바이트이므로


  return 0;
}



▶▶ C언어] 배열 크기, 사이즈 (요소 개수) 구하기; Get Array Size, Number of Elements

Monday, February 19, 2007

C언어] 정수 배열 순서 거꾸로 뒤집기 함수; Reverse Array (int) Function

정수(int)가 들어 있는 배열의 요소들의 순서를 정반대로 바꾸는 방법입니다. 아래 예제 소스의 아래쪽에 정의되어 있는 reverseArrayInt() 라는 함수를 사용하면 됩니다.

숫자 배열 요소를, 역순으로 변환/반전 예제


소스 파일명: example.cpp
#include <stdio.h>

void reverseArrayInt(int* array, int size);

// 배열 요소 개수 정의
#define SIZE 8


int main(void) {

  int a[] = { -1, 0, 299, 2, 956, 0, 9, -900 };


  // 숫자 배열 순서 거꾸로 뒤집기
  reverseArrayInt(a, SIZE);


  // 순서 뒤집은 배열을 화면에 출력하기
  for (int i = 0; i < SIZE; i++)
    printf("%d, ", a[i]);

  // 출력 결과: -900, 9, 0, 956, 2, 299, 0, -1,


  return 0;
}




void reverseArrayInt(int* array, int size) {
  int temp;

  for (int i = 0; i < size / 2; i++) {
    temp = array[i];
    array[i] = array[(size - 1) - i];
    array[(size - 1) - i] = temp;
  }
}



▶▶ C언어] 문자열 거꾸로 뒤집기, 반전시키기; Reverse String

Sunday, February 18, 2007

구글어스 4] 나이아가라 폭포 위성사진; Niagara Falls, Google Earth

구글어스에서 본 "나이아가라 폭포"의 위성사진입니다. 실시간 위성 동영상이었다면 멋있었을 텐데, 물결이 움직이지 않아서 좀 그렇습니다.

그리고 사진이 너무 어두워서 포토샵으로 약간 밝게 했습니다. 구글어스 사진들은 왜 그리 어두운지 모르겠더군요.

나이아가라 폭포; Niagara Falls
나이아가라 폭포 위성사진
(클릭하면 확대)

KBS "스펀지"에서 보니까, 나이아가라 폭포 주위에 폭포 횟집이라는 한국식 횟집이 있었습니다. 교포 분이 운영하고 계시더군요. 위의 사진 좌측에 있을 것 같기도 한데 정확한 위치는 모르겠습니다.



나이아가라 폭포의 좌표(위도 경도)


아래의 좌표를 마우스로 긁어서 선택하고, 키보드의 Ctrl+C키로 복사한 후, 구글어스 검색창에 Ctrl+V키로 붙여 넣으면 나이아가라 폭포로 자동 비행합니다. 나이아가라 폭포는 미국과 캐나다 사이의 국경에 있지만 의외로 찾기가 쉽지 않습니다.

43° 4'45.62"N 79° 4'35.03"W

마우스 휠을 아래쪽으로 돌리면, 위성지도가 더 확대됩니다.


사실 위의 나이아가라 폭포보다도, 다음의 중국 흥개호라는 호수가 더 시원스럽게 찍혔습니다: ▶▶ 구글어스4] 중국 흑룡강성 흥개호(興凱湖) 호수 위성사진: Google Earth, Khanka, Xingkai Lake, China

▶▶ 구글 어스(Google Earth)에서 자금성(자장면집 아님), 피라미드 발견

UTUBE, U-TUBE (유튜브:동영상 공유 사이트) 주소(URL)는?

동영상 공유 사이트인 유튜브의 정확한 영어 이름은 Utube 나 U-tube 가 아니라, YouTube 입니다.

You (당신) + Tube (텔레비전)

라는 뜻입니다. 텔레비전 브라운관을 영어에서는 흔히 튜브라고 하더군요.

유튜브의 주소(URL)는 < http://www.youtube.com/ > 입니다.


아직 한글화는 되어 있지 않고, 한국 사용자는 거의 볼 수 없었습니다. 일본인/중국인 사용자는 가끔 있었습니다.

서버 부담이 큰 동영상 공유 서비스들은 수명이 짧은 편인데, 이번에 유튜브가 구글에 인수되었기 때문에, 앞으로도 영원히 존재할 것 같습니다.

동영상을 플레이하는 속도도 예상 외로 아주 빨랐습니다.

그런데 안타까운 것은 엠펙(mpg) 파일을 올리더라도, 그것이 모두 플래시로 변경되어 저장되더군요.



유튜브의 동영상은 다운로드받을 수 없게 되어 있는데, 강제로 다운로드를 하는 방법입니다: ▶▶ 유튜브 동영상 파일(FLV, SWF) 다운로드 받기; YouTube uTube File Download


참고로, 사진 공유 사이트로 유명한 플리커(http://www.flickr.com/)는 야후에 인수되었습니다. 이상하게도, 동영상 공유 사이트인 유튜브보다도, 사진 공유 사이트인 플리커의 속도가 훨씬 더 느렸습니다.


3ds Max] 플러그인, 맥스 스크립트 차이점, Plugin 과 MAXScript 차이

맥스의 플러그인(Plugin)은 "Visual C++"로 만드는 본격적인 것이고, 내부적으로는 실행 파일이기에, 이진파일로 되어 있습니다. Visual C++ 가 아닌, 다른 C++ 컴파일러로는 제작할 수 없습니다. 플러그인 만드는 것도 어려운 데, C++부터 먼저 배워야 하기에 만들기가 아주 어렵습니다.

맥스 스크립트는 맥스에 내장되어 있는 스크립트 기능을 사용하여 프로그래밍하는 것으로서, 보다 간편합니다. 베이직 수준의 간단한 문법으로 되어 있기에, 배우기 쉬운 편입니다. 전문 프로그래머가 아니라도, 몇주 공부하면 작성할 수 있습니다.


플러그인의 장점


C++로 되어 있기에 속도가 아주 빠릅니다. 그리고 스크립트로는 접근할 수 없는, 맥스의 깊은 곳까지 제어할 수 있습니다. 예를 들어, Vray 같은 렌더러도 플러그인입니다. 렌더러를 스크립트로 만들 수는 없겠지요.


플러그인의 단점


플러그인은 실행 파일로 되어 있기에, 맥스의 버전에 민감해서, 맥스 버전이 바뀌면 다시 컴파일해 주어야 하는 불편함이 있습니다. 타인이 만든 플러그인이라면 다시 다운받아서 설치해 주어야 합니다. 따라서 플러그인을 한번 다운받았다고 해서 그것을 영구 소장할 수는 없습니다.



맥스 스크립트의 장점


맥스 스크립트(MAXScript)는, 한번 설치해 두면, 맥스 버전과 거의 무관하게 계속 사용할 수 있어 편리합니다. 그래서 똑같은 일을 한다면, 플러그인보다는 맥스 스크립트 쪽이 더 이상적인 툴입니다. 맥스 스크립트를 수집해 소장하면 자신의 재산이 됩니다. 마음에 안드는 부분은 자신이 직접 코드를 수정하면 되기에 더욱 좋습니다.


플러그인들의 상당수는 상용 프로그램이지만, 스크립트는 무료로 다운로드받아서 사용할 수 있습니다: ▶▶ 3ds Max] 맥스 스크립트(MAXScript) 다운로드 사이트; Free Download


맥스 스크립트의 단점


반복되는 작업을 많이 하는 스크립트의 경우에는, 실행 속도가 느린 편입니다. 그리고 맥스나 스크립트 엔진에서 제공하지 않는 기능은 사용하기 힘듭니다.

대부분의 작업들은 스크립트로 해결이 가능하고, 맥스에 없는 강력한 기능을 추가하고자 하는 경우에만 플러그인이 필요합니다.


MS 明朝 글꼴, 한글 오피스(엑셀, 워드)에서 사용하는 법; Japanese TTF Font Office

한글 윈도우XP 에는 "MS 明朝" 등의 폰트가 기본적으로 설치되어 있습니다. 따라서 MS오피스에서도 사용할 수 있습니다.

다만, 일본어 윈도우에서는 MS 明朝 라는 글꼴 이름이 보이지만, 한글 윈도우에서는 그렇지 않고 MS Mincho 라는 이름으로 보이게 됩니다.

한글 엑셀2003의 경우, 기본 폰트는 '돋움'인데, 엑셀 화면 상단 좌측의 폰트창에서, "MS Mincho" 라는 폰트를 지정해 주면 됩니다. 그러면 일본어 글자들이 깨끗하게 보일 것입니다.



'MS 明朝' 글꼴이란?


일본어판 윈도우에 기본으로 내장되어 있는, 일본어 명조체입니다. 영어 이름은 MS Mincho 입니다.

한글 윈도우의 "바탕체"에 해당하는 것입니다. 한글 윈도우XP에는 'MS 明朝' 같은 일본어 폰트도 기본적으로 설치되어 있습니다. 윈도우2000의 설치CD 안에도 들어 있습니다.

'MS 明朝'는 아주 깔끔한 폰트지만, 클리어타입이 아닌, 트루타입이기에 LCD 모니터에서는 가독성이 떨어질 것입니다. LCD 모니터에서는 아무리 좋은 폰트라도 엉망으로 보이더군요-_-



▶▶ 일본어 폰트(글꼴)의 특수 문자로, 별 모양 등 각종 문양 그리기: Japanese Special Characters





3ds Max] 맥스 스크립트(MAXScript) 다운로드 사이트; Free Download

맥스(3ds Max)에서, 복잡한 작업을 자동화하거나, 또는 맥스에 없는 기능을 만들어서 추가해 주기 위해서는, "맥스 스크립트(MAXScript)"가 필요합니다.

맥스 스크립트는 프로그래밍 언어이기 때문에 강력하지만, 그만큼 어렵기도 합니다. 다행히, 맥스 스크립트를 마음대로 다운받을 수 있는 사이트가 있습니다.


< ScriptSpot : Your community resource for 3ds maxscript >
위의 사이트에서, 고급 맥스 스크립트들을 무제한 다운받을 수 있습니다. 모두 무료입니다. 자신이 맥스 스크립트를 직접 만들 필요가 없을 정도로, 갖가지 스크립트들이 만들어져 있습니다.


그런데 위의 사이트가 얼마 전에 개편이 되어, 좀 복잡해졌습니다. 현재 메인 페이지에

* 3ds max
* SketchUp (구글 스케치업)

이런 2가지 항목이 있는데, "3ds max" 라는 항목을 클릭하면 스크립트 페이지가 나옵니다.

현재 다음과 같은 스크립트들이 올라와 있습니다. C++로 만든 플러그인 못지 않게 강력한 것입니다.
Render Region 1.0
Modeling a Lego Snowspeeder in 3ds max
SkinMe 0.5
UV aligner 2.0
Vray ambient occlusion 2.0
ArchiCAD import wizard 1.21
Lele's Vray Tools V. 1.0ss
QuickTools 1
Max to Sunflow Exporter 0.18
Molecule 1.2.0
Sequence\Tag Manager 1.0
Sergo's script pack 1.4
TubeCap 1.1
Rigging Army Knife 1.8
SMFacialMorphControls 2
...



저의 경우에는 프리핸드 툴을 다운받아서 쓰고 있습니다: ▶▶ [3dsmax/맥스] 프리핸드(freehand) 곡선 그리기 매크로스크립트(MacroScript)


그리고 이것은 제가 만든, 아주 기초적인 맥스 스크립트입니다: ▶▶ [3ds Max] 랜덤하게 박스 그리기: 맥스 스크립트 (MAXScript) 기초 예제


Excel 엑셀] 복소수 절대값 구하기/계산 함수; Complex Number Absolute Value, Magnitude

우선, 엑셀 상단 메뉴의

도구 > 추가 기능

에서 "분석 도구"에 체크해 주어야 합니다. 그렇지 않으면 #VALUE! 라는 에러가 납니다.


복소수 절대값(크기 값)을 구하는 함수는 IMABS() 입니다. 예를 들어, 셀에

=IMABS("5+12i")

이렇게 입력하면 13 이라는 값이 나옵니다.


그리고 A1셀에 8+3i 이런 복소수가 있을 때,

=IMABS(A1)

이렇게 하면 8.544003745 라는 값이 나옵니다.




다음과 같이, 복소수 절대값 구하는 함수를 직접 만들어서 사용할 수도 있습니다:

=SQRT(IMREAL(A1)^2+IMAGINARY(A1)^2)

=SQRT(POWER(IMREAL(A1),2)+POWER(IMAGINARY(A1),2))



▶▶ Excel/엑셀] 복소수 사칙연산; 덧셈, 뺄셈, 곱셈, 나눗셈; Calc Complex Number



실수의 절대값 계산 함수: ▶▶ Excel 엑셀] 절대값 구하기 함수 사용법: Absolute Value Function

도스용 윈집(WinZip) 실행 배치 파일; DOS WZZIP-WZUNZIP Batch File

윈집(WinZip)을 설치한 후에, 명령행 버전 즉 텍스트 모드 버전의 윈집도 설치할 수 있습니다. "도스용 윈집"이라고 부르기도 합니다. 정확한 이름은 WinZip(R) Command Line Support Add-On 입니다. 참고: ▶▶ 도스용 ZIP 프로그램; DOS윈집 다운로드,사용법; WinZip Command Line Support Add-On

위의 도스용 윈집 프로그램을 별도로 다운로드받아서, GUI용의 일반 윈집(WinZip)이 설치된 폴더에 같이 설치해야 하는데,

윈집이 설치된 폴더(예를 들어 C:\Program Files\WinZip )에 패스(Path)를 걸어주지 않으면, 도스창에서 실행이 되지 않습니다.


다음 배치 파일은, 패스를 직접 걸지 않아도, 어느 디렉토리에서나 도스용 윈집을 사용할 수 있게 하는 배치 파일입니다.

도스용 윈집은

압축을 할 때는 WZZIP.EXE 를 사용하고

압출을 풀 때는 WZUNZIP.EXE 를 사용합니다. 2개의 실행 파일로 나누어져 있습니다.

따라서 배치 파일도 2개입니다.


메모장 등으로 다음 2개의 배치 파일을 작성합니다:

파일명: wzZIP.bat
@echo off
"C:\Program Files\WinZip\WZZIP.EXE" %*




파일명: wzUNZIP.bat
@echo off
"C:\Program Files\WinZip\WZUNZIP.EXE" %*



이제 wzZIP.bat / wzUNZIP.bat 파일들을, 패스가 걸린 아무 디렉토리에나 넣어줍니다.


도스창(명령 프롬프트;CMD.EXE)에서

path

라고 치면, 패스가 걸린 디렉토리들의 목록이 나옵니다. 세미콜론(;)으로 분리되어 있습니다.



저의 경우에는

D:\WINDOWS_\Path

이런 식으로, 각종 배치 파일을 넣어두는 전용 폴더를 만들어서, 이 한 곳에만 패스를 걸어 놓고 사용하고 있습니다.


이제 도스창의 어느 디렉토리(폴더)에서나

wzzip
이라고 치면 WZZIP.EXE 가 실행되어 압축을 할 수 있고

wzunzip
이라고 치면 WZUNZIP.EXE 가 실행되어, 압축을 풀 수 있습니다.



WZZIP 과 WZUNZIP 사용법 설명: ▶▶ 도스(DOS)에서, ZIP 파일 압축하기, 압축 풀기 프로그램, 옵션; Add Extract Zip File

도스(DOS)에서, ZIP 파일 압축하기, 압축 풀기 프로그램, 옵션; Add Extract Zip File

그래픽 유저 인터페이스(GUI)가 아닌, 도스창에서 ZIP(집) 파일로 압축하거나 압축을 푸는 방법입니다.

여러가지 도스용 ZIP 프로그램이 있지만, 가장 추천할 만한 것은 WinZip Command Line Support Add-On 입니다. 이것은 일반 윈집(WinZip)에서 사용할 수 있는 일종의 플러그인입니다. 참고: ▶▶ 도스용 ZIP 프로그램; DOS윈집 다운로드,사용법; WinZip Command Line Support Add-On



도스에서 ZIP 압축하는 법


WinZip Command Line의 Zip은 "서브 폴더"와 "히든, 시스템 속성의 파일"은 포함하지 않는 것이 기본값입니다.

wzzip test *.txt
txt 확장자를 가진, 텍스트 파일들만 test.zip 이라는 이름으로 압축합니다.


wzzip test
현재 디렉토리의 모든 파일들을 test.zip 이라는 이름으로 압축합니다. (히든 파일과 하위 디렉토리는 제외됨)


wzzip -whs test
히든 속성(숨김 속성)과, 시스템 속성의 파일들까지 모두 압축


wzzip -rp -whs test
현재 디렉토리의 하위 디렉토리들까지 모두 압축하기
(빈 폴더까지 압축됨)
+ 히든 속성(숨김 속성)과, 시스템 속성의 파일들까지 포함
하드를 백업할 때는 이 옵션들을 사용하면 됩니다.




도스에서 ZIP 압축 푸는 옵션


WinZip Command Line의 UnZip은, 서브 폴더 없이 한 장소에 모두 푸는 것이 기본값이고, 또한 파일 속성을 무시하고 풀어 놓는 것이 기본값이므로 주의가 필요합니다.

wzunzip -d -Jhrs test
이렇게 하면 test.zip 이라는 파일의 압축이 완벽하게 풀림니다.

wzunzip -d -Jhrs *
현재 디렉토리의 모든 zip 파일들을 동시에 푸는 방법입니다.





주의!

wzunzip 등의 unzip 프로그램으로, ZIP 압축을 풀 때는 반드시
-d
옵션을 붙여주어야 합니다. 그렇지 않으면, 하위 디렉토리까지 포함하여 압축한 ZIP 파일의 경우, 모두 같은 디렉토리에 풀어 버리기에 파일이 뒤죽박죽이 됩니다.



도스용 ZIP 프로그램; DOS윈집 다운로드,사용법; WinZip Command Line Support Add-On

ZIP 압축 프로그램인 윈집(WinZip)은 마우스로 작동시키는 GUI 프로그램이지만, 텍스트 모드용 윈집 즉 "도스 윈집" 도 있습니다. 이것을 배치 파일 안에서 사용하면, 압축 작업을 자동화할 수 있어 편리합니다.

도스용 윈집은 WinZip Command Line Support Add-On 이라는 긴 이름으로, 별도로 배포됩니다. 그리고 독자적으로 실행되지 않고 반드시 윈도우용 윈집이 설치되어 있어야 합니다.

우선 윈도우용 윈집 즉 GUI용 윈집을 먼저 설치해야 합니다: ▶▶ WinZip(윈집)이란? .zip 확장자 푸는 프로그램은? 윈집 다운로드 하는 곳은?
옛날 버전은 안되고 최신 버전의 윈집을 설치해야 합니다. 이 글을 쓰고 있는 현재, GUI 윈집은 "WinZip 11.0 Pro" 버전이 최신입니다.


주의! WinZip Pro 버전이어야 하고, WinZip Standard 버전은 도스 zip이 설치되지 않습니다.



그런 후
http://www.winzip.com/downcl.htm
이 사이트에서 WinZip Command Line Support Add-On 을 다운받아야 합니다.

이 글을 쓰고 있는 현재, 도스용 윈집의 버전은 2.0 입니다.

"Get It Free" 라는 버튼을 누르면, wzcline20.exe 라는 파일이 다운로드됩니다. 물론 버전에 따라 파일명이 다릅니다.

wzcline20.exe 라는 파일을 클릭하여, 윈도우용 윈집과 같은 폴더(예를 들어 C:\Program Files\WinZip )에 설치해 주면 됩니다.



도스용 윈집의 설치 방법을 좀더 자세히 설명하자면 다음과 같습니다:

* Setup 버튼을 누릅니다.

* 사용 약관에 동의한다는 의미의, Yes 버튼을 누릅니다.

* 다음과 같은 메시지 상자가 나옵니다:

---------------------------
WinZip Command Line Support Add-On 2.0 Setup
---------------------------
Setup found WinZip 10.0 or later in the C:\Program Files\WinZip folder.

Install the WinZip Command Line Support Add-On to this folder?

Click "No" to exit or "Yes" to continue with the installation
---------------------------
예(Y) 아니오(N)
---------------------------

WinZip 10.0 이나 그 이상이, C:\Program Files\WinZip 이라는 폴더에 설치되어 있는데, 같은 폴더에 도스용 윈집을 설치하겠느냐는 뜻입니다.

"예"를 클릭해야 합니다.


* 설치가 성공적으로 끝났고, 도움말을 보겠느냐는 메시지가 다음과 같이 나옵니다:

---------------------------
WinZip Command Line Support Add-On 2.0 Setup
---------------------------
The WinZip Command Line Support Add-On has been successfully installed.

Would you like to view the documentation?
---------------------------
예(Y) 아니오(N)
---------------------------

"예"를 클릭하면, 도스용 윈집의 도움말이 영어로 나옵니다. 한글판은 없습니다.

도움말 중에서 가장 중요한 부분은

WZUNZIP reference (압축 풀기 옵션 목록/설명)

WZZIP reference (압축하기 옵션 목록/설명)

위의 2가지 링크입니다.




도스에서 압축하기, 압축 풀기 실습(?) 화면


다음은, 현재 디렉토리의 모든 파일들을 (숨김 파일과, 하위 디렉토리까지 포함하여) test.zip 이라는 이름의 파일로 압축하고

다시 현재 디렉토리에 그 파일들을 푸는 장면입니다.

wzzip -rp -whs test
라는 명령으로 압축했고

wzunzip -d -Jhrs test
라는 명령으로 풀었습니다.
D:\Y>wzzip -rp -whs test
WinZip(R) Command Line Support Add-On Version 2.0 (Build 6663)
Copyright (c) WinZip International LLC 1991-2005 - All Rights Reserved

  Adding example.txt
  Adding example2.cpp
  Adding file_copy.cpp
  Adding foo.txt
  Adding 새 폴더  Adding 새 폴더\사본 - example.txt
  Adding 새 폴더\사본 - example2.cpp
  Adding 새 폴더\사본 - file_copy.cpp
  Adding 새 폴더\사본 - foo.txt
  Adding 새 폴더\사본 - 숨김 파일.html
  Adding 새 폴더\사본 - 읽기 전용 파일.html
  Adding 새 폴더 (2)  Adding 숨김 파일.html
  Adding 읽기 전용 파일.html
creating Zip file test.zip
D:\Y>
D:\Y>
D:\Y>
D:\Y>
D:\Y>
D:\Y>
D:\Y>wzunzip -d -Jhrs test
WinZip(R) Command Line Support Add-On Version 2.0 (Build 6663)
Copyright (c) WinZip International LLC 1991-2005 - All Rights Reserved

Zip file: test.zip

unzipping example.txt
unzipping example2.cpp
unzipping file_copy.cpp
unzipping foo.txt
   creating: .\새 폴더unzipping 새 폴더\사본 - example.txt
unzipping 새 폴더\사본 - example2.cpp
unzipping 새 폴더\사본 - file_copy.cpp
unzipping 새 폴더\사본 - foo.txt
unzipping 새 폴더\사본 - 숨김 파일.html
unzipping 새 폴더\사본 - 읽기 전용 파일.html
   creating: .\새 폴더 (2)unzipping 숨김 파일.html
unzipping 읽기 전용 파일.html
D:\Y>



압축 옵션 사용에 대한 자세한 설명은 여기에 정리되어 있습니다: ▶▶ 도스(DOS)에서, ZIP 파일 압축하기, 압축 풀기 프로그램, 옵션; Add Extract Zip File

WZZIP과 WZUNZIP 을, 도스창의 어느 폴더에서나 쉽게 실행하는 법: ▶▶ 도스용 윈집(WinZip) 실행 배치 파일; DOS WZZIP-WZUNZIP Batch File



도스에서 RAR 압축하기: ▶▶ RAR 도스 창(DOS)/명령프롬프트/텍스트 모드; WinRAR(윈라) 콘솔 버전; RAR.EXE






<< Home

Categories
Some Recent Posts
Monthly Archives
Top