IT

0474. [perl] perl 정리11 - 달력

띠앗머리 2016. 2. 24. 09:52

#!/usr/bin/perl

 

print "Hello, World...\n";

 

$year = 2009;

$month = 1;

$days = &getMonthDays($year,$month);

&printCalendar($year,$month,$days);

 

# 수를 구하기

sub getMonthDays {

   local ($y,$m) = @_; #local 변수

 

   if ($m==1 || $m==3 || $m==5 || $m==7 || $m==8 || $m==10 || $m==12) {

     return 31;

   } elsif ( $m==4 || $m==6 || $m==9 || $m==11) {

     return 30;

   } elsif ($m==2) {

     if ($y % 4 == 0 && $y %100 != 0 || $y % 400 == 0) {

        return 29;

     } else {

        return 28;

     }

   } else {

     return 0;

   }

}

 

#요일 구하기

#반환값 0:sun 1:Mon 2:Tue 3:Wed 4:The 5:Fri 6:Sat

sub getWeekDay {

     my($y,$m,$d) = @_;   #프라이비트 변수

     if ($m ==1 || $m == 2) {

         $y--;

         $m += 12;

     }

 

 my $w = ($y + int($y / 4) - int($y / 100) + int($y / 400) + int((13 * $m + 8) / 5) + $d) % 7;

 return $w;

}

 

#캘린더표시

sub printCalendar{

    ($y,$m,$d) = @_;

    $week = &getWeekDay($y,$m,1);

     print "\n          서기, $y, $m\n";

     print "----------------------------------------\n";

    print " Sun Mon Tue Wed The Fri Sat \n";

     print "----------------------------------------\n";

 for ($i=1;$i<$week ;$i++) {

    print "     ";

 }

  $w=$week;

 for ($i=1;$i<=$d ;$i++) {

    if ($w %7 ==0 && $w >=6) {

       print "\n";

    }

      printf("%4d",$i);

      $w++;

   }

}

 

print "\n";

print "\n";

print "\n";