概要
西暦と月を出力するプログラムを書きました。そのときに閏年を考慮する必要があります。
目次
-
閏年(うるう年)
-
実践
-
問題
- 条件
-
解答
-
-
補足
-
参考文献
閏年(うるう年)
閏年は次の条件で判定することができます。
- ①西暦が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(それ以外のとき)は閏年 が成り立つようになります。