ある年のある月の日数を求めるメソッドを作ります。2月、つまり閏年かどうかです。
閏年かどうかは以下の判定基準があります。
① その年が4で割り切れる場合は閏年の可能性がある
まず、閏年は4で割り切れる年であることが最低条件ですね。4で割り切れる年は閏年である可能性です。ただし、4で割り切れるだけでは閏年とはかぎりません。例外が1つあります。
② 年が100で割り切れて400で割り切れない場合は閏年ではない
厄介な条件です。その年が4で割り切れても100で割り切れて400で割り切れない場合は閏年でない。
具体的な例
2000年 |
---|
2000年は4で割り切れますね。そして100でも割り切れます。さらに400でも割り切れます。100でも400でも割り切れるので、2000年は閏年となります |
1900年 |
---|
1900年は4で割り切れますね。そして100でも割り切れます。ただし、400では割り切れません。100で割り切れて、400で割り切れないため、1900年は閏年ではありません |
以上をふまえて閏年の判定。
雛形
question2.rb
def get_days(year, month)
# ここに処理を書き加えてください
end
puts "年を入力してください:"
year = gets.to_i
puts "月を入力してください:"
month = gets.to_i
days = get_days(year, month)
puts "#{year}年#{month}月は#{days}日間あります"
完成版
def get_days(year, month)
month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if month == 2
if year % 4 == 0
if year % 100 == 0 && year % 400 != 0
days = 28
else
days = 29
end
else
days = 28
end
else
days = month_days[month - 1]
end
return days
end
puts "年を入力してください:"
year = gets.to_i
puts "月を入力してください:"
month = gets.to_i
days = get_days(year, month)
puts "#{year}年#{month}月は#{days}日間あります"
2月以外は各月の日数が決まっていますね。よって、とりあえず以下のようなソースコードを。
def get_days(year, month)
month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # 各月の日数は配列で管理
return month_days[month - 1]
end
puts "年を入力してください:"
year = gets.to_i
puts "月を入力してください:"
month = gets.to_i
days = get_days(year, month)
puts "#{year}年#{month}月は#{days}日間あります"
実はこれでほとんどの場合をカバーしています。ただし、例外が存在します。2月が閏年の場合。そこで2月のときにだけ条件分岐して別の処理を書く。
def get_days(year, month)
month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if month == 2 # 2月のとき
# 閏年のときはdaysに29を代入
# それ以外はdaysに28を代入
else
days = month_days[month - 1]
end
return days
end
puts "年を入力してください:"
year = gets.to_i
puts "月を入力してください:"
month = gets.to_i
days = get_days(year, month)
puts "#{year}年#{month}月は#{days}日間あります"
あとは閏年か判定するだけです。閏年かどうかの判定は以下の2つです。
① その年が4で割り切れること
② ただし、年が100で割り切れて400で割り切れない場合は閏年ではない
これをソースコードにしていくと以下。
year = 指定の年
if year % 4 == 0 # 年が4で割り切れること
if year % 100 == 0 && year % 400 != 0 # 年が100で割り切れて400で割り切れない場合
# 閏年でない
else
# 閏年
end
end
このソースコードをget_daysメソッドに組み込み。
def get_days(year, month)
month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if month == 2
if year % 4 == 0 # 年が4で割り切れること
if year % 100 == 0 && year % 400 != 0 # 年が100で割り切れて400で割り切れない場合
days = 28 # 閏年でない
else
days = 29 # 閏年
end
else
days = 28 # 閏年でない
end
else
days = month_days[month - 1]
end
return days
end
puts "年を入力してください:"
year = gets.to_i
puts "月を入力してください:"
month = gets.to_i
days = get_days(year, month)
puts "#{year}年#{month}月は#{days}日間あります"