# --------------------------------------------------------- rpn3.rb ^ print "RPN CALC #4 of ruby, ready. by guel 02/20/99\n" class RpnCalc include Math def initialize @s = [] end def set(x) @s.push x.to_f end def add @s.push @s.pop + @s.pop end def multi @s.push @s.pop * @s.pop end def sub @s.push (-@s.pop + @s.pop) end def div @s.push 1 / @s.pop / @s.pop end def set_PI @s.push PI end def set_E @s.push E end def sin @s.push super(@s.pop) end def cos @s.push super(@s.pop) end def tan @s.push super(@s.pop) end def exp @s.push super(@s.pop) end def log @s.push super(@s.pop) end def log10 @s.push super(@s.pop) end def sqrt @s.push super(@s.pop) end def show p @s end end rpncalc = RpnCalc.new while gets split.each do |x| begin case x when /\d/ rpncalc.set x when 'pi','PI' rpncalc.set_PI when 'e','E' rpncalc.set_E when '+' rpncalc.add when '*' rpncalc.multi when '-' rpncalc.sub when '/' rpncalc.div when 'sin' rpncalc.sin when 'cos' rpncalc.cos when 'tan' rpncalc.tan when 'exp' rpncalc.exp when 'log' rpncalc.log when 'log10' rpncalc.log10 when 'sqrt' rpncalc.sqrt else print "入力がヘンだぜ (^^;\n" p x end rescue print "例外処理が発生!!\n" p $! p $@ end end rpncalc.show end # --------------------------------------------------------- rpn3.rb $