0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

閏年を含めた月ごとの日数を求めるプログラム

Last updated at Posted at 2020-10-07

【概要】

1.結論

2.どのようにプログラミングするのか

3.開発環境

1.結論

2月だけ4,100,400の剰余(%)で条件式に当てはめたメソッドを作り、年月の入力と年月日を出力する!


2.どのようにプログラミングするのか

def get_days_leap_year(year, month)
  each_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 = each_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}日間あります" #---❼

❶:ここでは1~12月の日数を配列に入れています。2月は28日にしているのは閏年以外は28日だからです。条件式で28日か29日を選別していきますし、条件式で何も当てはまらなかった場合に28日になるようにしています。

❷:4で割り切れる=閏年、100で割り切れる=閏年ではない、400で割り切れる0=閏年というふうに決まっています。”もし2月の場合”で”もし4で割り切れる場合”の条件式をそれぞれ作りました。そうした方がわかりやすく、一つの条件式も複雑にならないので小分けしました。”100で割り切れるかつ、400で割り切れない”部分はまとめて条件式に記載し、当てはまる場合は28日、当てはまらない場合(=400で割り切れる)は29日になります。閏年を判別する際に"4,100,400"なのかはネットで検索すると詳しく書いてあるのでこちらでは省きます。

❸:そもそも4で割り切れない場合は閏年でないのでその条件に対しても28日のプログラムをコーディングします。

❹:配列特有の”0”から番号が始まるので配列を取得する際は、呼び出したい月に対して”月-1”することで配列は該当の月の日数を呼び出せます。(ex:1月であれば、31日になるので、[1(月)-1]で[0]になりeach_month_days[0]なので31が取得できます。

❺:get_days_leap_yearメソッドは日数を出したいメソッドなので、戻り値はdaysです。

❻:入力したい”年”と”月”です。これらがget_days_leap_yearメソッドの仮引数となります。

❼:❻で使用した年月を式展開し、get_days_leap_yearメソッドの日数も#{days}で式展開しています。


3.開発環境 --------------------------------------- Ruby 2.6.5 Rails 6.0.3.3 Visual Studio Code 1.49.2
0
0
2

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?