本日は、指定された西暦年と月に基づいて、その月の日数を求めるプログラムを作成する課題に取り組みます。特に、閏年について考慮する必要があります。
問題の説明
西暦の年と月を入力し、その月の日数を求めるプログラムを作成します。閏年については以下の基準で判断します。
出力例:
- 1990年2月 => "1990年2月は28日間あります"
- 2000年2月 => "2000年2月は29日間あります"
- 2100年2月 => "2100年2月は28日間あります"
- 2000年3月 => "2000年3月は31日間あります"
コードの雛形
def get_days(year, month)
month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# ここに処理を書き加えてください
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}日間あります"
解説
-
月の日数の配列:
month_days
配列に各月の日数を格納しています。2月は28日ですが、閏年の場合は29日になります。
-
閏年の判断:
- 年が4で割り切れる場合は、さらにその年が100で割り切れるかどうかを確認します。
- 100で割り切れる場合は、さらに400で割り切れるかどうかを確認します。
- これらの条件に基づいて、2月の日数を決定します。
-
月が2月以外の場合:
- 配列
month_days
から対応する月の日数を取得します。
- 配列
このプログラムを使えば、指定された年と月に応じて正しい日数を出力することができます。