目次
このページでは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で閏年の判定プログラムを作成した.
参考
以下を参考にした.
- source ~/prog/github/grad_members_20f/members/miyanagi/post/leap_year.org