Ruby

四角形の面積を求めるプログラム

盛りだくさんになっちゃいました。クラスの継承、アクセサの定義、条件分岐、それからコマンドライン引数の利用や型変換、ポリモーフィズムまで使っちゃってます。あ、あとシステムコマンドの呼び出しも要チェックなポイントですね。

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