『たのしいRuby 第4版』第12章 数値(Numeric)クラス
第12章 数値(Numeric)クラス
模範解答はこちら
(1)
問題
摂氏温度を華氏温度に変換する cels2fahr メソッドを定義しろ、という問題です。
私的解答
def cels2fahr(cels) fahr = (9.0 / 5.0) * cels + 32.0 fahr.to_f end 1.upto(100) do |i| puts cels2fahr(i) end
模範解答にもある通り、途中の計算結果が浮動小数点数になるように公式の数値を9.0などにするのがポイントかと思います。
(2)
問題
さっきとは逆に、華氏温度を摂氏温度に変換する fahr2cels メソッドを定義しろ、という問題です。
私的解答
def fahr2cels(fahr) cels = (5.0 / 9.0) * (fahr - 32.0) cels.to_f end puts fahr2cels(32)
ポイントは(1)と同じ。
(3)
問題
サイコロを振って出た目を返す dice メソッドを定義しろ、という問題です。
私的解答
def dice rand(6) + 1 end puts dice
0から引数にとった値の手前までの乱数を発生させる rand メソッドを使います。
(4)
問題
サイコロを10回振って出た目の合計を返す dice10 メソッドを定義しろ、という問題です。
私的解答
def dice10 total = 0 10.times do me = rand(6) + 1 total += me end total end puts dice10
模範解答は(3)で作った dice メソッドを流用しているのでもっと短かったです。
しかし、サイコロの目だからといって変数名を me にするこのセンスをどうにかせねば。。。
(5)
問題
与えられた引数が素数であるかどうかを調べる prime? メソッドを定義しろ、という問題。
私的解答
と行きたいところですが、あまりの難しさに禿げ上がりそうになったので断念してしまいました。。。
以下、模範解答コピペ
def prime?(num) return false if num < 2 2.upto(Math.sqrt(num)) do |i| if num % i == 0 return false end end return true end
この問題は、平方根が用いられていることからも高度な数学的知識を要求する問題であろうことが推察されます。
・・・ん?そーでもないのかな?(笑)