mwultong Blog ... 프로그래밍 / 계산기

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

 
Tuesday, January 30, 2007

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


펄로, 특정 연도가 윤년인지 아닌지 알아내는 예제입니다.

isLeapYear 함수는, 윤년일 때는 참(1)을, 평년일 때는 거짓(0)을 반환합니다.

나머지 연산자(%)로 나머지를 구할 때, 나머지가 없으면 0이 되고, 0은 거짓이기에 if문 앞의 return문이 실행되지 않고, 다음줄이 계속 실행됩니다.

만약 나머지가 있으면, 즉, 나누어 떨어지지 않으면 return문이 실행되어 isLeapYear 함수가 종료되고, 논리값을 반환합니다. 0은 거짓, 1은 참입니다.

지정한 해가, 윤년인지 평년인지 알아내기


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


  if (isLeapYear(2008)) {
    print "윤년입니다\n";
  } else {
    print "평년입니다\n";
  }
  # 출력 결과: 윤년입니다




  if (isLeapYear(2007)) {
    print "윤년입니다\n";
  } else {
    print "평년입니다\n";
  }
  # 출력 결과: 평년입니다




sub isLeapYear {
  my $year = shift;

  return 0 if $year % 4;    # 4로 나누어 떨어지지 않으면 평년
  return 1 if $year % 100;  # 4로 나누어 떨어지는 해에서, 100으로 나누어 떨어지지 않으면 윤년
  return 0 if $year % 400;  # 4로 나누어 떨어지는 해에서, 400으로 나누어 떨어지지 않으면 평년

  return 1;
}


원래 윤년 계산 소스는 좀 복잡한데

원본 소스:
http://www.willmaster.com/blog/perl/Calculate_Leap_Years.html
<How To Calculate Leap Years with Perl> (2023-04-30 현재 폐쇄됨)

이 주소에 위와 같은 아주 간결한 소스가 있었습니다. 너무 간단해서 제대로 작동하는지, 자바의 isLeapYear() 메소드와 서기 1582년에서 서기 10000년까지 비교하며 테스트를 해보았는데 완벽했습니다.


다만, 이 펄 함수로는 1582년이 되기 전의 윤년은 계산하기 곤란합니다. 왜냐하면 1582년이 되기 전에는 그레고리력이 아닌 율리우스력(Julian Calendar)이 사용되었기 때문입니다.

자바의 isLeapYear() 메소드는 1582년이 되기 전은 율리우스력으로 윤년을 구하고, 1582년부터는 그레고리력(Gregorian Calendar)으로 윤년을 구합니다.

학술적으로는 자바 쪽이 정확합니다.

따라서 여기의 펄 함수는 일상적인 용도에만 적합합니다.



▶▶ Perl/펄] 올해가 윤년인지 평년인지 판단 예제; Current Year is Leap Year?




tag: perl
Perl | 펄

0 Comments:

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top