四角形の面積を求めるプログラム
盛りだくさんになっちゃいました。クラスの継承、アクセサの定義、条件分岐、それからコマンドライン引数の利用や型変換、ポリモーフィズムまで使っちゃってます。あ、あとシステムコマンドの呼び出しも要チェックなポイントですね。
class Square
attr_accessor :side1
def area()
@side1 * @side1
end
end
class Rectangle < Square
attr_accessor :side2
def area()
@side1 * @side2
end
end
class Trapezoid < Rectangle
attr_accessor :height
def area()
(@side1 + @side2) * @height / 2.0
end
end
case ARGV.length
when 1
s = Square.new
s.side1 = ARGV[0].to_i
vals = "#{s.side1}"
when 2
s = Rectangle.new
s.side1 = ARGV[0].to_i
s.side2 = ARGV[1].to_i
vals = "#{s.side1} and #{s.side2}"
when 3
s = Trapezoid.new
s.side1 = ARGV[0].to_i
s.side2 = ARGV[1].to_i
s.height = ARGV[2].to_i
vals = "#{s.side1} and #{s.side2} and height is #{s.height}"
else
s = nil
m = "Nandeyanen!"
puts m
system('say "'+m+'"')
exit
end
name = s.class.name
answer = s.area()
m1 = "I've calculated the area of the #{name} which side's is(are) #{vals}."
m2 = "The answer is #{answer}."
system('say "'+m1+'"')
system('say "'+m2+'"')
ちなみに「say」はMacOSXに組み込まれた音声読み上げコマンドです。英語にしか対応していませんが、これが結構楽しいです。上記のコマンドは求めた面積を音声で返してくれます。
参考URL
- EnglishWorm.com
- SinglesFan.com
- LmLab.net
- サイトマップ
- 運営者について