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

 
Monthly Archive
Saturday, March 31, 2007

Perl 펄] 파일인지 디렉토리인지 여부 판단 함수; is File or Dir

if문 속에 -f 라는 옵션을 사용하면 그 대상이 파일일 때 참을 반환합니다.

또한 -d 라는 옵션을 사용하면 그 대상이 디렉토리(폴더)일 때 참을 반환합니다.

"-f" 등은 실은 옵션이 아니라, "File Test Operator (파일 테스트 연산자)"입니다.

파일 디렉토리 구분 예제


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


  # 파일이면 OK
  if (-f "COOL") {
    print "OK! 파일입니다\n";
  }

  # 디렉토리면 OK
  if (-d "COOL") {
    print "OK! 디렉토리입니다\n";
  }


현재 디렉토리에 "COOL" 이라는 이름의 "파일"이 있을 때에는 "OK! 파일입니다"가 프린트되고,

"COOL" 이라는 하위 디렉토리가 있을 때는 "OK! 디렉토리입니다"가 출력됩니다.



▶▶ Perl 펄] 파일 존재 여부 판단, 디렉토리 있는지 확인 함수; File-Directory Exist?

Perl 펄] 파일 존재 여부 판단, 디렉토리 있는지 확인 함수; File-Directory Exist?

펄에서는 is_file_exist() 같은 함수는 없고, 더 간단히 "-f" 나 "-d" 라는 옵션으로 파일/디렉토리 존재 여부를 판단할 수 있습니다.

if문 속의 "-f" 등을, 정확히는 "File Test Operator (파일 테스트 연산자)"라고 합니다.

-f, -d로, 파일과 폴더 존재 여부 알아내기 예제


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


  # 파일 존재 여부 판단
  if (-f "test.txt") {
    print "파일 있음\n";
  }
  else {
    print STDERR "그런 파일이 없음.\n";
  }



  # 디렉토리 존재 여부 판단
  if (-d "000") {
    print "OK! 그런 디렉토리가 있음\n";
  }
  else {
    print STDERR "그런 디렉토리가 없음.\n";
  }



파일과 디렉토리 구분 없이 존재 여부를 알아낼 때는 -e 를 사용하면 됩니다.


▶▶ Perl 펄] 파일인지 디렉토리인지 여부 판단 함수; is File or Dir

Perl 펄] 패스에서, 디렉토리명/파일명/확장자 분리 추출; Split Path Name

풀 패스명은, "디렉토리명+파일명+확장자"로 구성되어 있습니다. 이것을 각각 나누어 추출하는 방법입니다.

File::Basename 모듈을 사용하면 됩니다. 펄의 기본 모듈이기에 별도로 설치해 줄 필요는 없습니다.

File::Basename 모듈 사용법 예제


스크립트 파일명: example.pl
(※ 스크롤 박스 사용법: 박스 안을 마우스로 클릭한 후, 키보드의 좌우 화살표키를 누르면 양옆으로 움직일 수 있습니다. 박스에서 다시 나오려면, 박스 바깥의 아무곳이나 클릭하면 됩니다.)
#!/usr/bin/perl
use strict; use warnings;

use File::Basename;


# 패스: My Jukebox 라는 디렉토리 밑의 "Cool Jazz.mp3" 라는 파일명
my ($fileNameOnly, $dir, $ext) = fileparse("My Jukebox/Cool Jazz.mp3", '\.[^.]*');


# 패스에서 디렉토리명만 구하기
print "<", $dir, ">\n";
# 출력 결과: <My Jukebox/>


# 패스에서 파일명만 구하기 (확장자 제외)
print "<", $fileNameOnly, ">\n";
# 출력 결과: <Cool Jazz>


# 패스에서 확장자만 구하기
print "<", $ext, ">\n";
# 출력 결과: <.mp3>



##########################



# 파일명만 간단히 얻기 (확장자 포함)
my $s = basename("/000/perl.pdf");
print $s, "\n";
# 출력 결과: perl.pdf


# 디렉토리명만 간단히 구하기
$s = dirname("/000/perl.pdf");
print $s, "\n";
# 출력 결과: /000


# 확장자만 별도로 구하기
$s = (fileparse("/000/perl.pdf", '\.[^.]*'))[2];
print $s, "\n";
# 출력 결과: .pdf


# 확장자 없는 파일에서 확장자를 구하면
$s = (fileparse("/000/Test", '\.[^.]*'))[2];
print "<", $s, ">\n";
# <> 이렇게 빈 문자열 출력


# 2중 확장자 파일명에서 진짜 확장자를 구하기
$s = (fileparse("Date.tar.gz", '\.[^.]*'))[2];
print "<", $s, ">\n";
# <.gz>



정규식으로 파일 이름에서 확장자만 추출하는 방법: ▶▶ Perl 펄] 정규식 확장자 추출, 파일명에서; Regex Filename Extension

Perl 펄] 정규식 확장자 추출, 파일명에서; Regex Filename Extension

파일 이름에서, 정규식으로 확장자만 매치하여 추출하는 방법입니다.

다음과 같은 정규식을 이용합니다.
.+\.(\w+)?$


Perl: 정규식으로 확장자 매치하여 추출 예제


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

  my $filename;
  my $ext;
  my $s;



  # 파일명 정의
  $filename = "test.txt";

  # 확장자 매치 (이 경우는 txt)
  $filename =~ m<.+\.(\w+)?$>;
  # 패스명의 슬래시(/)와 충돌하기에
  # 정규식 구분자를 < 기호로 변경했음

  # 매치된 확장자가 들어간 $1 이라는 변수의 값을 꺼냄
  $ext = $1;
  print "<", $ext, ">\n";
  # 출력 결과: <txt>
  # 알아보기 쉽게 확장자를 <> 기호로 둘렀습니다.
  # 실제는 txt 만 출력됨




  # 공백 들어간 파일명
  $filename = "My Test.doc";
  $filename =~ m<.+\.(\w+)?$>;
  print "<", $1, ">\n";
  # 출력 결과: <doc>


  # 확장자 없는 파일명
  $filename = "Cool";
  $ext = "";
  $ext = $1 if ($filename =~ m<.+\.(\w+)?$>);
  print "<", $ext, ">\n";
  # 출력 결과: <>
  # 아무것도 매치되지 않았기에,
  # $1 의 값은 예전 값인 doc 을 가지고 있음
  # 따라서 if를 사용하여 구현


  # 마침표가 2개 이상인 파일명에서도
  $filename = "Oh... Hmm.Cool.xls";
  print "<", $filename =~ m<.+\.(\w+)?$>, ">\n";
  # <xls>


  # 2중 확장자는 마지막 확장자만 추출
  $filename = "Date.tar.gz";
  print "<", $filename =~ m<.+\.(\w+)?$>, ">\n";
  # <gz>


  # 유닉스/리눅스 히든 파일 (앞에 점 있는 파일)
  $filename = ".inputrc";
  print "<", $filename =~ m<.+\.(\w+)?$>, ">\n";
  # <>
  # 윈도우에서는 이 경우 inputrc 를 확장자로 간주하지만
  # 실은 확장자가 아니기에 없는 것이 정상




정규식을 사용하지 않고, 확장자만 추출하는 함수를 직접 구현: ▶▶ Perl/펄] 파일명에서, 확장자 구하는 함수; Get File Extension Only


File::Basename 모듈을 사용한 가장 편리한 방법: ▶▶ Perl 펄] 패스에서, 디렉토리명/파일명/확장자 분리 추출; Split Path Name




Friday, March 30, 2007

자바스크립트] 퍼센트 계산, 백분율 구하기 소스; Percent JavaScript

자바스크립트로 퍼센트 계산을 하는 방법입니다.

* 전체값에서 일부값이 몇 퍼센트인지
* 전체값의 몇 퍼센트는 얼마인지

이 2가지를 계산합니다. 퍼센트 계산 함수가 없기에 간단한 공식을 사용하여 계산합니다. 아래 예제와 같습니다.

JavaScript: 퍼센트 계산 예제


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

//////////////////////////////////////////////////////////
// 전체값에서 일부값은 몇 퍼센트? 계산
// 공식은 '일부값 나누기 전체값 곱하기 100'
//////////////////////////////////////////////////////////

var result;

// 10은 100에서 몇 퍼센트?
result = 10 / 100 * 100;
document.write(result, '%<br />');
// 출력 결과: 10%


// 33은 100에서 몇 퍼센트?
var x = 33;
var y = 100;
result = x / y * 100;
document.write(result, '%<br />');
// 출력 결과: 33%


// 105는 300의 몇퍼센트?
document.write(105 / 300 * 100, '%<br />');
// 출력 결과: 35%


// 한달 봉급 156만원인 사람이, 음식 값으로 21만원을 쓰면,
// 그 음식값은 한 달 봉급의 몇 퍼센트?
document.write(210000 / 1560000 * 100, '%<br />');
// 출력 결과: 13.461538461538461%


// 만약 봉급 156만원으로 모두 먹는 데 사용했다면
// 100% 가 나와야겠지요.
document.write(1560000 / 1560000 * 100, '%<br />');
// 출력 결과: 100%


// 만약 아무것도 먹지 않았면 0% 가 나와야합니다.
document.write(0 / 1560000 * 100, '%<br />');
// 출력 결과: 0%





//////////////////////////////////////////////////////////
// 전체값의 몇 퍼센트는 얼마? 계산
// 공식은, '전체값 곱하기 퍼센트 나누기 100'
//////////////////////////////////////////////////////////


// 100의 10퍼센트는 얼마?
document.write(100 * 10 / 100, '<br />');
// 출력 결과: 10


// 100의 33퍼센트는 얼마?
document.write(100 * 33 / 100, '<br />');
// 출력 결과: 33


// 300의 35퍼센트는 얼마?
document.write(300 * 35 / 100, '<br />');
// 출력 결과: 105


// 156만원의 13.461538461538461퍼센트는 얼마?
document.write(1560000 * 13.461538461538461 / 100, '<br />');
// 출력 결과: 210000


// 156만원의 100퍼센트는 얼마?
document.write(1560000 * 100 / 100, '<br />');
// 출력 결과: 1560000


// 156만원의 0퍼센트는 얼마?
document.write(1560000 * 0 / 100, '<br />');
// 출력 결과: 0

</script>


위의 소스에서 '<br />' 이런 것은 줄바꿈입니다.



퍼센트 증가 감소 계산법: ▶▶ 자바스크립트] 퍼센트 증가-감소, 백분율 인상-인하 계산; JavaScript Percent Increase Decrease

Excel 엑셀, 지정한 범위의 난수 값 생성, 특정 범위 내에서 랜덤 발생; Random Range

엑셀의 =RAND() 함수를 사용하여, 지정해 준 범위 내에서만 정수의 난수를 구하는 방법입니다. 원래는 0이상 1미만의 실수만 나옵니다.

예를 들어, 30에서 40까지 난수를 출력하려면

=INT((RAND()*(40-30+1))+30)

이렇게 합니다.



그리고 2부터 8까지의 난수만 출력하려면

=INT((RAND()*(8-2+1))+2)

이렇게 합니다.


즉, 공식은
=INT((RAND()*(마지막값-시작값+1))+시작값)
입니다.


엑셀에서, 키보드의 F9 키를 누르면 새로운 난수가 생성됩니다. 셀의 난수 값이 다른 난수 값으로 교체되는 것입니다.



0이나 1부터 시작하여 정수 난수 발생 방법: ▶▶ 엑셀/Excel] 랜덤 함수 RAND() 사용법, 정수 난수 출력 - Random Integer


구글어스] 만리장성 위성 사진, Google Earth, The Great Wall of China

구글어스에 드디어 만리장성이 나타났습니다. 북경 부근의 팔달령八达岭(Badaling)이라는 곳에 있는 장성인데 예전에는 이 부분에서 만리장성이 보이지 않았습니다. 제가 발견하지 못한 것일 수도 있지만...

아래의 빨간 화살표가 가리키는 곳이 장성 즉 성벽입니다.
(클릭하면 확대)

구글어스 만리장성 위성 사진
팔달령 만리장성 인공 위성 사진



중국 팔달령 만리장성 좌표 (위도 경도)


아래의 좌표를 마우스로 긁어서 선택하고, 키보드의 Ctrl+C키로 복사한 후, 구글어스 검색창에 Ctrl+V키로 붙여 넣으면 중국 만리장성으로 자동 비행합니다. Ctrl+C키란, 키보드의 Ctrl키를 누르면서 C키를 누르는 것입니다.

40°21'15.33"N 116° 0'24.64"E

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


한국 발음으로는 팔체령이 아니라 팔달령입니다. 번체로는 八達嶺 이라고 합니다.



만리장성 영어로 번역하면? 영어식 이름? 중문 간체자로; Wanli Changcheng English Name

만리장성을 영어로는 "The Great Wall of China" 라고 합니다. 간단히 줄여서 "The Great Wall"이라고도 부릅니다.

그리고 만리장성을 중국어 간체자로는

长城

또는

万里长城

이라고 합니다. 万里长城 은, "Wanli Changcheng"이라고 발음합니다.


만리장성 고화질 사진: ▶▶ 만리장성 고화질 사진 갤러리; The Great Wall of China; 万里长城

만리장성 위성사진: ▶▶ 구글어스] 만리장성 위성 사진, Google Earth, The Great Wall of China


만리장성의 총 길이는?


측정 기준에 따라 길이가 상당히 달라집니다.

최소 2400 킬로미터이고

최대 6400 킬로미터입니다.

6400 km 는, 허물어져서 이제는 없어진 곳까지 다 합친 길이일 것입니다.




▶▶ 자금성 영어로 번역하면? 영어식 이름은? 한문으로; Zijin Cheng English Name

자금성 영어로 번역하면? 영어식 이름은? 한문으로; Zijin Cheng English Name

자금성은 영어로 "The Forbidden City" 라고 합니다. 또는 자금성이라는 단어를 그대로 번역하여 "The Purple Forbidden City" 라고도 합니다.

한문으로는

紫禁城

이렇게 쓰는데, 중국식 발음은 "Zijin Cheng" 입니다.



그리고 자금성이 현재는 박물관으로 운영되기에

故宫博物院 (고궁박물원: The Palace Museum)

이렇게 하기도 합니다.


또한 중국에서는 자금성을 그냥 간단히 고궁 (故宫; Gugong) 이라고도 부릅니다.



그리고 여기에는 자금성을 인공위성에서 촬영한 사진이 있습니다: ▶▶ 구글 어스(Google Earth)에서 자금성(자장면집 아님), 피라미드 발견


▶▶ 만리장성 영어로 번역하면? 영어식 이름? 중문 간체자로; Wanli Changcheng English Name

Excel 엑셀, 난수 소수점 없애는 방법, 삭제, 정수 랜덤 숫자 출력; Int Rand

엑셀의 =RAND() 함수로 난수를 발생시키면 0이상에서 1미만의 실수가 출력되고 정수가 나오지는 않습니다.

이런 식입니다:

0.146310727
0.485013213
0.299897345

즉, 소수점이 붙습니다.


소수점이 없이, 정수로 출력하려면,

RAND() 로 구한 실수(여기서는, 소수점이 있는 수, 즉 소수를 의미)에, 어떤 수를 곱하여 크게 만들고

INT() 함수로 감싸 주어 정수화시켜 사용합니다. 즉 INT() 함수로 소수점을 "제거"하는 것입니다.


예를 들어
=INT(RAND()*10)
이렇게 하면 0에서 9까지의 정수 난수가 나오고


=INT(RAND()*10) + 1
이렇게 하면 1~10까지의 정수 난수가 나옵니다.



여기에 더 자세한 설명이 있습니다: ▶▶ 엑셀/Excel] 랜덤 함수 RAND() 사용법, 정수 난수 출력 - Random Integer

Thursday, March 29, 2007

매스매티카] 분수를 소수로 변환 함수/명령어; Mathematica Fraction To Decimal

분수를 소수로 변환하는 것은 탁상용 계산기로도 쉽게 계산할 수 있습니다. 공식은

분자 나누기 분모

입니다. 예를 들어, 1/2 즉 "2분의 1"이라는 분수를 소수로 변환하려면, 1 나누기 2를 하면 0.5 라는 답이 나옵니다.


그런데 매스매티카에서는 1 나누기 2를 하려고
1/2
이렇게 입력하면 그냥 분수 1/2 이 그대로 나와 버립니다.

소수로 출력하려면, 숫자 바로 뒤에 마침표를 하나 붙여 주면 됩니다. 즉,

1/2.
이렇게 또는
1./2
이렇게 입력하고 Shift+Enter키를 치면 0.5 라는 답이 소수로 나옵니다.

또는
N[1/2]
이렇게 또는
1/2 // N
이렇게 해주어도 됩니다.



분수 3/7 (7분의3) 을, 소수점 이하 20자리까지 구하려면

N[3/7, 20]
이렇게 하면
0.42857142857142857143
이런 답이 나옵니다.



그렇지만 거꾸로, 소수를 분수로 바꾸려면 함수를 사용해야 합니다: ▶▶ 매스매티카] 소수를 분수로 변환 함수/명령; Mathematica Decimal To Fraction



매스매티카] 소수를 분수로 변환 함수/명령; Mathematica Decimal To Fraction

매스매티카(Mathematica)에서는, Rationalize 즉 "유리화" 함수로, 소수를 분수로 변환할 수 있습니다.

우선 매스매티카의 노트북(하얀 빈 종이)에
Rationalize[0.5, 0]
이렇게 쓰고 Shift+Enter키를 누르면, 소수 "0.5" 가 분수 "1/2" (2분의 1)로 변환됩니다.


그런데 0.3333333 을
Rationalize[0.3333333, 0]
이렇게 변환하면 3분의1이 나오지 않고
3333333/10000000
이런 분수가 나옵니다. 이 분수의 값이 정확히 "0.3333333"이기는 하지만, 3분의 1이라는 깔끔한 값을 얻으려면

소수의 정밀도를
Rationalize[0.3333333333333333, 0]
이 정도(소수점 이하 16자리)로 높여야 1/3이 나옵니다.


▶▶ 매스매티카 Mathematica] 소수를 분수로 바꾸는 표 출력 소스; Frac Table


펄 프로그래밍으로 분수 변환을 구현하는 소스인데 정밀도가 낮은 편임: ▶▶ Perl 펄] 소수를 분수로 변환 함수 구현; Decimal To Fraction Function

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



분수를 소수로 변환 방법: ▶▶ 매스매티카] 분수를 소수로 변환 함수/명령어; Mathematica Fraction To Decimal


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



Perl 펄] 소수를 분수로 변환 함수 구현; Decimal To Fraction Function

펄에서, 소수를 분수로 바꾸는 방법입니다. 아래의 decimalToFraction() 이라는 함수에 소수를 넣어주면, 분자 분모가 든 배열을 반환하는데, 이 배열을 printFraction() 이라는 함수에 넣어주면 화면에 분수 형태로 출력됩니다.

소수를 분수로 바꾸는 것은 구현하기 어렵고, 정밀도가 높은 소수의 경우에는 오차가 있어 그리 완벽하지는 않습니다.

소수를 분수로 표현 예제 소스


스크립트 파일명: example.pl
(※ 스크롤 박스 사용법: 박스 안을 마우스로 클릭한 후, 키보드의 좌우 화살표키를 누르면 양옆으로 움직일 수 있습니다. 박스에서 다시 나오려면, 박스 바깥의 아무곳이나 클릭하면 됩니다.)
#!/usr/bin/perl
use strict; use warnings;

# 소수를 분수로 변환 (약분하여 출력)

print printFraction(decimalToFraction(0.5)), "\n"; # 1/2
print printFraction(decimalToFraction(0.1)), "\n"; # 1/10
print printFraction(decimalToFraction(1.1)), "\n"; # 11/10
print printFraction(decimalToFraction(3.44)), "\n"; # 86/25
print printFraction(decimalToFraction(3)), "\n"; # 3/1
print printFraction(decimalToFraction(0)), "\n"; # 0/1
print printFraction(decimalToFraction(5.4877325)), "\n"; # 1371933/250000
print printFraction(decimalToFraction(26.1245)), "\n"; # 52249/2000
print printFraction(decimalToFraction(2545.139)), "\n"; # 2545139/1000
print printFraction(decimalToFraction(0.25)), "\n"; # 1/4
print printFraction(decimalToFraction(0.42857142)), "\n"; # 428571/1000000 (=3/7)
print printFraction(decimalToFraction(0.3333333)), "\n"; # 333333/1000000
print printFraction(decimalToFraction(0.000071)), "\n"; # 71/1000000

# 파이값(원주율)을 분수로 변환
print printFraction(decimalToFraction(3.1415926535897932384626433832795)), "\n";
# 3141593/1000000




# 소수를 분수로 변환 함수
sub decimalToFraction {
  my $iP = int($_[0]);          # 소수의 정수부만 구하기
  my $fP = $_[0] - int($_[0]);  # 소수의 소수부만 구하기

  $fP = RoundXL($fP, 6);        # 소수부의 정밀도가 지나치게 높지 않게끔 반올림
  my $bunmo = 10 ** (length($fP) - 2); # 소수점 이하 자릿수만큼 분모 만들기: 가령 0.001 은 1000 으로

  return reduceFraction(($iP + $fP) * $bunmo, $bunmo); # 약분 후, 분자, 분모 반환
}


# 분수를 알아보기 쉽게 출력하는 함수
# 분수의 구성 요소가 든 배열을 분수로 출력
sub printFraction {
  return $_[0], "/", $_[1];
}


# 분수 약분 함수 (Reduce a Fraction)
# 분자 분모를 입력받아, 약분 후, 분자 분모가 든 배열을 반환
sub reduceFraction {
  my @frac = @_;
  if ($frac[1] == 0) { return "NaN", "NaN"; } # 분모가 0일 경우에 에러 반환

  my $gcd = gcd(@frac);

  return ($frac[0] / $gcd, $frac[1] / $gcd);
}


# 최대 공약수 계산 함수
sub gcd {
  my $a = $_[0];
  my $b = $_[1];

  while ($b != 0) {
    my $temp = $a % $b;
    $a = $b;
    $b = $temp;
  }

  return abs($a);
}


# 실수를 실수로, 지정한 자릿수에서 반올림 함수
sub RoundXL {
  sprintf("%.$_[1]f", $_[0]);
}



직접 구현하지 않고 CPAN 모듈을 사용하여 소수를 분수로 변환: ▶▶ [Perl/펄] 소수를 분수로 변환 / 분수를 소수로 바꾸기 - Math-Fraction

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


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



0에서 1사이의 난수 생성; 0.0부터 1.0까지 랜덤 Random 넘버 발생 JavaScript

0.0 이상 1.0 미만의 난수를 발생시키는 방법입니다.

별도의 프로그래밍 언어가 없이도 사용할 수 있게 자바스크립트로 만들었습니다.

0부터 1까지의 무작위 난수 생성 예제


소스 파일명: example.html
<script type="text/javascript">
// 0.0에서 1.0까지의 난수 1개 출력

var result = Math.random();
document.write(result);

</script>




<br /><br /><br /> <!-- 줄바꿈 -->




<script type="text/javascript">
// 0.0에서 1.0까지의 난수 30개 출력

for (var i = 0; i <= 30; i++)
  document.write(Math.random(), '<br />');

</script>



위의 예제 소스 코드를 example.html 등의 이름으로 하드에 저장한 후, 인터넷 브라우저로 열어서 보면 예를 들어 아래과 같이 난수가 생성되어 있을 것입니다:

브라우저 출력 결과 화면:
0.38480495090657


0.9649159391467088
0.1549883858775553
0.016199814603667484
0.7774575225633665
0.9960881814489204
0.038400210211264885
0.9974653263504947
0.037538193101927464
0.4475363850795675
0.5075300287503437
0.3615585650983367
0.7244048659529441
0.9123814073756751
0.01796020144357613
0.6230559479590279
0.22948560792652922
0.4017179138848254
0.7985133172516692
0.651763105438836
0.9719917015906905
0.8577716315327654
0.852898938718652
0.9985844385613678
0.27855751762372943
0.3313986074603901
0.4325945145914521
0.06085958360891092
0.44256493053164764
0.019147233700160915
0.24478519712185537
0.17936060710807317



위의 난수는 0~1까지의 실수들이 고르게 분포되어 있는데, 이것은 중간값이 가장 많이 나오도록 하는 방법입니다: ▶▶ 자바스크립트] 정규분포(가우스 분포) 난수(랜덤) 발생 함수; JavaScript Gauss Random

정수 난수 발생: ▶▶ 자바스크립트 랜덤(Random)/난수 만들기 예제, JavaScript


0~1까지의 실수 난수 생성기: ▶▶ 0에서 1까지의 실수 난수 발생, 랜덤 생성; Float Random Maker



윈도우 계산기 퍼센트 버튼 사용법; Windows Calc Percent Button

윈도우의 계산기 프로그램 또는 탁상용 계산기에는 퍼센트 계산 버튼(%)이 있습니다. 그 퍼센트 버튼을 사용하여 퍼센트 계산을 하는 방법입니다.

윈도우 계산기 프로그램을 중심으로 설명합니다. 참고로, 윈도우 계산기에서는 "/" 기호로 나눗셈을, 별표(*)로 곱셉을 하고, 탁상용 계산기에서는 나눗셈 기호가 ÷ 입니다.

300에서 105는 몇 퍼센트?


105
/
300
*
100
=
답: 35%

위의 경우는,
105/300*100=
을 차례로 입력하는 것입니다. 끝의 등호(=)는 키보드의 Enter키로 대체할 수 있습니다.
(윈도우 계산기의 퍼센트 버튼은 이런 유형의 퍼센트 계산은 되지 않기에, 공식을 사용하여 직접 계산하였습니다. 진짜 계산기에서는 105÷300% 이렇게 하면 됩니다.)


300의 35퍼센트는 얼마?


300
*
35
%

답: 105
(공학용 모드는 안되고, "표준" 모드여야 함)


100에서 10% 증가하면?


100
+
10%
=
답: 110
(공학용 모드는 안되고, "표준" 모드여야 함)



윈도우 계산기 프로그램의 퍼센트 계산 기능은, 진짜 탁상용 계산기의 그것에 비해 빈약하더군요.



퍼센트 계산기: ▶▶ 퍼센트계산기: 전체의 몇퍼센트는 얼마? 전체에서 일부는 몇% 차지? Percent Calculator

퍼센트 계산 공식: ▶▶ Excel 엑셀, 퍼센트 계산 공식, 백분율 구하기 함수? Percent Percentage

▶▶ 카시오 전자 계산기 매뉴얼 설명서 다운로드; CASIO Calculator Manual Download




Excel 엑셀, 퍼센트 계산 공식, 백분율 구하기 함수? Percent Percentage

엑셀에서 퍼센트 계산을 하는 방법입니다. 여기서는

* 전체값에서 일부값이 몇 퍼센트인지
* 전체값의 몇 퍼센트는 얼마인지

위의 2가지를 계산합니다. 퍼센트 계산 함수가 별도로 제공되지 않기에, 간단한 공식으로 퍼센트 계산을 합니다.

전체값에서 일부값이 차지하는 퍼센트 계산


공식은
=일부값 / 전체값 * 100
입니다. 즉, "일부값 나누기 전체값 곱하기 100"입니다.

주의! 그런데 셀 서식을 백분율로 지정할 때에는 공식에서, 뒤에 " * 100" 이라는 부분이 없어야 합니다. 즉 "곱하기 100"을 하지 않아야 합니다. 셀 서식이 백분율이면 엑셀이 이미 100을 곱해 주기 때문입니다.


10은 100에서 몇 퍼센트?
=10 / 100 * 100
답은 당연히 10% 가 나옵니다.


33은 100에서 몇 퍼센트?
=33 / 100 * 100
답은 당연히 33% 가 나옵니다.


105는 300의 몇퍼센트?
=105 / 300 * 100
답은 35%


한달 봉급 156만원인 사람이, 음식 값으로 21만원을 쓰면, 그 음식값은 한 달 봉급의 몇 퍼센트?
=210000 / 1560000 * 100
답은 13.46153846% 가 나옵니다.


만약 봉급 156만원으로 모두 먹는 데 사용했다면 100% 가 나와야겠지요.
=1560000 / 1560000 * 100
답은 정확히 100% 가 나옵니다.


만약 아무것도 먹지 않았면 0% 가 나와야합니다.
=0 / 1560000 * 100
답은 정확히 0% 가 나옵니다.


퍼센트가 계산된 셀에서 마우스 우측 버튼을 눌러
셀 서식 > 표시 형식 > 백분율
을 선택하고, "소수 자릿수"는 2자리 정도로 지정하고, 확인 버튼을 누르면 뒤에 퍼센트 기호가 자동으로 붙습니다.

다시 한번 말하자면, 셀 서식이 백분율인 경우에는 예를 들어
105는 300의 몇퍼센트를 계산할 때
=105 / 300
이렇게 해야 합니다. 그렇지 않고 뒤에 곱하기 100을 해주면, 35%가 아니라 3500% 라는 틀린 값이 나오게 됩니다.

엑셀의 셀 서식이 백분율이면 이미 곱하기 100을 해 놓았기에, 다시 곱하기 100을 하면 안됩니다.




전체값의 몇 퍼센트는 얼마? 계산


공식은
=전체값 * 퍼센트 / 100
입니다. "전체값 곱하기 퍼센트 나누기 100" 이라는 뜻입니다.

이 경우는, 결과값이 퍼센트가 아니기에 반드시 100을 나누어 주어야 합니다.


100의 10퍼센트는 얼마?
=100 * 10 / 100
답은 10

100의 33퍼센트는 얼마?
=100 * 33 / 100
답은 33


300의 35퍼센트는 얼마?
=300 * 35 / 100
답은 105


156만원의 13.46153846퍼센트는 얼마?
=1560000 * 13.46153846 / 100
답은 210000


156만원의 100퍼센트는 얼마?
=1560000 * 100 / 100
답은 1560000

156만원의 0퍼센트는 얼마?
=1560000 * 0 / 100
답은 0



퍼센트 증가 감소 방법과 공식: ▶▶ Excel 엑셀] 퍼센트 증가/감소, 백분율 인상/인하 계산; Percent Increase Decrease


퍼센트 계산기: ▶▶ 퍼센트계산기: 전체의 몇퍼센트는 얼마? 전체에서 일부는 몇% 차지? Percent Calculator

Wednesday, March 28, 2007

구글 새 블로거 피드 문제 발생, 해결 방법; New Blogger.com Feed Fix

이 공지 사항의 요점은, 아톰 피드 주소 변경에 대한 것입니다.

http://mwultong.blogspot.com/atom.xml
만약 이 주소를 구독하시는 분은

http://feeds.feedburner.com/mwultong
여기의 피드버너 주소로 반드시 변경하셔야만 합니다. 물론 이미 이 주소를 구독하시는 분은 괜찮습니다.


왜냐하면 이제, 아톰 피드 (...atom.xml) 쪽은 정상적인 구독이 불가능하기 때문입니다. 업데이트하는 옛날 게시물들까지 최신 게시물로 둔갑하여 나오는 심각한 문제가 있습니다. 특히 제가 게시물 수정을 많이 하는 편이라서, 아톰 피드의 순서가 더욱 뒤죽박죽되고 있습니다.




여기 이하의 글은, 구글 블로그에서 블로그를 운영하시는 분에게만 해당하는 사항입니다:

새 버전 블로거 피드(Feed)의 포스트 순서 문제 해결


구글의 무료 블로그 계정인 "블로거 닷컴 (blogger.com + blogspot.com)" 에서, 제가 이 블로그를 운영 중인데, 블로거 닷컴이 베타 테스트를 끝내고, 이번에 새 버전으로 운영되고 있습니다. 새 버전의 블로거에 여러 가지 문제가 있지만, 특히 사이트 피드 문제가 좀 심각합니다.

위에서 말한 바와 같이, 이전 포스트를 수정하면 그것이 최신 포스트로서 인식되어 버립니다. (예전의 블로거에서는 이렇지 않았음)

그래서 올블로그 같은 메타사이트에 피드를 등록하면 제대로 수집이 되지 않았습니다.


최신 포스트만 피드에 나오게 하는 옵션이 있습니다. 새 블로거에는

http://아이디.blogspot.com/feeds/posts/default

이런 주소가 기본 피드입니다. 이 주소의 끝에

?orderby=published

라는 문자열을 붙이면 됩니다.




http://아이디.blogspot.com/feeds/posts/default?orderby=published

이렇게 하면, 최신 포스트만 나옵니다. 이렇게 ?orderby=published 라는 것을 붙인 주소를 올블로그에 등록하면 됩니다. (그렇지만 자동 수집이 안되고 수동 수집만 되는 문제가 있었습니다.)

그리고 피드버너의 원본 피드도 ?orderby=published 가 붙은 주소로 변경해 주어야 합니다.


새 버전의 블로거에서는 골치 아픈 문제가 한두 가지가 아니었습니다.


Java 자바] 퍼센트 계산, 백분율 구하기 소스; Percent Source Percentage

자바로 퍼센트 계산을 하는 방법입니다.

* 전체값에서 일부값이 몇 퍼센트인지

* 전체값의 몇 퍼센트는 얼마인지

위의 2가지를 계산합니다.

Java에서, 퍼센트 계산 예제 소스


소스 파일명: Example.java
(※ 스크롤 박스 사용법: 박스 안을 마우스로 클릭한 후, 키보드의 좌우 화살표키를 누르면 양옆으로 움직일 수 있습니다. 박스에서 다시 나오려면, 박스 바깥의 아무곳이나 클릭하면 됩니다.)
public class Example {
  public static void main(String[] args) {


  //////////////////////////////////////////////////////////
  // 전체값에서 일부값은 몇 퍼센트? 계산
  // 공식은 "일부값 나누기 전체값 곱하기 100"
  //////////////////////////////////////////////////////////


  // 10은 100에서 몇 퍼센트?
  System.out.format("%.2f%%%n", 10.0 / 100.0 * 100.0);
  // 출력 결과: 10.00%


  // 33은 100에서 몇 퍼센트?
  int x = 33;
  int y = 100;
  System.out.println( (double) x / (double) y * 100.0 + "%");
  // 출력 결과: 33.0%
  // 정수의 경우에는 (double) 로 실수화시키지 않으면
  // 0.0 이라는 엉뚱한 값이 나옴
  // 맨 끝의 + "%" 이 부분은 공식의 일부가 아니라 퍼센트 기호 출력


  // 105는 300의 몇퍼센트?
  double x2 = 105.0;
  double y2 = 300.0;
  System.out.format("%.2f%%%n", x2 / y2 * 100.0);
  // 출력 결과: 35.00%
  // 실수형 변수에 값을 넣어두는 것이 좋음


  // 한달 봉급 156만원인 사람이, 음식 값으로 21만원을 쓰면,
  // 그 음식값은 한 달 봉급의 몇 퍼센트?
  System.out.format("%.2f%%%n", 210000.0 / 1560000.0 * 100.0);
  // 출력 결과: 13.46%


  // 만약 봉급 156만원으로 모두 먹는 데 사용했다면
  // 100% 가 나와야겠지요.
  System.out.format("%.2f%%%n", 1560000.0 / 1560000.0 * 100.0);
  // 출력 결과: 100.00%


  // 만약 아무것도 먹지 않았면 0% 가 나와야합니다.
  System.out.format("%.2f%%%n", 0.0 / 1560000.0 * 100.0);
  // 출력 결과: 0.00%





  //////////////////////////////////////////////////////////
  // 전체값의 몇 퍼센트는 얼마? 계산
  // 공식은, "전체값 곱하기 퍼센트 나누기 100"
  //////////////////////////////////////////////////////////


  // 100의 10퍼센트는 얼마?
  System.out.format("%.2f%n", 100.0 * 10.0 / 100.0);
  // 출력 결과: 10.00


  // 100의 33퍼센트는 얼마?
  System.out.format("%.2f%n", 100.0 * 33.0 / 100.0);
  // 출력 결과: 33.00


  // 300의 35퍼센트는 얼마?
  System.out.format("%.2f%n", 300.0 * 35.0 / 100.0);
  // 출력 결과: 105.00


  // 156만원의 13.46퍼센트는 얼마?
  System.out.format("%.2f%n", 1560000.0 * 13.46 / 100.0);
  // 출력 결과 (21만원에 가까운 값): 209976.00


  // 156만원의 100퍼센트는 얼마?
  System.out.format("%.2f%n", 1560000.0 * 100.0 / 100.0);
  // 출력 결과: 1560000.00


  // 156만원의 0퍼센트는 얼마?
  System.out.format("%.2f%n", 1560000.0 * 0.0 / 100.0);
  // 출력 결과: 0.00


  }
}



퍼센트 증가 감소 계산: ▶▶ Java 자바] 퍼센트 증가/감소, 인상/인하 계산 방법+공식; Percent Increase Decrease



Perl 펄] 나머지 값 구하기 연산자 사용 법, 함수? get Remainder Modulus Operator

대부분의 프로그래밍 언어에서, 나머지 값을 구하는 연산자는 퍼센트 기호인 % 입니다. 펄에서도 마찬가지입니다.

나머지를 구하는 함수는 따로 제공되지 않습니다. 다음 예제와 같습니다:

나머지 값 계산 예제


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

  my $result;

  $result = 10 % 5;
  print $result, "\n";
  # 출력 결과: 0
  # 10을 5로 나누면, 딱 떨어지고 나머지는 없기에 0(영)입니다.


  print 10 % 2, "\n";
  # 출력 결과: 0
  # 10을 2로 나누어도 나머지는 0입니다.


  $result = 13 % 5;
  printf("나머지: %d\n", $result);
  # 출력 결과: 3
  # 13을 5로 나누면 나머지는 3


  printf("나머지: %d\n", 13 % 2);
  # 출력 결과: 1



나머지 연산자의 실용적인 예제:

▶▶ Perl/펄] 윤년 평년 여부 판단 함수; is Leap Year

▶▶ Perl/펄] 2자리수 년도 구하기, 두 자리 연도 출력; Two Digits Year

Perl 펄] 퍼센트 계산, 백분율 구하기; Percent Percentage

펄에서 퍼센트를 계산하는 방법입니다. 별도의 함수가 제공되지 않기에, 퍼센트 계산 공식으로 구합니다.

퍼센트 계산 예제


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


  ###############################################
  # 전체값에서 일부값은 몇 퍼센트? 계산
  # 공식은 "일부값 나누기 전체값 곱하기 100"
  ###############################################


  # 10은 100에서 몇 퍼센트?
  printf("%.2f%%\n", 10 / 100 * 100);
  # 출력 결과: 10.00%


  # 33은 100에서 몇 퍼센트?
  printf("%.2f%%\n", 33 / 100 * 100);
  # 출력 결과: 33.00%


  # 105는 300의 몇퍼센트?
  printf("%.2f%%\n", 105 / 300 * 100);
  # 출력 결과: 35.00%


  # 한달 봉급 156만원인 사람이, 음식 값으로 21만원을 쓰면,
  # 그 음식값은 한 달 봉급의 몇 퍼센트?
  printf("%.2f%%\n", 210000 / 1560000 * 100);
  # 출력 결과: 13.46%


  # 만약 봉급 156만원으로 모두 먹는 데 사용했다면
  # 100% 가 나와야겠지요.
  printf("%.2f%%\n", 1560000 / 1560000 * 100);
  # 출력 결과: 100.00%


  # 만약 아무것도 먹지 않았면 0% 가 나와야합니다.
  printf("%.2f%%\n", 0 / 1560000 * 100);
  # 출력 결과: 0.00%





  ###############################################
  # 전체값의 몇 퍼센트는 얼마? 계산
  # 공식은, "전체값 곱하기 퍼센트 나누기 100"
  ###############################################


  # 100의 10퍼센트는 얼마?
  printf("%.2f\n", 100 * 10 / 100);
  # 출력 결과: 10.00


  # 100의 33퍼센트는 얼마?
  printf("%.2f\n", 100 * 33 / 100);
  # 출력 결과: 33.00


  # 300의 35퍼센트는 얼마?
  printf("%.2f\n", 300 * 35 / 100);
  # 출력 결과: 105.00


  # 156만원의 13.46퍼센트는 얼마?
  printf("%.2f\n", 1560000 * 13.46 / 100);
  # 출력 결과 (21만원에 가까운 값): 209976.00


  # 156만원의 100퍼센트는 얼마?
  printf("%.2f\n", 1560000 * 100 / 100);
  # 출력 결과: 1560000.00


  # 156만원의 0퍼센트는 얼마?
  printf("%.2f\n", 1560000 * 0 / 100);
  # 출력 결과: 0.00



퍼센트 증감 계산: ▶▶ Perl 펄] 퍼센트 증가/감소, 인상/인하, 백분율 계산; Percent Increase Decrease


참고로, 펄에서 % 기호는 해쉬입니다: ▶▶ Perl/펄] 퍼센트 기호(%) 의미, printf 함수로 백분율 기호 출력 방법; Print Percent Sign

또는 나머지 연산자이거나: ▶▶ Perl 펄] 나머지 값 구하기 연산자 사용 법, 함수? get Remainder Modulus Operator

출력 형식 지정자입니다: ▶▶ C언어/Perl] printf() 함수의 포맷 스트링 %s, %d - Format Specifier

즉, 퍼센트 기호는 퍼센트 계산과 무관합니다.

C언어] 나누기 소수점 나오게 나눗셈; Divide, int float, Decimal Point

컴퓨터에서는 슬래쉬(/) 기호로 나눗셈을 하고, 별표(*)로 곱셈을 합니다. C에서도 마찬가지입니다.

그런데 정수를 나눗셈하면 결과가 실수(float)가 되는 경우, 즉 소수점이 나오는 경우가 많습니다. C언어는 자료형이 엄격하기 때문에, 정수 나눗셈은 다음 예제와 같이 해주어야 합니다.

C언어 기초 예제: 정수 나눗셈


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

int main(void) {

  // 정수 나눗셈의 정확한 결과를 구하려면
  // 정수를 (double) 로 캐스팅하여 실수로 만들어 주어야 함
  int x = 100;
  int y = 3;

  printf("%f\n", (double) x / (double) y);
  // 출력 결과: 33.333333




  // 더 좋은 방법은, 처음부터
  // 변수를 실수형(double)으로 선언하고
  // 상수도 100.0 이렇게 끝에 ".0"을 붙여 실수화하는 것입니다.
  double x2 = 100.0;
  double y2 = 3.0;

  printf("%f\n", x2 / y2);
  // 출력 결과: 33.333333


  return 0;
}



참고: ▶▶ floating point not loaded

카시오 전자 계산기 매뉴얼 설명서 다운로드; CASIO Calculator Manual Download

전자 계산기를 사면, 인쇄된 매뉴얼을 주긴 하지만, 그것을 분실했을 때에는 아래 주소에서 PDF 파일로 된 설명서를 다운받아 읽을 수 있습니다. 모두 영문 매뉴얼이고, 한글로 번역된 것은 찾을 수 없었습니다.

< Calculators [ Manuals ] - CASIO WORLDWIDE >

위의 페이지에 보면, 다음과 같은 계산기 카테고리가 있습니다.

Standard Scientific Calculator (공학용: 표준)
일반 공학용 계산기

Graphic Scietific Calculator (공학용: 그래픽)
터치 스크린 방식의 계산기. 포켓PC 비슷 (위의 페이지에는 Scientific 을 Scietific 으로 잘못 적어 놨더군요)

Programming Scientific Calculator (공학용: 프로그래밍 가능)
간단한 프로그램을 할 수 있었습니다.

Financial Calculator (금융/상업용)
이자 계산 기능 같은 것도 내장되어 있더군요.


자신이 사용하는 계산기 이름의 링크를 마우스 우측 버튼으로 클릭하고, "다른 이름으로 대상 저장"을 선택하여 PDF 파일을 하드에 저장한 후 읽으면 됩니다.


PDF 형식의 문서이기에 어도비 리더를 설치해야 읽을 수 있습니다: ▶▶ PDF 파일 읽는 프로그램 다운로드, 어도비 리더 설치 방법; Adobe Reader Download


그런데 카시오는 매뉴얼을 위와 같이 온라인으로 제공하지만, 샤프(SHARP)는 없었습니다. 업데이트: 가루님께서 알려 주셨습니다. 이 주소에 샤프 Sharp 계산기 설명서가 있습니다. ▶▶ 샤프 공학용 계산기 매뉴얼 파일 다운로드 받기 주소; Sharp Calculator Manual PDF File


Tuesday, March 27, 2007

Java 자바] Calendar 클래스 사용법 예제 소스; x new Calendar()

자바의 Calendar 클래스는 Abstract Class 이기 때문에

Calendar cal = new Calendar();
이렇게 new 로 오브젝트를 만들려고 하면 java.util.Calendar is abstract; cannot be instantiated 이런 에러가 발생합니다.

Calendar cal = Calendar.getInstance();
이렇게 getInstance() 메소드를 사용해야 합니다.



Calendar 클래스 예제는 다음과 같습니다:


현재 날짜와 시간을 구하여 화면에 출력합니다: ▶▶ 자바.Java] 현재 날짜 시간 구하기, 오늘 연월일/시분초 요일 얻기: Get Date Time


현재 날짜로 된, 하위 디렉토리를 생성합니다: ▶▶ Java 자바, 현재 날짜로 디렉토리 생성 예제; Current Date Directory Name


현재 날짜와 시간을 YYYY-MM-DD hh:mm:ss 형식으로 화면에 출력합니다: ▶▶ Java 자바] YYYY-MM-DD hh:mm:ss 날짜 시간 포맷 출력 Source Code


Java 자바, 현재 날짜로 디렉토리 생성 예제; Current Date Directory Name

오늘 날짜 이름으로 된 디렉토리(폴더)를 만드는 방법입니다.

예를 들어 오늘이 2007년 3월 27일이라면, 하드의 현재 디렉토리에
2007-03-27
이라는 이름의 하위 디렉토리가 자동으로 생성됩니다.

오늘 날짜로 된 폴더명, 디렉토리명 만들기 예제


소스 파일명: Example.java
import java.io.*;
import java.util.*;

public class Example {
  public static void main(String[] args) {

    Calendar cal = Calendar.getInstance();
    String dateString;

    dateString = String.format("%04d-%02d-%02d", cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH));

    File f = new File(dateString);
    if (!f.mkdirs())
      System.err.println("디렉토리 생성 실패");


  }
}


이미 같은 이름의 디렉토리가 존재할 경우에는 "디렉토리 생성 실패" 라는 에러가 발생합니다. 위의 코드를 실제 사용할 때에는 에러를 출력하지 않는 것이 편리할 것입니다.

즉, if문을 없애고 그냥
f.mkdirs();
이렇게 하면 됩니다.


▶▶ 자바.Java] 현재 날짜 시간 구하기, 오늘 연월일/시분초 요일 얻기: Get Date Time

▶▶ Java 자바] 디렉토리 생성, 중첩 패스의 폴더 만들기 함수; mkdir, mkdirs, Create Directory

Java 자바] YYYY-MM-DD hh:mm:ss 날짜 시간 포맷 출력 Source Code

자바에서, 현재 날짜와 시간을 YYYY-MM-DD hh:mm:ss 형식으로 출력하는 방법입니다. 가령
2007-03-27 23:16:37
이런 식으로 년월일 시분초로 구분하여 알아보기 쉽게 출력합니다. 24시간제입니다.

YYYY-MM-DD hh:mm:ss 출력 예제


소스 파일명: Example.java
import java.util.Calendar;

public class Example {
  public static void main(String[] args) {

    Calendar cal = Calendar.getInstance();
    String dateString, timeString;

    dateString = String.format("%04d-%02d-%02d", cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH));
    timeString = String.format("%02d:%02d:%02d", cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND));

    System.out.println(dateString + " " + timeString);

  }
}



컴파일 및 실행 결과 화면:
D:\Z>javac Example.java && java Example
2007-03-27 23:17:04

D:\Z>



▶▶ 자바.Java] 현재 날짜 시간 구하기, 오늘 연월일/시분초 요일 얻기: Get Date Time


일본인 인명 사전; 성, 이름 읽기 방법 후리가나; Japanese Name Dictionary

일본인의 성과 이름은 읽기가 아주 힘듭니다. 같은 한자라도 읽는 법이 여러가지가 있고, 일정한 법칙조차도 거의 없기 때문입니다.

따라서 사전이 있어야 하는데, 종이로 된 사전이라면 엄청나게 방대한 분량이겠지만, 다행히 일본 인터넷에 일본 인명 사전이 무료로 공개되어 있습니다.

아래의 주소입니다:

< 全国の苗字(名字)10万種掲載 >

가령, 야마다 (山田) 라는 성씨를, 검색창에 山田 이렇게 입력하면(앞뒤에 공백 문자가 없어야 함)

야마다 성씨를 사용하는 세대수와 후리가나(발음)가 나옵니다.

반각 가타가나로 출력되는데, 전각 카타가나로 바꾸면 이렇게 되고
ヤマダ ヤマタ ヤダ ヨウダ

히라가나로 바꾸면
やまだ やまた やだ ようだ
이렇게 됩니다.

山田 는 "야마다"라고 읽지만 "야다" "요우다" 로 읽는 경우도 있군요.

후리가나에 붙어 있는 별표()는, 운영자가 성씨 읽는 법을 손수 확인했다는 표시입니다.




그런데 위의 사이트는 일본의 성(姓) 검색 사이트입니다. 성(Last Name; Surname; Family Name)을 일본어로 名字(みょうじ) 또는 苗字(みょうじ) 라고 합니다.

그렇지만 일본인의 성이 아닌 이름(First Name)도, 위의 사이트에서 어느 정도 검색할 수 있습니다.

예를 들어, 라는 이름을 입력하면 かおる 또는 かおり 라고 나옵니다.

라는 한자를, 이름이 아닌 성으로 쓰는 가구가 있기 때문입니다.


▶▶ 일본어 후리가나 자동 변환 사이트, 한자어 읽기 발음 히라가나 붙이기; Furigana, Ruby Add

const 선언 의미 [C언어, C++ 예약어 설명; Constant Keyword

const 는 함수가 아니고 예약어(키워드)입니다. 순수한 C언어에는 const 라는 예약어가 없고, C++에만 const 가 있습니다.

const 는 "constant" 즉 "상수"라는 뜻입니다.

어떤 변수를 선언하되, 그 변수를 "읽기 전용"으로 만드는 역할을 합니다.

예를 들어 아래 소스에서 bar 라는 변수는 값을 마음대로 바꾸거나 대입할 수 있지만

앞에 const 가 붙은 FOO 라는 변수는 아무것도 변경할 수 없습니다. 이후에 다른 값을 대입한다든지 하면 에러가 납니다.

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

using namespace std;


int main(void) {
  int bar = 123;
  const int FOO = 999;

  bar++;
  cout << bar << endl;

  cout << FOO << endl;


  return 0;
}



상수 정의에 대한 설명은 여기에 있습니다: ▶▶ C언어] 상수 정의 방법, 상수 의미; Define Constant


예약어 목록: ▶▶ [C언어] C언어와 C++의 예약어 리스트; Keywords


파이값, 원주율 Pi 소수점 이하 1000자리까지 구하기; 매스매티카 Mathematica

원주율(파이값)은 보통 3.14 로 사용하는데, 원주율은 무리수이기에 끝이 없고 3.14... 다음에 무한히 계속됩니다.

다음은 매스매티카에서 파이 값을 소수점 이하 1000자리까지 구하는 방법입니다.

우선 매스매티카의 노트북(하얀 빈 종이)에서

N[Pi, 1001]
이런 수식을 대소문자까지 정확하게 입력하고, 키보드의 Shift+Enter키를 누르면, 파이 값이 다음과 같이 출력됩니다:


파이 값, 천자리까지 구한 표


3.1415926535897932384626433832795028841971693993751058209749445923078164062862
089986280348253421170679821480865132823066470938446095505822317253594081284811
174502841027019385211055596446229489549303819644288109756659334461284756482337
867831652712019091456485669234603486104543266482133936072602491412737245870066
063155881748815209209628292540917153643678925903600113305305488204665213841469
519415116094330572703657595919530921861173819326117931051185480744623799627495
673518857527248912279381830119491298336733624406566430860213949463952247371907
021798609437027705392171762931767523846748184676694051320005681271452635608277
857713427577896091736371787214684409012249534301465495853710507922796892589235
420199561121290219608640344181598136297747713099605187072113499999983729780499
510597317328160963185950244594553469083026425223082533446850352619311881710100
031378387528865875332083814206171776691473035982534904287554687311595628638823
537875937519577818577805321712268066130019278766111959092164201989


그렇지만 위와 같이 정밀한 원주율을 실제 사용할 필요는 없습니다. 아무리 정밀한 계산이라도 소수점 이하 30~50자리면 충분합니다.

▶▶ 계산기로, 파이 값 (원주율) 구하기; PI - Calc Scientific


무한급수로 원주율(원주율의 제곱) 구하기: ▶▶ 매스매티카] 무한급수의 합 구하기, 무한합; Mathematica Infinite Series




Monday, March 26, 2007

자연로그의 밑 e 값, 소수점 이하 1000자리까지 구하기; 매스매티카 Mathematica

자연로그의 밑인 e (Euler Constant) 는 무리수이기에 소수부에 끝이 없습니다. 다음은 소수점 이하 1000자리까지 구하는 방법입니다.

매스매티카에서는 e 를 대문자 E 로 표현합니다.

N[E, 1001]
이렇게 입력하고 Shift+Enter키를 누르면 아래와 같이 출력됩니다.


자연 로그 (ln; Natural Logarithm)의 밑 e 의 근사값 출력


2.7182818284590452353602874713526624977572470936999595749669676277240766303535
475945713821785251664274274663919320030599218174135966290435729003342952605956
307381323286279434907632338298807531952510190115738341879307021540891499348841
675092447614606680822648001684774118537423454424371075390777449920695517027618
386062613313845830007520449338265602976067371132007093287091274437470472306969
772093101416928368190255151086574637721112523897844250569536967707854499699679
468644549059879316368892300987931277361782154249992295763514822082698951936680
331825288693984964651058209392398294887933203625094431173012381970684161403970
198376793206832823764648042953118023287825098194558153017567173613320698112509
961818815930416903515988885193458072738667385894228792284998920868058257492796
104841984443634632449684875602336248270419786232090021609902353043699418491463
140934317381436405462531520961836908887070167683964243781405927145635490613031
072085103837505101157477041718986106873969655212671546889570350354


무한급수로 e 구하기: ▶▶ 매스매티카] 무한급수의 합 구하기, 무한합; Mathematica Infinite Series


C언어에서 e 상수 사용법: ▶▶ C언어] 자연 로그의 밑 e 상수 출력 사용법; Natural Logarithm, Euler Constant, M_E

자바에서 e 상수 사용법: ▶▶ Java/자바] 자연 로그의 밑 e 상수 구하기 출력; Natural Logarithm, Euler Constant



2의 128승 구하기, 256승 512승 1024승 계산: 매스매티카 Mathematica

우선, 윈도우 계산기에서
2 y 256
이렇게 입력하면 2의 256승을 구할 수 있습니다.

1.1579208923731619542357098500869e+77
이렇게 지수 표기법으로 답이 나옵니다.


정확한 정수로 답을 출력하려면 매스매티카(Mathematica)를 사용하면 됩니다. 물론 매스매티카가 설치되어 있어야겠지요.

매스매티카에서
2^256
이렇게 입력하고 Shift+Enter키를 누르면 다음과 같이, 실수가 아닌 정수로 출력됩니다.

115792089237316195423570985008687907853269984665640564039457584007913129639936

숫자가 너무 커서, 스크롤하며 읽어야 합니다. 무려 78 자리의 거대한 숫자입니다.

표: 2의 승


2의 2승 = 4
2의 4승 = 16
2의 8승 = 256
2의 16승 = 65536
2의 32승 = 4294967296 (사십이억구천사백구십육만칠천이백구십육)
2의 64승 = 18446744073709551616 (천팔백사십사경육천칠백사십사조칠백삼십칠억구백오십오만천육백십육)
2의 128승 = 340282366920938463463374607431768211456 (삼백사십澗이천팔백이십삼溝육천육백구십이양구백삼십팔자사천육백삼십사해육천삼백삼십칠경사천육백칠조사천삼백십칠억육천팔백이십일만천사백오십육)
2의 256승 = 115792089237316195423570985008687907853269984665640564039457584007913129639936
2의 512승 = 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096
2의 1024승 = 179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216





맥스] 3ds Max 서비스팩 다운로드 주소; 3D Max SP Download

이 글을 쓰고 있는 현재의 맥스 Autodesk 3ds Max 최신 서비스팩은
3ds Max 8 Service Pack 3
입니다.

< Autodesk 3ds Max 8 Service Pack 3 >
이 주소의 페이지에서 서비스팩(Service Pack)을 다운 받을 수 있습니다.
English 항목에 "Setup_3dsMax8_SP3.msp (msp - 18071Kb)" 라는 링크가 있는데

"Setup_3dsMax8_SP3.msp" 이런 이름의 파일이 다운되고 이 파일을 클릭하면 서비스팩이 설치됩니다. msp 확장자도 exe와 같은 실행파일입니다. (하드에 이미 맥스가 설치되어 있어야 서비스팩을 설치할 수 있음)




오토데스크 홈페이지에서 다운 주소 찾아가기


그런데 오토데스크 사이트는 주소가 자주 바뀌고, 주소 체계 역시 상당히 복잡합니다. 만약 위의 서비스팩 다운 주소가 작동하지 않으면

< http://www.autodesk.com/ >
이 주소의 풀다운 메뉴에서 Services & Support 라는 항목을 선택하고

Product Support > Technical Support
로 계속 찾아가서

"Technical Support by Product" 라는 페이지의
[Select a Product] 목록에서 최종적으로 "Autodesk 3ds Max"를 선택하면 다운로드 페이지가 나옵니다.

그 페이지에서 찾아보면
"Autodesk 3ds Max 8 Service Pack 3 Localized (French, German, Simplified Chinese)"
이런 항목이 있을 것입니다.



PDF 문서에 그림 사진 도표도 넣을 수 있나요? 이미지 파일 삽입 가능 Image File

PDF에는 그림이나 사진도 당연히 넣을 수 있습니다. 만약 PDF에 이미지를 넣을 수 없었다면 인기 있는 문서 형식이 되지 못했을 것입니다. 그리고 PDF는 포토샵 제작사인 어도비라는 회사에서 만든 문서 형식입니다. 그러니 당연히 이미지도 지원이 됩니다.

다음 그림은 이미지가 들어 있는 PDF 파일을 예로 든 것입니다:

(클릭하면 확대. 옆으로 스크롤 가능)
PDF 샘플




도표도 삽입할 수 있습니까?


예, 인쇄할 수 있는 모든 것은 다 PDF 로 표현할 수 있습니다. 왜냐하면 PDF라는 것은, 프린터 입력을 캡처하여 만드는 것이기 때문입니다.

예를 들어, 워드프로세서에서 "표"를 그린 후, 그것을 프린터로 인쇄하면 표가 잘 인쇄됩니다.

PDF 제작 프로그램인 Adobe Acrobat은, 프린터로 가는 신호를 중간에서 가로채서 그것을 PDF파일로 만듭니다. 따라서 결국 프린트로 인쇄되는 것은 모두 PDF 파일로 만들 수 있게 됩니다.


그러나 MP3나 WAV 같은 음악/소리 파일이나, 또는 동영상 파일을 PDF에 넣을 수 있는지는 모르겠습니다. 가능하다는 이야기도 들은 것 같은데, 실제로 PDF에 넣은 경우를 한번도 본 적이 없습니다.


Excel: 엑셀에서 뺄셈 덧셈 방법, 숫자 빼기 더하기 함수는? Subtract Add Functin is there?

엑셀은 물론 다른 모든 프로그램에서도, + - 연산자 즉 "기호"로 기본적인 사칙연산을 합니다.

예를 들어

3 빼기 2를 하려면
=3-2
엑셀의 셀에 이렇게 입력하면 1 이라는 답이 나옵니다.


3 더하기 1을 하려면
=3+1
이렇게 합니다. 그러면 4라는 답이 나옵니다.

즉, 등호(이퀄;=) 기호를 맨 좌측에 붙이면 계산이 되는 것입니다.


숫자 대신, 셀 주소를 사용하여 계산할 수도 있습니다. 예를 들어,

A1셀에 10을 입력하고

B1셀에 12를 입력한 후,

다른 아무 셀에나
=A1 + B1
이라고 입력하면

A1의 10과 B1의 12가 더해져서, 22 라는 답이 나옵니다.



인접 셀의 값, 더하기


A열에

1
2
3
4
5
6
7
8
9
10

이런 숫자가 있을 때, 이 A열의 숫자들을 모두 선택하고,

엑셀 상단 메뉴에서, 시그마 아이콘인 "∑" 이것을 클릭하면
1~10까지 더해져서 10밑에, 55 라는 합계가 나옵니다.


또는 SUM 함수를 사용하여 더하기를 할 수 있습니다: ▶▶ Excel/엑셀] 셀 합계, 산술 평균 값 구하기 함수; SUM(총액), AVERAGE






다만 곱셈과 나눗셈 기호는 산수책의 그것과는 조금 다릅니다. 별표로 곱셈을 하고, 슬래쉬(빗금) 기호로 나누기를 합니다. 여기에 설명되어 있습니다: ▶▶ 엑셀] 곱하기/나누기(곱셈/나눗셈) 방법, 윈도우 계산기와 엑셀(Excel)에서 사칙연산, Multiply / Divide


여러 셀을 한꺼번에 계산하려면 자동 채우기 등의 방법을 사용합니다: ▶▶ Excel/엑셀] 셀에 수식 자동 채우기, 수식 자동 입력 하는 법; Excel Cell AutoFill Formula

구굴이란? 그글 그굴의 의미; Ggool Site

"구굴"이나 "그글/그굴/굴굴"이 아니라, 정확한 발음은 "구글"입니다. 큰 글씨로 적으면 다음과 같습니다:

구글 (Google)

구글은 "검색 엔진"이고 쉽게 말해서 "검색 사이트"입니다. 국내 검색 업체인 "네이버"는 다 아실 겁니다. 네이버하고 비슷한 것입니다. 국내 업체는 아니고 미국 업체입니다.

한국 구글 사이트의 주소는

< http://www.google.co.kr/ >

여기입니다. 위의 주소에 보시면, 검색창 하나밖에는 없습니다. 검색창에 검색어를 넣고 Enter키를 쳐야만 검색 결과 페이지가 나옵니다.

예를 들어, 위의 사이트에서 한예슬 본명 이라고 입력하면, "김예슬이"라는 답이 나오고 그밖의 정보들도 같이 나올 것입니다.



그리고 "구글(Google)"이라는 사이트는 웹 검색만 제공하는 것이 아니라, 무료 이메일 계정이나, 무료 블로그 계정, 또한 "무료 위성 사진" 서비스도 제공합니다.

구글의 무료 위성 사진 서비스를 구글어스(Gooogle Earth) 라고 합니다.

참고: ▶▶ 구굴어스/굴굴어스/그글어스/구글어쓰 다운로드 - Gooogle Earth


Sunday, March 25, 2007

C언어] 분수 약분 함수 구현 예제 소스; Reduce a Fraction

C에서 분수를 약분하는 방법입니다. C언어에는 분수를 약분하는 함수가 없기에 직접 구현해 주어야 합니다.

int* reduceFraction(int bunja, int bunmo);
이 함수가 약분 함수인데, 분자와 분모를 인수로 넣어주면, 약분한 결과를 정수 배열로 반환합니다. 그 정수 배열에는 분자와 분모가 들어 있습니다.

분수 약분 예제


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

void printFraction(int* bunsu);
int* reduceFraction(int bunja, int bunmo);
int gcd(int a, int b);



int main(void) {

  // 5/10 (10분의 5)
  printFraction(reduceFraction(5, 10));
  // 출력 결과: 1/2

  // 1/2 (2분의 1)
  printFraction(reduceFraction(1, 2));
  // 출력 결과: 1/2

  // 2940/3150 (3150분의 2940)
  printFraction(reduceFraction(2940, 3150));
  // 출력 결과: 14/15

  // 6/63 (63분의 6)
  printFraction(reduceFraction(6, 63));
  // 출력 결과: 2/21

  // 63/6 (6분의 63)
  printFraction(reduceFraction(63, 6));
  // 출력 결과: 21/2

  // 1/1 (1분의 1)
  printFraction(reduceFraction(1, 1));
  // 출력 결과: 1/1

  // 555/555 (555분의 555)
  printFraction(reduceFraction(555, 555));
  // 출력 결과: 1/1

  // 0/1 (1분의 0)
  printFraction(reduceFraction(0, 1));
  // 출력 결과: 0/1

  // 1/0 (0분의 1)
  printFraction(reduceFraction(1, 0));
  // 출력 결과 (에러): 0/0
  // 분모가 0이 될 수는 없음

  // 0/0 (0분의 0)
  printFraction(reduceFraction(0, 0));
  // 출력 결과 (에러): 0/0



  return 0;
}




// 분수 출력 함수
// (분자 분모가 든 배열을 입력받아 출력)
void printFraction(int* bunsu) {
  printf("%d/%d\n", bunsu[0], bunsu[1]);
}




// 분수 약분 함수 (Reduce a Fraction)
// 분자 분모를 입력받아, 약분 후, 분자 분모가 든 배열을 반환
int* reduceFraction(int bunja, int bunmo) {
  static int frac[2];
  frac[0] = bunja;
  frac[1] = bunmo;

  if (frac[1] == 0) { // 분모가 0일 경우에 에러 반환
    frac[0] = NULL;
    frac[1] = NULL;

    return frac;
  }

  // 함수와 변수명을 모두 gcd 로 하면 "error C2064: term does not evaluate to a function taking 2 arguments" 이러 에러 발생함
  int gcd_result = gcd(frac[0], frac[1]);

  frac[0] = frac[0] / gcd_result;
  frac[1] = frac[1] / gcd_result;

  return frac;
}


// 최대 공약수 계산 함수
// (Euclidean Algorithm; Euclid's Algorithm)
int gcd(int a, int b) {

  while (b != 0) {
    int temp = a % b;
    a = b;
    b = temp;
  }

  return abs(a);
}



분수 약분 계산기 / 분자 분모 마이너스 부호 처리: ▶▶ 분수 약분 계산기: reduce a Frac Calc

HTML CSS] SPAN 태그의 의미, 사용법; Span Tag

SPAN 태그는 "Inline Text Container (문장 단위로 텍스트 영역을 지정하는 것)"인데, 그 자체로는 아무 역할도 하지 않고,

문장의 특정 구역에 CSS스타일을 지정할 때 사용합니다.

DIV 태그의 역할과도 비슷하지만, DIV 태그는 사각형 박스 모양으로 구역을 지정하고, SPAN은 한 문장 단위입니다.


웹페이지 중에서, 어떤 태그도 달려 있지 않은 곳에, 뭔가를 지정하기 위해서는 SPAN 태그를 사용하면 됩니다. 쉽게 말해서, SPAN 태그는 "공 태그" 즉 비어 있는 태그입니다. 이 SPAN 태그를 어떻게 사용할지는, 웹페이지 작성자의 마음에 달려 있습니다.


다음은 어떤 문장의 가운데에 있는 "뜬구름"이라는 단어의 크기를 조정합니다. "뜬구름"이라는 단어에는 다른 태그가 붙어 있지 않기에, span 태그로 감싸 준 후, span 태그에다 스타일을 지정하면 되는 것입니다.

지금은 저 <span style="font-size:24pt; line-height:1.5em">뜬구름</span>조차도 영속적인 존재로 보이고 있다.



이것은 "뜬구름"이라는 단어에 mytest 라는 아이디(ID)를 부여하는 예제입니다.

지금은 저 <span id="mytest">뜬구름</span>조차도 영속적인 존재로 보이고 있다.




HTML CSS] 글꼴을 이탤릭체로; 비스듬한 이탤릭 글자 태그; Italic Font Tag

영문 문서나 웹페이지에서, 텍스트를 강조하거나 또는 뭔가를 인용했음을 표시할 때, 이탤릭체를 사용합니다. 우측으로 경사진 글꼴입니다.

em, cite, span + CSS 등의 태그로 이탤릭체를 나타낼 수 있습니다. 다만 한글이나 한자에는 원래 이탤릭체라는 것이 없기 때문에 부자연스럽게 나오게 됩니다.

따라서 영문 문장에 영문 폰트를 지정한 경우에만 이탤릭체를 사용하는 것이 무난합니다. 다만 '맑은 고딕' 폰트는 한글도 이탤릭체가 보기 좋게 나왔습니다.

단어/텍스트를 비스듬히, 이탤릭 체로 표시 예제


파일명: example.html

<!-- 강조한다는 의미의 이탤릭체는 em 태그 사용이 좋습니다 -->
The <em>quick brown fox jumps over</em> the lazy dog.<br />
지금은 어쩐지 저 <em>뜬구름조차도</em> 영속적인 존재로 보이고 있다.<br /><br />


<!-- 인용한다는 의미의 이탤릭체는 cite 태그 사용이 좋습니다 -->
The <cite>quick brown fox jumps over</cite> the lazy dog.<br />
지금은 어쩐지 저 <cite>뜬구름조차도</cite> 영속적인 존재로 보이고 있다.<br /><br />


<!-- 또는 CSS스타일 시트를 직접 지정할 수도 있습니다 -->
The <span style="font-style:italic">quick brown fox jumps over</span> the lazy dog.<br />
지금은 어쩐지 저 <span style="font-style:italic">뜬구름조차도</span> 영속적인 존재로 보이고 있다.<br /><br />


<!-- i (아이) 태그는 최신 웹표준에 맞지 않습니다 -->
The <i>quick brown fox jumps over</i> the lazy dog.<br />
지금은 어쩐지 저 <i>뜬구름조차도</i> 영속적인 존재로 보이고 있다.<br /><br />




브라우저 출력 결과 화면:
(4가지 태그 모두, 단어가 이탤릭체로 나옵니다)
The quick brown fox jumps over the lazy dog.
지금은 어쩐지 저 뜬구름조차도 영속적인 존재로 보이고 있다.

The quick brown fox jumps over the lazy dog.
지금은 어쩐지 저 뜬구름조차도 영속적인 존재로 보이고 있다.

The quick brown fox jumps over the lazy dog.
지금은 어쩐지 저 뜬구름조차도 영속적인 존재로 보이고 있다.

The quick brown fox jumps over the lazy dog.
지금은 어쩐지 저 뜬구름조차도 영속적인 존재로 보이고 있다.



▶▶ HTML CSS] 글꼴을 굵게 진하게; 굵은 글자, 단어 강조 태그, 볼드체; Bold Font Tag

Java 자바] 분수 약분 메서드/함수 구현; Reduce a Fraction

자바에서 분수를 약분하는 방법입니다. 자바 내부적으로는 분수 약분을 지원하지 않았습니다.

아래 소스의
public static int[] reduceFraction(int bunja, int bunmo)
라는 메소드(함수)가 분수를 약분합니다.

분수 약분 예제


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

    // 5/10 (10분의 5)
    printFraction(reduceFraction(5, 10));
    // 출력 결과: 1/2

    // 1/2 (2분의 1)
    printFraction(reduceFraction(1, 2));
    // 출력 결과: 1/2

    // 2940/3150 (3150분의 2940)
    printFraction(reduceFraction(2940, 3150));
    // 출력 결과: 14/15

    // 6/63 (63분의 6)
    printFraction(reduceFraction(6, 63));
    // 출력 결과: 2/21

    // 63/6 (6분의 63)
    printFraction(reduceFraction(63, 6));
    // 출력 결과: 21/2

    // 1/1 (1분의 1)
    printFraction(reduceFraction(1, 1));
    // 출력 결과: 1/1

    // 555/555 (555분의 555)
    printFraction(reduceFraction(555, 555));
    // 출력 결과: 1/1

    // 0/1 (1분의 0)
    printFraction(reduceFraction(0, 1));
    // 출력 결과: 0/1

    // 1/0 (0분의 1)
    printFraction(reduceFraction(1, 0));
    // 출력 결과 (에러): 0/0
    // 분모가 0이 될 수는 없음

    // 0/0 (0분의 0)
    printFraction(reduceFraction(0, 0));
    // 출력 결과 (에러): 0/0

  }




  // 분수 출력 함수
  // (분자 분모가 든 배열을 입력받아 출력)
  public static void printFraction(int[] bunsu) {
    System.out.format("%d/%d%n", bunsu[0], bunsu[1]);
  }




  // 분수 약분 함수 (Reduce a Fraction)
  // 분자 분모를 입력받아, 약분 후, 분자 분모가 든 배열을 반환
  public static int[] reduceFraction(int bunja, int bunmo) {
    int[] frac = new int[2];
    frac[0] = bunja;
    frac[1] = bunmo;

    if (frac[1] == 0) { // 분모가 0일 경우에 에러 반환
      frac[0] = 0;
      frac[1] = 0;
      return frac;
    }

    int gcd_result = gcd(frac[0], frac[1]);

    frac[0] = frac[0] / gcd_result;
    frac[1] = frac[1] / gcd_result;

    return frac;
  }




  // 최대 공약수 계산 메서드
  // (Euclidean Algorithm; Euclid's Algorithm)
  public static int gcd(int a, int b) {

    while (b != 0) {
      int temp = a % b;
      a = b;
      b = temp;
    }

    return Math.abs(a);
  }


}



분수 약분 계산기 / 분자 분모 마이너스 부호 처리: ▶▶ 분수 약분 계산기: reduce a Frac Calc

구글 검색창에서 검색 기록 지우는 방법, 이전 검색어 저장 목록 삭제; Delete Google Search History

요즘 국내 검색 사이트의 검색창에 검색어를 입력하면, 추천 검색어가 나옵니다. 그러나 구글은 이전에 검색했던 검색어들이 첫글자순으로 나옵니다. 이런 것을 "자동 완성"이라고 합니다. 이것은 구글의 기능이 아니라, 인터넷 브라우저의 기능입니다.

다음은 인터넷 익스플로러에서, 구글 검색 기록은 물론, 다른 모든 사이트의 입력창에 입력했던 기록들까지 깨끗이 삭제하는 방법입니다. 가령 쇼핑몰 사이트의 입력 칸에 입력했던 개인정보들까지도 지울 수 있습니다. (물론 쇼핑몰 서버에 보낸 개인정보를 지울 수 있다는 뜻은 아닙니다. 어디까지나 자신의 컴퓨터 차원의 삭제입니다.)

구글 검색창 글씨 지우는 방법


IE 메뉴: 도구 > 인터넷 옵션
으로 "인터넷 옵션" 대화상자를 엽니다.

내용 탭을 누르고 자동 완성 이라는 버튼을 누릅니다.
"자동 완성 설정"이라는 대화상자가 나옵니다.

폼 지우기 버튼을 누르면,

---------------------------
인터넷 옵션
---------------------------
암호를 제외하고 이전에 저장된 모든 폼 항목을 지우시겠습니까?
---------------------------
확인 취소
---------------------------

위의 대화상자가 나오고, "확인" 버튼만 누르면 입력창의 검색 기록이 모두 삭제됩니다. (암호 지우기 버튼을 누르면 로그인했던 사이트들에 입력했던 암호들까지 다 지워집니다.)


이제 구글 등의 검색창에서, "아래쪽 화살표키"를 눌러도 아무것도 나오지 않을 것입니다.

그렇지만 새로 입력하는 검색어들은 다시 기록이 됩니다.



검색어 '자동 완성'되지 않게 설정하는 법


위의 폼 지우기 버튼이 있는 대화상자에서,

자동 완성 사용 대상 >
을 체크 해제 (OFF) 하면 됩니다. 그러면 더 이상 검색 기록이 브라우저에 저장되지 않습니다. 보안에는 좋지만 좀 불편하겠지요.




VI 와 VIM 차이, '빔'과 '브이 아이' 에디터 차이점; Unix Editor Difference

유닉스의 기본 편집기인 VI 에디터를 개량한 버전이, 바로 VIM (빔) 에디터입니다. 따라서 본질적인 차이는 없습니다.

VIM 은, "Vi IMproved (향상된 Vi)"의 약자입니다.


그런데 VI 는 텍스트 편집에 필요한 최소한의 기능만을 가지고 있어서 사용하기에 불편합니다. VI 에는 "문법 강조" 같은 기능도 없습니다.

반면 VIM 은 윈도우의 울트라에디트만큼이나 강력한 기능들이 많이 추가되어 있습니다. 따라서 편리합니다.

리눅스에는 vim 에디터만 설치되어 있습니다. 소문자로 vi 라고 치면 vim 이 실행되고, vim 이라고 쳐도 vim 이 실행됩니다. 리눅스에서는 vi를 쓸지 vim을 쓸지 고민하지 않아도 됩니다. 둘다 똑같은 것입니다.



다만, 유닉스 시스템에는 아직도 vi 가 설치되어 있을 것입니다. (솔라리스 10에도 vi만 있음)

vim 안에는 vi 의 기능들도 다 포함되어 있기에, 유닉스를 다룬다고 하더라도 vi 를 따로 익힐 필요는 없습니다.



그리고 윈도우용 VIM 도 있지만 윈도우용 VI (진짜 VI)는 없습니다: ▶▶ Vim (VI; 빔) 과 GVim 소개 [리눅스와 윈도우용의 오픈소스/무료 텍스트 에디터]



Saturday, March 24, 2007

Python 파이썬] 분수 약분 방법을 함수로 구현; Reduce a Fraction

파이썬은 수학에 강한 언어이지만, 분수를 약분하는 함수는 없었습니다.

분수를 약분하는 함수를 만드는 방법입니다. 아래의 reduceFraction 이라는 함수가 완성된 결과입니다.

참고로 컴퓨터에서는 분수 "2분의 1"을, "1/2"로 표현합니다.

분수 약분 예제
스크립트 파일명: example.py
#!/usr/bin/python
# -*- coding: cp949 -*-

# 분수 출력 함수
# (분자 분모가 든 리스트 입력받아 출력)
def printFraction(bunsu):
  print "%d/%d" % (bunsu[0], bunsu[1])




# 최대 공약수 계산 메서드
# (Euclidean Algorithm; Euclid's Algorithm)
def gcd(a, b):
  while (b != 0):
    temp = a % b
    a = b
    b = temp
  return abs(a)




# 분수 약분 함수 (Reduce a Fraction)
# 분자 분모를 입력받아, 약분 후, 분자 분모가 든 배열을 반환
def reduceFraction(bunja, bunmo):
  frac = [ bunja, bunmo ]

  if (frac[1] == 0): # 분모가 0일 경우에 에러 반환
    frac[0] = 0
    frac[1] = 0
    return frac

  gcd_result = gcd(frac[0], frac[1])

  frac[0] = frac[0] / gcd_result
  frac[1] = frac[1] / gcd_result

  return frac



########## 여기 이하부터는 약분 테스트 ###########


# 5/10 (10분의 5)
printFraction(reduceFraction(5, 10));
# 출력 결과: 1/2

# 1/2 (2분의 1)
printFraction(reduceFraction(1, 2));
# 출력 결과: 1/2

# 2940/3150 (3150분의 2940)
printFraction(reduceFraction(2940, 3150));
# 출력 결과: 14/15

# 6/63 (63분의 6)
printFraction(reduceFraction(6, 63));
# 출력 결과: 2/21

# 63/6 (6분의 63)
printFraction(reduceFraction(63, 6));
# 출력 결과: 21/2

# 1/1 (1분의 1)
printFraction(reduceFraction(1, 1));
# 출력 결과: 1/1

# 555/555 (555분의 555)
printFraction(reduceFraction(555, 555));
# 출력 결과: 1/1

# 0/1 (1분의 0)
printFraction(reduceFraction(0, 1));
# 출력 결과: 0/1

# 1/0 (0분의 1)
printFraction(reduceFraction(1, 0));
# 출력 결과 (에러): 0/0
# 분모가 0이 될 수는 없음

# 0/0 (0분의 0)
printFraction(reduceFraction(0, 0));
# 출력 결과 (에러): 0/0




분수 약분 계산기 / 분자 분모 마이너스 부호 처리: ▶▶ 분수 약분 계산기: reduce a Frac Calc

디카] 캐논 풀사이즈 CMOS 센서 실물 사진; DSLR Canon Full Size

보통 디카에 있는 촬상소자(CCD나 CMOS)는, 크기가 작습니다.

캐논 DSLR은 22.5x15.0mm ~ 22.2x14.8mm
니콘 DSLR은 23.6x15.8mm 정도

그래서 옛날의 렌즈를 부착하면 초점 거리가 1.3 ~ 1.5배 정도 증가하여, 광각렌즈는 표준렌즈에 가까워지고, 표준 렌즈는 장초점 렌즈가 되어 버립니다.

만약 촬상소자의 면적이 진짜 35mm 필름과 같다면, 옛날 렌즈도 제대로 사용할 수 있습니다.

캐논에서 그런 것을 만들고 있습니다. 아래 사진과 같습니다.

Canon Full Size CMOS

EOS-1Ds Mark II, CMOS (즉, '전자 필름'입니다.)

약 1670만 화소의 CMOS 이고, 위의 사진은 EOS-1Ds Mark II 기종에 탑재되어 있습니다. 전통적인 35미리 리버셜 필름을 완전히 대체할 수 있는 것입니다.

위의 기종으로 촬영한 샘플 사진이 이 주소에 있습니다:
< EOS-1Ds Mark II 촬영 샘플 갤러리 >

마치 중형 카메라로 찍은 듯한 엄청난 디테일입니다. 전통적인 35미리 필름으로는 이렇게 세부까지 표현할 수는 없습니다.

다만 사진 한 장의 크기가 JPG 로 압축해도 무려 10메가가 넘는군요.


그리고 전문가용으로 만든 카메라라서, 대중적인 가격으로 내려가려면 앞으로도 몇 년이 더 걸려야 할 것 같습니다.


커피 녹차 홍차 박카스, 카페인의 차이, Coffee / Green Tea Caffeine 차이점

아침부터 기운도 없고 해서 커피 한 잔을 마셨더니 조금 나아졌습니다. 커피를 마시면 깊은 잠을 잘 수 없어서 끊으려고 했는데 오늘도 실패입니다. 커피를 대체하기 위해서 녹차를 마시려고 했지만 고급 녹차를 구하기 힘들어서 좀 곤란하더군요.

커피


기분이 좋아지고 몸이 따뜻해짐. 우울증 치료에 도움이 될 듯. 녹차와 달리, 정신이 그다지 맑아지지는 않음. 특히 프리마를 넣으면 오히려 정신이 탁해져 버림. (제가 요즘에 커피에 중독이 된 것 같습니다. 며칠 커피를 끊었더니 기분이 우울해지고 무기력해지는군요. 예전에는 커피 없이도 우울함을 느끼지 못했는데...)


녹차


기분이 좋아지지는 않음. 다만, 정신이 맑고 또렷해짐. 몸이 따뜻해지지 않음. 찻잎이 찬 성질을 가지고 있어서 그런 듯함.
(티백에 든 녹차는 진짜 녹차라고 할 수도 없지요. 향기도 없고 맛도 없고 심지어 카페인도 없었습니다. 제가 보기로 맹물이나 다름 없었습니다.)


홍차


기분이 별로 좋아지지도, 정신이 별로 맑아지지도 않음. 홍차에 탄 설탕 같은 것 때문일 수도 있음.
(한 잔에 몇 만원하는 홍차라면 모르겠지만, 영국제 립톤 홍차는 제가 어릴 적 먹어본 분말 홍차보다도 더 맛이 없었습니다.)


박카스


기분이 좋아진다기보다는 흥분시키는 편임. 정신도 맑아지는 편임. 그러나 너무 카페인이 강해서 자주 마시기 부담스러움. 박카스는 음료가 아닌 어디까지나 약품임. 카페인이 없는 박카스도 출시되었지만 맛이 없고 별다른 효과도 없었음.
(등산 같은 것을 하면 근육이 뭉쳐서 일주일 정도 다리가 계속 아픈데, 박카스 한 병을 먹고 자면 다음날 거뜬합니다. 그렇지만 평소에도 자주 마시면 수면에 방해가 되더군요.)



Friday, March 23, 2007

Perl 펄] 분수 약분 함수 구현; Reduce a Fraction

분수를 약분하는 함수를 만드는 방법입니다. 아래의 reduceFraction 이라는 함수가 완성된 결과입니다.

참고로 컴퓨터에서는 분수 "2분의 1"을, "1/2"로 표현합니다.

분수 약분 예제


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

  # 5/10 (10분의 5)
  printFraction(reduceFraction(5, 10));
  # 출력 결과: 1/2

  # 1/2 (2분의 1)
  printFraction(reduceFraction(1, 2));
  # 출력 결과: 1/2

  # 2940/3150 (3150분의 2940)
  printFraction(reduceFraction(2940, 3150));
  # 출력 결과: 14/15

  # 6/63 (63분의 6)
  printFraction(reduceFraction(6, 63));
  # 출력 결과: 2/21

  # 63/6 (6분의 63)
  printFraction(reduceFraction(63, 6));
  # 출력 결과: 21/2

  # 1/1 (1분의 1)
  printFraction(reduceFraction(1, 1));
  # 출력 결과: 1/1

  # 555/555 (555분의 555)
  printFraction(reduceFraction(555, 555));
  # 출력 결과: 1/1

  # 0/1 (1분의 0)
  printFraction(reduceFraction(0, 1));
  # 출력 결과: 0/1

  # 1/0 (0분의 1)
  printFraction(reduceFraction(1, 0));
  # 출력 결과 (에러): NaN/NaN

  # 0/0 (0분의 0)
  printFraction(reduceFraction(0, 0));
  # 출력 결과 (에러): NaN/NaN




# 분수 출력 함수
# (분자 분모가 든 배열을 입력받아 출력)
sub printFraction {
  print $_[0], "/", $_[1], "\n";
}


# 분수 약분 함수 (Reduce a Fraction)
# 분자 분모를 입력받아, 약분 후, 분자 분모가 든 배열을 반환
sub reduceFraction {
  my @frac = @_;
  if ($frac[1] == 0) { return "NaN", "NaN"; } # 분모가 0일 경우에 에러 반환

  my $gcd = gcd(@frac);

  return ($frac[0] / $gcd, $frac[1] / $gcd);
}


# 최대 공약수 계산 함수
sub gcd {
  my $a = $_[0];
  my $b = $_[1];

  while ($b != 0) {
    my $temp = $a % $b;
    $a = $b;
    $b = $temp;
  }

  return abs($a);
}



분수 약분 계산기 / 분자 분모 마이너스 부호 처리: ▶▶ 분수 약분 계산기: reduce a Frac Calc

Perl 펄] 최대 공약수 구하기 함수, 유클리드 호제법; GCD, Euclidean Algorithm

펄로 최대공약수(GCD; Greatest Common Divisor)를 구하는 방법입니다. 펄에는 그런 함수가 내장되어 있지 않기에, 유클리드 호제법(Euclidean Algorithm)이라는 알고리즘으로 함수를 만들었습니다.

최대공약수 함수 예제; Greatest Common Divisor Function


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

  print gcd(12, 18), "\n";
  # 6

  print gcd(5154, 3435), "\n";
  # 3

  print gcd(0, 0), "\n";
  # 0
  # 이 경우는 0으로 정의되어 있음

  print gcd(1, 0), "\n";
  # 1
  # 이것도 맞습니다.

  print gcd(0, 12), "\n";
  # 12
  # 이것도 맞습니다.

  print gcd(13, 12), "\n";
  # 1
  # 공약수가 1밖에 없는 '서로소(Relatively Prime; Coprime)'

  print gcd(-42, -56), "\n";
  # 14
  # 최대공약수는 항상 양수임

  # 세 가지 수의 최대공약수 구하기
  print gcd(gcd(42, 12), 48), "\n";
  # 6





# 최대 공약수 계산 함수
sub gcd {
  my $a = $_[0];
  my $b = $_[1];

  while ($b != 0) {
    my $temp = $a % $b;
    $a = $b;
    $b = $temp;
  }

  return abs($a);
}



▶▶ Perl 펄] 최소 공배수 구하기 함수; LCM; Least Common Multiple

C언어] gets, fgets 함수로, 키보드 문자(문자열) 입력 받기; String Input

gets 는 입력받는 문자열 길이를 제한할 수 없어서 보안에 취약하므로.
fgets() 함수를 사용해야 합니다.

fgets() 는 텍스트 파일을 1행씩 읽을 때 사용하지만, 표준입력 쉽게 말해서 키보드 입력도 일종의 "가상 파일"이기에
stdin 이라는 이름을 지정하면, 키보드를 파일 삼아 읽을 수 있습니다.


사용자 문자열 입력 예제 소스


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

int main(void) {

  // 끝의 "+ 1" 은 null 문자 1개의 길이
  // 실제는 총50바이트의 문자열
  char s[50 + 1];

  printf("아무 문자열이나 입력하세요: ");
  fgets(s, sizeof(s), stdin);
  printf("방금 입력받은 문자열: %s\n", s);


  return 0;
}



컴파일 및 실행 결과 화면:
D:\Z>cl /nologo example.cpp && example.exe
example.cpp
아무 문자열이나 입력하세요: eehwhwh
방금 입력받은 문자열: eehwhwh


D:\Z>cl /nologo example.cpp && example.exe
example.cpp
아무 문자열이나 입력하세요: egegeegegeegegeggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggg
방금 입력받은 문자열: egegeegegeegegeggggggggggggggggggggggggggggggggggg

D:\Z>






fgets 개행문자 없이


위의 소스의 경우에는 입력받은 문자열 끝에 개행문자가 붙어 있습니다.

이 소스는 그 개행문자를 지웁니다.

#include <stdio.h>
#include <string.h> // strlen()

int main(void) {

  // 끝의 개행문자 2개의 공간 포함
  // 실제는 총50바이트의 문자열
  char s[50 + 2];

  printf("아무 문자열이나 입력하세요: ");
  fgets(s, sizeof(s), stdin);

  // fgets 는 개행문자를 붙이기에
  // 개행문자를 제거해야 함
  s[strlen(s)-1] = '\0';

  printf("방금 입력받은 문자열: <%s>\n", s);


  return 0;
}




C언어] scanf 함수로, 문자열/정수/실수 입력 받기; scanf Function Input

scanf 함수를 사용하여, 사용자로부터 문자(문자열)나 숫자를 입력 받는 예제 소스입니다.

입력받은 숫자를 숫자로 변환하지 않아도 자동으로 숫자가 됩니다.

키보드로부터 입력을 받는 방법은 이 외에 여러 가지가 있습니다.

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

int main(void) {

  // 200바이트의 문자열이 저장되는 배열
  // 배열의 끝을 알리는 NULL 문자 1개의 공간이 필요하기에 200 + 1 = 201
  char s[201];

  int i;
  double d;




/* 문자열 입력받기 */
  printf("\n\n아무 문자열이나 200바이트까지 입력: ");
  // "%s" 이렇게 문자열 길이를 지정 않으면 보안에 취약하므로 "%200s" 이렇게 길이 지정.
  // 또는 안전한 버전인 scanf_s() 를 대신 사용하면 됨.
  scanf("%200s", s);
  fflush(stdin);  // 입력 버퍼 청소

  printf("OK: %s\n", s);



/* 정수 입력 */
  printf("아무 정수 입력: ");
  // i 가 아닌, &i 이렇게,
  // 변수의 포인터를 파라미터로 입력해야 합니다.
  scanf("%d", &i);
  fflush(stdin);

  printf("OK: %d\n", i);




/* 실수 입력 */
  printf("아무 실수나 입력: ");
  scanf("%lf", &d); // "%f"가 아닌 "%lf"라고 해야 함
  fflush(stdin);

  printf("OK: %f\n", d);


  return 0;
}


컴파일 및 실행 결과 화면:
D:\Z>cl /nologo example.cpp && example.exe
example.cpp


아무 문자열이나 200바이트까지 입력: HSHSHSHSFHFHFHF
OK: HSHSHSHSFHFHFHF
아무 정수 입력: 1212121
OK: 1212121
아무 실수나 입력: 1514.545
OK: 1514.545000

D:\Z>



문자열 입력은 이 방법이 더 좋습니다: ▶▶ C언어] gets, fgets 함수로, 키보드 문자(문자열) 입력 받기; String Input

파일 개수 세기 도스 명령어; File Counter DOS Command

도스에는 파일 개수를 세는 명령이 따로 없습니다. 그렇지만 DIR 명령을 실행하면, 출력 결과 맨 밑에 파일 개수와 디렉토리(폴더) 개수가 표시됩니다.

다만 DIR 명령은 기본적으로, 히든파일(숨김파일)은 보여주지 않기에 반드시
/a
라는 옵션을 붙여서 모든 파일이 나오게 해야 정확한 파일 개수를 알 수 있습니다.

그리고 /w 라는 옵션을 붙이면, 좀더 간략하게 출력됩니다. 다음 화면과 같습니다.

D:\Z>dir /a /w
 D 드라이브의 볼륨: Foo
 볼륨 일련 번호: 4873-A635

 D:\Z 디렉터리

[.]              [..]             1.html           example.bat
Example.class    example.cpp      example.exe      example.html
Example.java     example.obj      example.php      example.pl
example.py       example.txt      example1.cpp     example1.exe
example1.html    example1.obj     example1.pl      Example2.class
example2.pl      out.txt          test.txt         tt
ttt              _del.bat
              24개 파일         105,798 바이트
               2 디렉터리  52,495,368,192 바이트 남음

D:\Z>


위의 경우, 서브-디렉토리가 하나도 없는 디렉토리에서 DIR 명령을 실행했지만, 디렉토리가 2개 있다고 나오고 있습니다.

이것은 [.] 과 [..] 이라는 디렉토리까지 포함한 것입니다.

[.] 은, 현재 디렉토리 그 자체이고
[..] 은, 상위 디렉토리입니다.

따라서 이 경우에는, 디렉토리 개수에서 2를 빼야, 실제의 정확한 디렉토리 개수가 나옵니다.



dir 명령에 대한 도움말을 보려면

dir /?

라고 하면 됩니다.


Thursday, March 22, 2007

매스매티카] 허수 단위 i 입력 방법; Mathematica IMAGINARY UNIT Input

수학에서는 허수 단위 (Imaginary Unit) 를 소문자 i (아이) 로 표현하지만, 매스매티카에서는 반드시 대문자 I (아이) 로 입력해야 합니다.

매스매티카에서 소문자 아이는 그냥 일반 변수일 뿐입니다.

대문자 아이를
I
이렇게 입력하면

소문자 아이의 변형된 형태로 허수 단위 기호가 표시됩니다.


I^2
이렇게 I (대문자 아이) 를 제곱해 보면

-1
이렇게 "마이너스 일"이라는 답이 나오기에, I (대문자 아이) 가 허수라는 사실을 알 수 있습니다.




허수 단위 기호를 직접 입력하려면

우선 키보드의 Esc키를 누른 후, 소문자 아이를 2번 이어서 적고, 다시 Esc키를 누르면 됩니다.

<Esc>ii<Esc>
이런 식입니다. 이 경우에는 대문자가 아니라 소문자로 해야 합니다.



매스매티카] 루트 근사값, 제곱근 구하기 함수 사용법; Mathematica Square Root Function

매스매티카에서는 Sqrt[] 함수로 제곱근을 구할 수 있습니다. 반드시 첫글자 S만 대문자여야 합니다.

Sqrt[2]
이렇게 입력하고, Shift+Enter키 또는 키패드의 Enter키를 누르면

√2
이렇게 2에 근호만 붙어서 나옵니다.


루트2의 근사값을 구하려면

Sqrt[2.]
이렇게 2 뒤에 마침표를 하나 찍어 주면

1.41421
이렇게 출력됩니다.


또는 N 이라는 함수/명령어를 사용하면
N[Sqrt[2]]

1.41421
이렇게 출력됩니다.


"// N"을 뒤에 붙여도
Sqrt[2] // N

1.41421
같은 결과가 나옵니다.


정밀도 높은 근사값을 구하려면, 가령 정수부와 소수부 포함하여 30자리까지 구하려면, N의 두 번째 인수에 자릿수를 지정합니다.
N[Sqrt[2], 30]

1.41421356237309504880168872421
이런 결과가 나옵니다. 소수점 이하는 29자리이고, 앞의 정수부 1까지 포함하여 30자리입니다.



또한 변수 x를 선언하고
x=3

변수를 인수로 넣어주어도 됩니다.
Sqrt[x] // N


1.73205
루트 3의 근사값이 나왔습니다.



▶▶ 매스매티카] 제곱 함수, 기호, 거듭제곱(세제곱,네제곱); Mathematica Pow-Power



Java 자바] 정수 숫자 입력 받기, 16진수 헥사 입력; Input Hex Int Number Only

키보드에서 사용자로부터, 10진수와 16진수 정수 숫자를 입력받는 방법입니다.

사용자가 만약 정수가 아닌 실수나 문자열을 입력했다면, 바른 정수를 입력할 때까지 계속 루프를 돌리며 다시 입력을 받습니다.

키보드에서 십진수, 십육진수 정수 입력 받는 예제


소스 파일명: Example.java
import java.util.*;

public class Example {
  public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    int i;


    ///////////////////////////////////////////////
    // 10진수 정수만 입력 받기

    System.out.print("정수를 입력하세요: ");


    // 정수를 올바르게 입력하면 hasNextInt() 가 true/참을 반환하기에
    // while 루프가 실행되지 않음
    while (!sc.hasNextInt()) {
      sc.next(); // 에러일 경우, 방금 입력받은 값 무시
      System.err.print("에러! 올바른 정수를 다시 입력바랍니다: ");
    }


    i = sc.nextInt();
    System.out.println("OK, 입력된 정수: " + i);





    ///////////////////////////////////////////////
    // 16진수(HEX) 정수만 입력 받기, "0x"는 없어야 함

    System.out.print("16진수를 입력하세요: ");

    while (!sc.hasNextInt(16)) {
      sc.next();
      System.err.print("에러! 다시 입력바랍니다: ");
    }

    System.out.format("OK, 입력된 16진수: %X%n", sc.nextInt(16));


  }
}


잘못된 입력을 try...catch 문으로 처리하면, 다시 입력받기 곤란하더군요.


컴파일 및 실행 결과 화면:
D:\Z>javac Example.java && java Example
정수를 입력하세요: tge
에러! 올바른 정수를 다시 입력바랍니다: etew
에러! 올바른 정수를 다시 입력바랍니다: 145.84
에러! 올바른 정수를 다시 입력바랍니다: 145
OK, 입력된 정수: 145
16진수를 입력하세요: sdhs
에러! 다시 입력바랍니다: 155.452
에러! 다시 입력바랍니다: FF
OK, 입력된 16진수: FF

D:\Z>



실수 입력 받기: ▶▶ Java 자바] 실수 입력 받기, 키보드로, 에러 처리 루프; Input Float Number Loop


▶▶ Java/자바] 키보드 입력; 사용자 문자열/숫자 입력 받기; User Input String, Number

Java 자바] 실수 입력 받기, 키보드로, 에러 처리 루프; Input Float Number Loop

키보드에서 사용자로부터 double형 실수 숫자 (정수도 포함)를 입력받는 법입니다. 다만, 사용자가 제대로 된 숫자가 아닌 문자열 등을 잘못 입력했을 때에는, 올바른 값을 입력할 때까지 루프를 돌리며, 계속 다시 입력받습니다.

사용자로부터 double형 숫자 입력 받는 예제


소스 파일명: Example.java
import java.util.*;

public class Example {
  public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    System.out.print("실수를 입력하세요, 정수도 가능: ");


    // 제대로 된 숫자를 입력하지 않은 경우
    // 되풀이하여 입력받기
    while (!sc.hasNextDouble()) {
      sc.next(); // 잘못된 입력 값 버리기
      System.err.print("에러! 다시 입력바랍니다: ");
    }


    // 입력받은 숫자를 변수에 저장
    double d = sc.nextDouble();
    System.out.println("OK, 입력된 실수: " + d);


  }
}


try...catch 로는 이런 에러를 처리할 수가 없더군요.

간단한 소스에서는 그냥 nextDouble() 로 입력받지만,

위의 소스의 경우는 에러 처리 과정 때문에, hasNextDouble() 로 입력을 받고
nextDouble() 은 입력받은 값을 변수에 저장만 할 뿐, 입력을 받지는 않습니다.


컴파일 및 실행 결과 화면:
D:\Z>javac Example.java && java Example
실수를 입력하세요, 정수도 가능: tetea
에러! 다시 입력바랍니다: -+534
에러! 다시 입력바랍니다: ..
에러! 다시 입력바랍니다: .
에러! 다시 입력바랍니다: 55..55
에러! 다시 입력바랍니다: 100.00
OK, 입력된 실수: 100.0

D:\Z>


정수만 입력 받기: ▶▶ Java 자바] 정수 숫자 입력 받기, 16진수 헥사 입력; Input Hex Int Number Only

▶▶ Java/자바] 키보드 입력; 사용자 문자열/숫자 입력 받기; User Input String, Number


동영상 비디오 파일 포맷 확장자 종류 설명, Movie File Extension

현재 쓰이는 동영상 포맷은 다음과 같이 여러 종류가 있습니다. 인기가 높은 포맷(형식) 순으로 설명합니다. 다만, 동영상 파일은 확장자가 동일해도 그 내부 형식은 전혀 다른 경우가 많습니다. 원본 동영상을 압축하는 데 사용한 코덱의 종류와 버전이 다양하기 때문입니다.


.AVI / (DivX AVI)
"Audio Video Interleave"의 약자. MS에서 처음으로 만든 포맷. 확장자는 AVI라도, 어떤 코덱으로 인코딩했느냐에 따라서 실제 형식은 여러가지가 있습니다.

옛날의 AVI는 압축이 거의 되지 않아서 짧은 동영상도 엄청난 크기를 가지고 있었습니다. 그렇지만 현재 AVI 동영상들은 비교적 작은 크기에도 고화질 영화 한편이 들어갑니다. DivX 로 인코딩했기 때문입니다. DivX AVI 는 현재 가장 인기가 높습니다.



.MPG / .MPEG / .MPE
"Moving Picture Experts Group"의 약자. 엠펙이라고도 부릅니다. 가장 평범하고 호환성이 좋은 동영상 포맷입니다. 사양이 낮은 컴퓨터에서도 잘 재생됩니다. 그러나 압축률이 낮아서 인기가 조금씩 떨어지고 있습니다.



.WMV / .ASF / .ASX /
이 3가지는 MS에서 개발한 것이고 사실상 같은 파일입니다. (다만 ASX는 동영상 파일이 아니라 동영상 파일이 플레이되는 목록이 들어 있는 파일입니다.) 실시간 전송 동영상에 적합한 정도이고, 그리 고화질은 기대할 수 없습니다.



.FLV
Flash Video (플래시 비디오)인데, 동영상 공유 사이트인 유튜브에서 기본적으로 사용합니다. 화질이 나빠서 그 외에는 쓰는 곳이 별로 없더군요. 참고: ▶▶ 유튜브 동영상 파일(FLV, SWF) 다운로드 받기; YouTube uTube File Download



.RM
리얼 플레이어에서 재생되는 형식. 지금은 거의 쓰이지 않고 특히 국내에서는 전혀 쓰이지 않습니다.


.MOV
맥(Mac)에서 사용되는 AVI 비슷한 포맷입니다. QuickTime Player 를 설치해야 볼 수 있습니다. 국내에서는 전혀 쓰이지 않고 일본에서는 가끔 쓰입니다. 일본에는 맥 유저들이 많아서 그럴 것입니다.


.DAT
Video CD (비디오CD)에 들어 있는 엠펙(MPG) 파일의 확장자입니다.



▶▶ 음악 파일 종류 / 오디오, 소리 파일 확장자 - Music, Sound File Format Extension

Wednesday, March 21, 2007

C에서 printf 함수로, double, float, int, unsigned int 출력

C의 printf() 함수로 각종 자료형의 숫자를 출력하는 방법입니다. 퍼센트 기호 뒤에 소문자 에프를
%f
이렇게 적어주면, double형 실수를 출력할 수 있습니다. float형 실수도 마찬가지인데, 요즘 컴퓨터에는 메모리가 충분하기 때문에 float형은 잘 쓰지 않습니다.

int형 정수는 "%d"

unsigned int 같은 부호 없는 정수형은 "%u" 이렇게 합니다. 이런 것을 "형식 지정자"라고 부릅니다.

printf로, double... 출력 예제


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


int main(void) {


  double d = 123.445;
  printf("%f\n", d);


  float f = 25.3f;
  printf("%f\n", f);


  int i = -10;
  printf("%d\n", i);


  unsigned int ui = 365;
  printf("%u\n", ui);



  return 0;
}



위의 예제 소스 컴파일 및 실행 결과 화면:
D:\Z>cl /nologo example.cpp && example.exe
example.cpp
123.445000
25.299999
-10
365

D:\Z>



더 자세한 사용법은 다음 게시물에 있습니다:

▶▶ C언어/Perl] printf() 함수의 포맷 스트링 %s, %d - Format Specifier

▶▶ C언어] printf함수, 실수 소수점 자리, 너비 지정 출력 + 루트 계산 - Square Root

C언어] switch 문 (스위치) 사용법 예제; switch-case-default Statement x함수

switch문이란, 조건문의 일종인데, 여러 개의 if~else 문을 대신하여 간결하게 작성할 때 사용하는 것입니다. if~else 문이 중첩되어 있으면 가독성이 떨어지기 때문에 스위치문이 필요합니다.

그러나 switch문 다음의 괄호()에는 "i <= 0" 이런 식의 판단문이 들어갈 수는 없고, 정수형이나 문자형(char)의 숫자만 들어갈 수 있는 제약이 있습니다. double 등의 실수는 안되고 error C2450: switch expression of type 'double' is illegal 이런 에러가 납니다.

switch는 "함수"가 아니고 "키워드"입니다.

  switch (정수) {
    case 상수 : 실행문; break;
    case 상수 : 실행문; break;
    case 상수 : 실행문; break;
    case 상수 : 실행문; break;

    default : 실행문; break;
  }


스위치문에서 주의해야 할 점은 각 case문 끝에 break; 를 꼭 붙여야 한다는 것입니다. break; 가 없으면, 그 아래쪽의 case문들까지 모두 실행되어 버립니다. break;를 만날 때까지 멈추지 않고 계속 실행됩니다.

의도적으로 break;를 생략한 경우가 아니라, 실수로 누락했을 때는 소스가 폭주하여 위험한 에러가 발생할 수 있습니다. 따라서 우선 무조건 break;를 붙여 놓고 소스의 흐름을 검토하는 것이 안전합니다.

default 라는 것은, 위의 case문들 중에서 어느 것도 해당되지 않을 때 실행할 코드입니다. 필요하지 않다면 default문이 없어도 됩니다.


switch문 사용 방법 예제 소스


소스 파일명: example.cpp
(※ 스크롤 박스 사용법: 박스 안을 마우스로 클릭한 후, 키보드의 좌우 화살표키를 누르면 양옆으로 움직일 수 있습니다. 박스에서 다시 나오려면, 박스 바깥의 아무곳이나 클릭하면 됩니다.)
#include <stdio.h>
#include <conio.h> // getch()
#include <ctype.h> // tolower()


int main(void) {

  int i = 1;

/*
i 의 값이 1일 경우에는 "자장면"이 출력
i 의 값이 2일 경우에는 break가 없기에
군만두"와 "탕수육"이 한꺼번에 같이 출력

i 의 값이 3일 경우에는 "탕수육"이 출력
i 의 값이 4일 경우에는 "짬뽕"이 출력
만약 i 의 값이 그밖의 숫자일 경우에는 "그런 음식은 없습니다."가 출력
*/

  switch (i) {
    case 1 : printf("자장면\n"); break;
    case 2 : printf("군만두\n"); // 아래의 탕수육도 실행됨
    case 3 : printf("탕수육\n"); break;
    case 4 : printf("짬뽕\n"); break;

    default : printf("그런 음식은 없습니다."); break;
  }



  // 또한 아래와 같이, 문자(char)형으로도 판단할 수 있음
  // 다만 double, float 같은 실수형은 불가능

  char ch = (char) getch(); // 키보드에서 문자 1개 입력 받기
  // 글자를 소문자로 변환
  // (대소문자 구분 없이 입력받기 위해)
  ch = (char) tolower(ch);


  switch (ch) {
    case 'a'  : printf("A를 누르셨군요\n");
                break;
    case 'b'  : printf("B를 누르셨군요\n");
                break;
    case 'c'  : printf("C를 누르셨군요\n");
                break;
    case '9'  : printf("9를 누르셨군요\n");
                break;
    case 0x0D : printf("Enter키를 누르셨군요\n");
                break;
    case 0x1B : printf("Esc키를 누르셨군요\n");
                break;

    default   : printf("그밖의 문자...\n");
                break;
  }



  return 0;
}



매스매티카 팁] 수식을, Shift-Enter키 대신 쉽게 입력하는 법; Mathematica Tip

예를 들어, 매스매티카의 노트북(하얀 빈 종이)에

1+1

이라고 입력하고, Shift+Enter 키를 누르면 2 라는 답이 계산되어 나오고,

N[Sqrt[2], 31]

이라고 입력하고 Shift+Enter 키를 누르면, 루트2의 근사값이

"1.414213562373095048801688724210"

이렇게 소수점 이하 30자리까지 출력됩니다.

그런데 이때 그냥 Enter키만 누르면 다음 줄로 "줄바꿈"이 될 뿐, 계산이 되지는 않습니다.



Shift+Enter 키를 눌러주는 것은 번거로운데, 간단한 방법이 있습니다.

키보드 우측의 숫자 키패드(Numeric Keypad; 숫자 키만 따로 모아 놓은 곳) 에 있는 Enter키를 누르는 것입니다.

키패드의 엔터키는 Shift키를 같이 누르지 않아도, 수식이 계산되어 나오기에 편리합니다.



그리고 이것은 수식에 에러가 났을 때의 비프음을 제거하는 옵션 설정 방법입니다: ▶▶ 매스매티카 비프음, 삑삑 비프 소리 끄기; Mathematica v5 Beep OFF


Tuesday, March 20, 2007

매스매티카 팁] 수식 계산 중지,취소 핫키, 멈추는 법; Mathematica Tip, Stop Calc

매스매티카에서, 계산이 종료되는 데에 너무 시간이 오래 걸려서 멈추고 싶을 때의 핫키입니다.

예를 들어, 이렇게 백만 팩토리얼을
1000000!
구하면 시간이 아주 오래 걸립니다. 거의 먹통이 될 것입니다.

이때 계산을 취소하고 싶다면,

Alt+,(콤마) 키를 누르면 작은 대화상자가 나오고, 그곳에서

"Abort Command Being Evaluated (현재 계산 중인 명령 실행 중지)"

라는 버튼을 누르면, "$Aborted" 라는 결과 값이 출력되며, 계산이 즉시 중지됩니다. 그렇지만 "Continue Evaluation (계속 계산)" 버튼을 누르면 이 대화상자가 취소되고, 계산이 계속됩니다.

즉, 키보드의
Alt 키를 누르면서 쉼표(,)키를 누르는 것입니다.


만약 위의 Alt+쉼표 키가 듣지 않을 경우에는, 매스매티카 상단 풀다운 메뉴에서

Kernel > Quit Kernel (커널 종료)

을 선택하면 됩니다.




그리고 일반적인 GUI용 프론트 엔드가 아니고, 텍스트 모드용 매스매티카에서는

Ctrl+C 키를 누르면

"Interrupt>" 라는 프롬프트가 나오는데, 이때 a (에이) 키를 누르면 계산이 중지되고, Enter키를 누르면 선택 메뉴가 나옵니다.



<< Home

Categories
Some Recent Posts
Monthly Archives
Top