LoginSignup
1
0

More than 3 years have passed since last update.

【Ruby】閏年判定プログラム

Posted at

概要

西暦と月を出力するプログラムを書きました。そのときに閏年を考慮する必要があります。

目次

  • 閏年(うるう年)

  • 実践

    • 問題
      • 条件
    • 解答
  • 補足

  • 参考文献

閏年(うるう年)

閏年は次の条件で判定することができます。

  • ①西暦が4で割り切れる時
  • ②ただし、100で割り切れるときは平年
  • ③ただし、400で割り切れるときは閏年

実践

問題

西暦と月を入力し、その月の日数を求めるプログラムを書いてください。

条件

  • 閏年を考慮してください

解答

def leap_year?(year, month)
  # 各月の日数
  month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
  # 配列から日数を取得
  days = month_days[month - 1]

  # 2月
  if month == 2
    # 条件① 4で割り切れるとき
    if year % 4 == 0
      # 条件②,③ 西暦が100で割り切れるとき かつ 400で割り切れないとき
      if year % 100 == 0 && year % 400 != 0
        days      # うるう年ではない
      else
        days + 1  # 28日に +1 すると29日になる
      end
    # 4で割り切れないときはうるう年ではない
    else
      days
    end

  # 2月以外のとき
  else
    days
  end
end

# 西暦を入力
p '年を入力してください'
year = gets.to_i

# 月を入力
p '月を入力してください'
month = gets.to_i

# メソッド呼び出し
days = leap_year?(year, month)
p "#{year}#{month}月は#{days}日間あります"

補足

②ただし、100で割り切れるときは平年
③ただし、400で割り切れるときは閏年

このような条件を上記解答では

year % 100 == 0 && year % 400 != 0

このように記述しています。

400で割り切れるときに閏年 ならば、 400で割り切れないときは平年 になります。
これを利用して else(それ以外のとき)は閏年 が成り立つようになります。

参考文献

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0