LoginSignup
11
0

More than 3 years have passed since last update.

Rubyで閏年判定プログラムを作成しよう!

Posted at

目次

このページではRubyを使用し閏年の判定プログラムを作成する.

閏年判定プログラム

以下の問題をRubyで書いてみる.

入力した年が閏年かを判別し表示するプログラムの作成する.

ただし,100で割り切れる年は閏年ではないが,400で割り切れる年は閏年であることを組み込む.

以上をテスト駆動開発の順を追って作る.

基本的な動作の作成

まずは,例外は考えず入力した年が閏年かどうかを判別するプログラムを作成する.

簡単に書くと以下のようになる.

check_leap_year.rb
p year = ARGV[0].to_i
if year % 4 == 0
    p ture
end

このプログラムに2004と入力すると

$ ruby check_leap_year.rb 2004
2004
true 

と表示される.

このままだと1999など条件を満たさない年を入力しても何も表示されないので,その部分を作成する.

check_leap_year.rb
p year = ARGV[0].to_i
if year % 4 == 0
    p ture
else
    p false
end

このプログラムに1999と入力すると

$ ruby check_leap_year.rb 1999
1999
false 

例外処理

閏年の条件は

・西暦年号が4で割り切れる年を閏年とする.
・西暦年号が100で割り切れて400で割り切れない年は平年とする.

先程のプログラムに上記の例外処理を組み込む.

check_leap_year.rb
p year = ARGV[0].to_i
if year % 400 == 0
    p ture
elsif year % 100 == 0
    p false
elsif year % 4 == 0
    p true
else
    p false
end

これに1900,2000を入力すると

$ ruby check_leap_year.rb 1900
1900
false

$ ruby check_leap_year.rb 2000
2000
true

となる.ひとまずこれで例外処理まで実装できた.

複数年の判定

一年ずつ入力して起動して...を繰り返すのは少しめんどくさい.

なので配列を利用し,loopを回してみる.

check_leap_year.rb
[2004,1999,1900,2000].each do |year|
    p year
    if year % 400 == 0
        p ture
    elsif year % 100 == 0
        p false
    elsif year % 4 == 0
        p true
    else
        p false
    end
end

このプログラムを実行すると

$ ruby check_leap_year.rb
2004
true
1999
false
1900
false
2000
true

となる.

methodの利用

先程のプログラムの判定する部分をmethodにして取り出してみる.

check_leap_year.rb
def leap?(year)
    if year % 400 == 0
        true
    elsif year % 100 == 0
        false
    elsif year % 4 == 0
        true
    else
        false
    end
end

[2004,1999,1900,2000].each do |year|
    p year
    p leap?(yaer)
end

このプログラムを実行すると

$ ruby check_leap_year.rb
2004
true
1999
false
1900
false
2000
true

これでも動作するが,さらに「case」という物を使うとさらに美しくなるようだ.

check_leap_year.rb
def leap?(year)
  case
  when year % 400 ==0 ; true
  when year % 100 ==0 ; false
  when year % 4 ==0 ;   true
  else ;                false
  end
end

[2004 1999, 1900, 2000].each do |year|
  p year
  p leap?(year)
end

このプログラムを実行すると

$ ruby check_leap_year.rb
2004
true
1999
false
1900
false
2000
true

以上で完成.

まとめ

今回はRubyで閏年の判定プログラムを作成した.

参考

以下を参考にした.

Rubyのお勉強<制御構造_Ifとか>


  • source ~/prog/github/grad_members_20f/members/miyanagi/post/leap_year.org
11
0
1

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