class Calculator

Public Class Methods

calculate(expression) click to toggle source
# File lib/scicalc.rb, line 2
def self.calculate(expression)
  include Math
  expression=expression.split
  operands=[]
  evaluation=[]
  expression.each do |x|
    case x
      when /\d/
        evaluation.push(x.to_f)
      when "PI", "E"
        evaluation.push(x=="PI" ? Math::PI : Math::E)
      when "sin", "cos", "tan",
           "asin", "acos", "atan",
           "sinh", "cosh", "tanh",
           "asinh", "acosh", "atanh", "atan2",
           "exp", "log"
        operands=evaluation.pop(1)
        evaluation.push((Math.send(x, operands[0])))
      when "-", "/", "*", "+", "**"
        operands=evaluation.pop(2)
        evaluation.push(operands[0].send(x, operands[1]))
    end
  end
  puts evaluation
end