- 2007-12-20 (Thu) 22:29
- article
たのしいRuby 第10章 数値(Numeric)クラスの練習問題をやってみた。
(1)と(2)は華氏を摂氏、もしくは逆の摂氏を華氏に変換するプログラムを書けと言う問題。小数点以下を求める為に引数をFloat()で囲む。そんなに難しい問題じゃないので、テストはかなり適当。
def cels2fahr(cels)
Float(cels) * 9 / 5 + 32
end
require 'test/unit'
require 'cels2fahr'
class TestCels2Fahr < Test::Unit::TestCase
def test_cels2fahr
assert_equal(50, cels2fahr(10))
assert_equal(77, cels2fahr(25))
end
end
def fahr2cels(fahr)
(Float(fahr) - 32) * 5 / 9
end
require 'test/unit'
require 'fahr2cels'
class TestFahr2Cels < Test::Unit::TestCase
def test_fahr2cels
assert_equal(10, fahr2cels(50))
assert_equal(25, fahr2cels(77))
end
end
(3)は乱数の問題。1から6までの数字を出力するメソッドdiceを実装する。乱数のテストって何書いたらいいんだろう。今回はテストは用意しなかったけど、1から6までの数値かどうかのテストぐらいは用意するべきだったのかな。
def dice
rand(6) + 1
end
(4)は引数が素数かどうかを調べるメソッドの実装。2より小さい数(負数、0、1)は即falseを返す。それ以上の数は引数の平方根までの数で割り切れるか調べ、途中で割り切れたら素数ではないので、falseを返す。ループを抜けたら素数なのでtrueを返す。
def prime?(num)
return false if num < 2
(2..Math.sqrt(num)).each do |i|
return false if (num % i).zero?
end
true
end
require 'test/unit'
require 'prime'
class TestPrime < Test::Unit::TestCase
def test_prime
assert(!prime?(0))
assert(!prime?(1))
assert(prime?(2))
assert(prime?(3))
assert(!prime?(4))
assert(prime?(5))
assert(prime?(13))
assert(prime?(17))
assert(prime?(113))
end
end
書いたコードはCodeReposにCommitしてみた(/dan/ruby/tanoshi_ruby/sec10_numeric/)。突っ込み、添削大歓迎です。これぐらいの規模のプログラムだと添削とかしづらいかもですが。
| たのしいRuby 第2版 Rubyではじめる気軽なプログラミング | |
![]() |
高橋 征義 後藤 裕蔵
おすすめ平均 |
- Newer: 仕事帰りの池袋にて
- Older: fixdap.jpに「Rubyを極める」プロジェクトを作ってみました
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://ukstudio.jp/2007/12/20/tanoshi_ruby_sec10_practice/trackback/
- Listed below are links to weblogs that reference
- たのしいRuby 第10章 練習問題 from UKSTUDIO


プログラミング初心者にとっては少し難易度が高いかも
読みやすいだけ


