Simple Calculator in Ruby
Write a program for calculator which should be able to add, subtract, multiple and divide.
Restrictions:
- Only the use of the ‘+’ operator is allowed. The ‘-’ sign may only be used to signify a negative number.
- Only integer operations will be used for this exercise: let’s not worry about decimals.
class Calculator
def initialize()
@num_in_memory = 0
@expression = ‘’
@neg_num = false
end
def show_result
if @neg_num == false
puts @num_in_memory
else
puts “-#{@num_in_memory}”
end
end
def clear(value)
@num_in_memory = 0
end
def addition(value)
@num_in_memory += value;
end
def substraction(value)
value.times do
@num_in_memory += -1
end
end
def multiplication(value)
i = 0
first_term = @num_in_memory
if value == 0
@num_in_memory = 0
else
while i < value — 1
@num_in_memory += first_term
i = i + 1
end
end
end
def division(value)
quotient = 0
dividend = @num_in_memory
until dividend < value
dividend += -value
quotient += 1
end
@num_in_memory = quotient
end
def calculate(expression)
expression = extractPositiveNumExp(expression)
first_term = getNextTerm!(expression)
self.addition(first_term.to_i)
while expression.size > 0 do
operator = getNextOperator!(expression)
next_term = getNextTerm!(expression)
if operator == “+”
self.addition(next_term.to_i)
elsif operator == “-”
self.substraction(next_term.to_i)
elsif operator == “*”
self.multiplication(next_term.to_i)
elsif operator == “/”
self.division(next_term.to_i)
end
end
@num_in_memory
end
private
def getNextTerm!(expression)
term = ‘’
while expression.size > 0 do
current_character = expression.slice(0,1)
if [‘+’, ‘-’, ‘*’, ‘/’].include? current_character
#expression.slice!(0,1)
break
else
term += current_character
end
expression.slice!(0,1)
end
term
end
def extractPositiveNumExp(expression)
str = expression.split(“”)
cnt = str.count(“-”)
if cnt == 1
@neg_num = true
else
@neg_num = false
end
str.delete(“-”)
str.join
end
def getNextOperator!(expression)
operator = ‘’
while expression.size > 0 do
current_character = expression.slice(0,1)
if [‘+’, ‘-’, ‘*’, ‘/’].include? current_character
current_character = expression.slice!(0,1)
operator = current_character
return operator
end
end
end
end
#################### Main Function #############################
puts “\n — — — — — — — Welcome to Calculator — — — — — — — — — — — — -\n”
c = Calculator.new
puts “Please enter an expression to be evaluated. “
expression = “-5*5”.chomp
puts “\nEVALUATING: #{expression} “
c.calculate(expression)
puts “RESULT:”
c.show_result