プロが教える店舗&オフィスのセキュリティ対策術

うるう年は ⅰ、4で割り切れる年はうるう年
      ⅱ、例外として100で割り切れたら平年
      ⅲ、例外として400で割り切れたらうるう年

($year%4==0 && $year%100!=0 && $year%400==0);

と考えたのですが、ご指摘をおねがいします

A 回答 (4件)

うるう年は


4で割れて100で割れない時or400で割れる時なので
↓ではないでしょうか?
($year%4==0 && $year%100!=0 || $year%400==0)
だとおもいます。
Perlは専門外なので
「orが||で &&優先カッコ不要ならば」ですけど。
    • good
    • 0

考え方として、


400で割り切れるものは100でも4でも割り切れますので、
それがひとつの判断式に入っているのはおかしいですね。
(100で割り切れないものが400で割り切れる事もありません)
ご質問の式を一言でまとめてしまうと、
「400で割り切れたらうるう年だ」
という事しか言っていない事になります。

集合で考えてみましょう。。
4で割り切れる数の集合があります。
その中から100で割り切れる数の集合を非うるう年とし、
その中から400で割り切れる数の集合をやっぱりうるう年とします。

うるう年の判定は「結局この年はどこの集合に属するのかい?」という
判断をするという事です。

という事を踏まえて考え直してみてはいかがでしょうか。
せっかくですから、ご自分で考えてみるのもいいのではないかと。
    • good
    • 0

うるう年かどうかだけの判断でなく、2月の日数も設定するならこうではないでしょうか?



@cdays = (0,31,28,31,30,31,30,31,31,30,31,30,31);
if (($year % 4) == 0){
 if (($year %100) != 0){
  $cdays[2] = 29;
 }elsif (($year % 400) == 0){
  $cdays[2] = 29;
 }
}
    • good
    • 0

Pealを知らないのに口出しして恐縮ですが、


多分ですが、
($year%4==0 && $year%100!=0 && $year%400==0);
これだと、
「4で割り切れる」かつ「100で割り切れない」かつ「400で割り切れる」
ですよね。
問題は「400で割り切れる」場合ですが、「100で割り切れない」でOUTになってしまうと思います。

『4で割り切れる』かつ『「100で割り切れない」または「400で割り切れる」』
となるようにしないといけないのではないでしょうか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!