forked from Ada-C12/calculator
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcalculator.rb
151 lines (115 loc) · 3.19 KB
/
calculator.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#operation methods
def add(num1, num2)
return num1 + num2
end
def subtract(num1, num2)
return num1 - num2
end
def multiply(num1, num2)
return num1 * num2
end
def divide(num1, num2)
return num1 / num2
end
def modulo(num1, num2)
return num1 % num2
end
def exponent(num1, num2)
return num1 ** num2
end
#request number methods
def requestNum1
puts "We will be working with two numbers. Please enter your first number:"
num = gets.chomp
return num
end
def requestNum2
puts "Please enter your second number:"
num = gets.chomp
return num
end
valid = false
OPERATIONS = ["add", "+", "subtract", "-", "multiply", "*", "divide", "/", "modulo", "%", "exponent", "**"]
puts "Welcome to the Calculator program! Which operator would you like to use?"
puts "1. add(+)"
puts "2. subtract(-)"
puts "3. multiply(*)"
puts "4. divide(/)"
puts "5. modulo(%)"
puts "6. exponent(**)"
while valid == false
puts "Please choose an operator(name or symbol):"
operator = gets.chomp
operator = operator.downcase
if OPERATIONS.include? operator
num1 = requestNum1
isFloat = Float(num1) rescue false
if isFloat
num2 = requestNum2
isFloat = Float(num2) rescue false
if isFloat
case operator
when "add", "+"
result = add(num1.to_f, num2.to_f)
if result % 1 == 0
result = result.to_i
end
puts "#{num1} + #{num2} = #{result}"
valid = true
when "subtract", "-"
result = subtract(num1.to_f, num2.to_f)
if result % 1 == 0
result = result.to_i
end
puts "#{num1} - #{num2} = #{result}"
valid = true
when "multiply", "*"
result = multiply(num1.to_f, num2.to_f)
if result % 1 == 0
result = result.to_i
end
puts "#{num1} * #{num2} = #{result}"
valid = true
when "divide", "/"
if num2.to_f != 0.0
result = divide(num1.to_f, num2.to_f)
if result % 1 == 0
result = result.to_i
end
puts "#{num1} / #{num2} = #{result}"
else
puts "The result is undefined."
end
valid = true
when "modulo", "%"
if num2.to_f != 0.0
result = modulo(num1.to_f, num2.to_f)
if result % 1 == 0
result = result.to_i
end
puts "#{num1} % #{num2} = #{result}"
else
puts "The result is undefined."
valid = true
end
when "exponent", "**"
result = exponent(num1.to_f, num2.to_f)
if result % 1 == 0
result = result.to_i
end
puts "#{num1}^#{num2} = #{result}"
valid = true
end
else
puts "That is not a valid input."
valid = true
end
else
puts "That is not a valid input."
valid = true
end
else
puts "That is not a valid operator. Please input a valid operator."
puts
end
end