Simple Calculator in Ruby

Ajit Konde
2 min readMar 19, 2021

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

--

--