From 0afd990c6d240c39705ae62f8d8e0ffd4a9f778f Mon Sep 17 00:00:00 2001 From: Zheng Cao Date: Tue, 6 Feb 2018 23:05:25 -0800 Subject: [PATCH 1/7] Finish basic version of the program --- calculator.rb | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 calculator.rb diff --git a/calculator.rb b/calculator.rb new file mode 100644 index 0000000..93062f4 --- /dev/null +++ b/calculator.rb @@ -0,0 +1,51 @@ +# List of operations supported by the program +operations = ["add", "+", "subtract", "-", "multiply", "*", "divide", "/"] + +# Welcome message and instruction +puts "Welcome to the calculator program. What operation do you want to do? Please choose one from the following list: " +puts operations + +# Collect operation choice from user +user_operation = gets.chomp +until operations.include?(user_operation) + puts "Please make a valid choice: " + user_operation = gets.chomp +end + +# Collect first number from user +print "Please provide the first integer: " +first_integer_string = gets.chomp +first_integer = first_integer_string.to_i +until first_integer.to_s == first_integer_string + print "This isn't an integer. Please provide a valid integer: " + first_integer_string = gets.chomp + first_integer = first_integer_string.to_i +end + +# Collect second number from user +print "Please provide the second integer: " +second_integer_string = gets.chomp +second_integer = second_integer_string.to_i +until second_integer.to_s == second_integer_string + print "This isn't an integer. Please provide a valid integer: " + second_integer_string = gets.chomp + second_integer = second_integer_string.to_i +end + +# Calculate and output result +puts "Here is the result: " +case user_operation + when "add", "+" + puts first_integer + second_integer + when "subtract", "-" + puts first_integer - second_integer + when "multiply", "*" + puts first_integer * second_integer + when + if second_integer == 0 + puts "For division, the second integer cannot be 0." + else + puts first_integer / second_integer + end +end +puts "Thank you for using the Calculator program." From 0ca3d62bf3c9215e169150d0db543e10378addb4 Mon Sep 17 00:00:00 2001 From: Zheng Cao Date: Wed, 7 Feb 2018 08:28:59 -0800 Subject: [PATCH 2/7] Add formular print-out --- calculator.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/calculator.rb b/calculator.rb index 93062f4..dd1c9f5 100644 --- a/calculator.rb +++ b/calculator.rb @@ -36,16 +36,16 @@ puts "Here is the result: " case user_operation when "add", "+" - puts first_integer + second_integer + puts "#{first_integer} + #{second_integer} = #{first_integer + second_integer}" when "subtract", "-" - puts first_integer - second_integer + puts "#{first_integer} - #{second_integer} = #{first_integer - second_integer}" when "multiply", "*" - puts first_integer * second_integer + puts "#{first_integer} * #{second_integer} = #{first_integer * second_integer}" when if second_integer == 0 puts "For division, the second integer cannot be 0." else - puts first_integer / second_integer + puts "#{first_integer} / #{second_integer} = #{first_integer / second_integer}" end end puts "Thank you for using the Calculator program." From 39ae7c6079e034d517dc5435cbeb0b3fa31d69c4 Mon Sep 17 00:00:00 2001 From: Zheng Cao Date: Wed, 7 Feb 2018 08:37:57 -0800 Subject: [PATCH 3/7] Change term second integer to divisor for division --- calculator.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/calculator.rb b/calculator.rb index dd1c9f5..0e5caca 100644 --- a/calculator.rb +++ b/calculator.rb @@ -43,7 +43,7 @@ puts "#{first_integer} * #{second_integer} = #{first_integer * second_integer}" when if second_integer == 0 - puts "For division, the second integer cannot be 0." + puts "For division, the divisor cannot be 0." else puts "#{first_integer} / #{second_integer} = #{first_integer / second_integer}" end From 0b852dae344e41c053122ffd13cf01a99600fc43 Mon Sep 17 00:00:00 2001 From: Zheng Cao Date: Wed, 7 Feb 2018 08:47:01 -0800 Subject: [PATCH 4/7] Add support for computing exponents --- calculator.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/calculator.rb b/calculator.rb index 0e5caca..16c85a6 100644 --- a/calculator.rb +++ b/calculator.rb @@ -1,5 +1,5 @@ # List of operations supported by the program -operations = ["add", "+", "subtract", "-", "multiply", "*", "divide", "/"] +operations = ["add", "+", "subtract", "-", "multiply", "*", "divide", "/", "^"] # Welcome message and instruction puts "Welcome to the calculator program. What operation do you want to do? Please choose one from the following list: " @@ -41,11 +41,13 @@ puts "#{first_integer} - #{second_integer} = #{first_integer - second_integer}" when "multiply", "*" puts "#{first_integer} * #{second_integer} = #{first_integer * second_integer}" - when + when "divide", "/" if second_integer == 0 puts "For division, the divisor cannot be 0." else puts "#{first_integer} / #{second_integer} = #{first_integer / second_integer}" end + when "^" + puts "#{first_integer}^#{second_integer} = #{first_integer ** second_integer}" end puts "Thank you for using the Calculator program." From 32d236fed230cb2ac328f203cca6f1db8e905a3c Mon Sep 17 00:00:00 2001 From: Zheng Cao Date: Wed, 7 Feb 2018 08:53:23 -0800 Subject: [PATCH 5/7] Add support for the modulo operator --- calculator.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/calculator.rb b/calculator.rb index 16c85a6..0d7c5d6 100644 --- a/calculator.rb +++ b/calculator.rb @@ -1,5 +1,5 @@ # List of operations supported by the program -operations = ["add", "+", "subtract", "-", "multiply", "*", "divide", "/", "^"] +operations = ["add", "+", "subtract", "-", "multiply", "*", "divide", "/", "^", "%"] # Welcome message and instruction puts "Welcome to the calculator program. What operation do you want to do? Please choose one from the following list: " @@ -49,5 +49,7 @@ end when "^" puts "#{first_integer}^#{second_integer} = #{first_integer ** second_integer}" + when "%" + puts "#{first_integer} % #{second_integer} = #{first_integer % second_integer}" end puts "Thank you for using the Calculator program." From e44c00afadffb3f49cb8c99c719b67bc45ae7bdf Mon Sep 17 00:00:00 2001 From: Zheng Cao Date: Wed, 7 Feb 2018 09:40:33 -0800 Subject: [PATCH 6/7] Add support for distinguishing integer and float --- calculator.rb | 77 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 53 insertions(+), 24 deletions(-) diff --git a/calculator.rb b/calculator.rb index 0d7c5d6..3a2c924 100644 --- a/calculator.rb +++ b/calculator.rb @@ -1,55 +1,84 @@ # List of operations supported by the program operations = ["add", "+", "subtract", "-", "multiply", "*", "divide", "/", "^", "%"] +number_types = ["integer", "float"] # Welcome message and instruction puts "Welcome to the calculator program. What operation do you want to do? Please choose one from the following list: " puts operations -# Collect operation choice from user +# Collect user's choice for operations user_operation = gets.chomp until operations.include?(user_operation) puts "Please make a valid choice: " user_operation = gets.chomp end -# Collect first number from user -print "Please provide the first integer: " -first_integer_string = gets.chomp -first_integer = first_integer_string.to_i -until first_integer.to_s == first_integer_string - print "This isn't an integer. Please provide a valid integer: " - first_integer_string = gets.chomp - first_integer = first_integer_string.to_i +# Let user choose input type +puts "What type of number are you entering? Please choose one from the following list: " +puts number_types + +# Collect user's choice for number types +user_number_type = gets.chomp +until number_types.include?(user_number_type) + puts "Please make a valid choice: " + user_number_type = gets.chomp +end + +# Helper method to check integer input +def integer_check + integer_string = gets.chomp + integer = integer_string.to_i + until integer.to_s == integer_string + print "This isn't an integer. Please provide a valid input: " + integer_string = gets.chomp + integer = integer_string.to_i + end + return integer +end + +def float_check + float_string = gets.chomp + float = float_string.to_f + until float_string.include?(".") && (float.to_s == float_string) + print "This isn't a float. Please provide a valid input: " + float_string = gets.chomp + float = float_string.to_f + end + return float end -# Collect second number from user -print "Please provide the second integer: " -second_integer_string = gets.chomp -second_integer = second_integer_string.to_i -until second_integer.to_s == second_integer_string - print "This isn't an integer. Please provide a valid integer: " - second_integer_string = gets.chomp - second_integer = second_integer_string.to_i +# Collect numbers from user +case user_number_type + when "integer" + print "Please provide the first integer: " + first_number = integer_check + print "Please provide the second integer: " + second_number = integer_check + when "float" + print "Please provide the first float: " + first_number = float_check + print "Please provide the second float: " + second_number = float_check end # Calculate and output result puts "Here is the result: " case user_operation when "add", "+" - puts "#{first_integer} + #{second_integer} = #{first_integer + second_integer}" + puts "#{first_number} + #{second_number} = #{first_number + second_number}" when "subtract", "-" - puts "#{first_integer} - #{second_integer} = #{first_integer - second_integer}" + puts "#{first_number} - #{second_number} = #{first_number - second_number}" when "multiply", "*" - puts "#{first_integer} * #{second_integer} = #{first_integer * second_integer}" + puts "#{first_number} * #{second_number} = #{first_number * second_number}" when "divide", "/" - if second_integer == 0 + if second_number == 0 puts "For division, the divisor cannot be 0." else - puts "#{first_integer} / #{second_integer} = #{first_integer / second_integer}" + puts "#{first_number} / #{second_number} = #{first_number / second_number}" end when "^" - puts "#{first_integer}^#{second_integer} = #{first_integer ** second_integer}" + puts "#{first_number}^#{second_number} = #{first_number ** second_number}" when "%" - puts "#{first_integer} % #{second_integer} = #{first_integer % second_integer}" + puts "#{first_number} % #{second_number} = #{first_number % second_number}" end puts "Thank you for using the Calculator program." From cffac611ed7e34fa8ae4085b3b5ec31123b6690d Mon Sep 17 00:00:00 2001 From: Zheng Cao Date: Wed, 7 Feb 2018 09:53:02 -0800 Subject: [PATCH 7/7] Finish major refactoring --- calculator.rb | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/calculator.rb b/calculator.rb index 3a2c924..4b637d1 100644 --- a/calculator.rb +++ b/calculator.rb @@ -1,28 +1,31 @@ -# List of operations supported by the program -operations = ["add", "+", "subtract", "-", "multiply", "*", "divide", "/", "^", "%"] -number_types = ["integer", "float"] +# Welcome message +puts "Welcome to the calculator program." -# Welcome message and instruction -puts "Welcome to the calculator program. What operation do you want to do? Please choose one from the following list: " +# Instruction for choosing an operation +puts "What operation do you want to do? Please choose one from the following list: " +operations = ["add", "+", "subtract", "-", "multiply", "*", "divide", "/", "^", "%"] puts operations -# Collect user's choice for operations -user_operation = gets.chomp -until operations.include?(user_operation) - puts "Please make a valid choice: " - user_operation = gets.chomp +# Helper method to check user's choice +def user_choice_check choices + user_choice = gets.chomp + until choices.include?(user_choice) + puts "Please make a valid choice: " + user_choice = gets.chomp + end + return user_choice end -# Let user choose input type +# Collect user's choice for operations +user_operation = user_choice_check operations + +# Instruction for choosing a number type puts "What type of number are you entering? Please choose one from the following list: " +number_types = ["integer", "float"] puts number_types # Collect user's choice for number types -user_number_type = gets.chomp -until number_types.include?(user_number_type) - puts "Please make a valid choice: " - user_number_type = gets.chomp -end +user_number_type = user_choice_check number_types # Helper method to check integer input def integer_check @@ -36,6 +39,7 @@ def integer_check return integer end +# Helper method to check float input def float_check float_string = gets.chomp float = float_string.to_f