Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ampers: Abinnet Ainalem #45

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 96 additions & 0 deletions calculator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@

def border
puts "-------------------------------"
end
border
border

# Welcomes User
puts "Welcome! I will help you calculate simple math\n"

# Gives user directions for input
puts "\n INPUT DIRECTIONS: "
puts "** Separate all values and symbols."
puts "** Enter two numbers at a time"
puts "** Use format: number operator number"
puts "** Enter operators as symbols or names"
puts " Use:\n"
puts "+ add"
puts "- subtract"
puts "* multiply"
puts "/ divide\n"

# Arrays storing past equations, issues with user input, and current equation being calculated
solved_equations = []
points_of_confusion = []
equation = []

# Variables used to store total for solved equation and initiate while loop
total = 0
response = "y"

# Evaluates user response for float, integer, word
def float_or_integer value
if value.to_f.to_s == value
value = value.to_f
elsif value.to_i.to_s == value
value = value.to_i
else
value = false
end
return value
end

while response == "y"
puts "\nPlease enter your equation."
user_entry = gets.chomp.downcase.split(" ")

numbers = [user_entry[0], user_entry[2]]
numbers.each do |num|

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You might also check to ensure that the length of user_entry is at least 3.

if float_or_integer(num) == false && num != nil
points_of_confusion.push("I am unsure of the meaning of #{num}.")
elsif num == nil
points_of_confusion.push("Missing a number")
else
equation.push(float_or_integer(num))
end
end

operator = user_entry[1]
case operator
when "add", "+"
total = equation[0] + equation [1]
when "subtract", "-"
total = equation[0] - equation [1]
when "multiply", "*"
total = equation[0] * equation [1]
when "divide", "/"
if equation[1].to_i != 0
total = equation[0] / equation [1]
else
points_of_confusion.push("You cannot divide by 0.")
end
else
points_of_confusion.push("I am unsure of the meaning of #{operator}.")
end

if points_of_confusion.length > 0
puts "I was unable to solve your equation because:"
points_of_confusion.each {|issue| puts issue}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like how you collected the errors into an array.

puts "\n"
else
solved_equation = "#{user_entry.join(" ")} = #{total}"
puts solved_equation
solved_equations.push(solved_equation)
end
equation.clear
points_of_confusion.clear
puts "\n"
border
puts "Type y to compute more equations. Type anything else to stop adding equations.\n"
response = gets.chomp.downcase
end

puts "Equations solved:"
solved_equations.each {|equation| puts equation}
puts "\n"