From 4d4216f3e6f022d30c881ee4b9cb16a457e37a28 Mon Sep 17 00:00:00 2001 From: Selena Solis Date: Mon, 1 Jul 2019 00:58:49 -0500 Subject: [PATCH 1/3] initial --- index.js | 101 ++++++++++++++++++++++++++++++++++++++++++++ modules/add.js | 4 ++ modules/boolean.js | 15 +++++++ modules/divide.js | 4 ++ modules/multiply.js | 4 ++ modules/subtract.js | 4 ++ 6 files changed, 132 insertions(+) create mode 100644 modules/add.js create mode 100644 modules/boolean.js create mode 100644 modules/divide.js create mode 100644 modules/multiply.js create mode 100644 modules/subtract.js diff --git a/index.js b/index.js index 8b13789..2ea0f2c 100644 --- a/index.js +++ b/index.js @@ -1 +1,102 @@ +const readline = require('readline'); +const add = require("./modules/add"); +const subtract = require("./modules/subtract"); +const multiply = require("./modules/multiply"); +const divide = require("./modules/divide"); +const {lessThan, greaterThan, isEqual, isNotEqual} = require("./modules/boolean"); +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + +function prompt(){ + rl.question('What would you like to calculate? ', (answer) => { + calculate(answer); + prompt(); + }) +} +prompt(); + +function determineOperator(string){ + let regex = /[\/\+\-\*\>\<\={2}\!]/g; + let opLocStart = string.search(regex) + let opLocBoolEnd = opLocStart+3; + let operation = string.charAt(opLocStart); + if(opLocStart === -1){ + return false; + } + else if(operation == '=' || operation == '!'){ + let boolOp = string.slice(opLocStart, opLocBoolEnd); + console.log(boolOp); + if(boolOp == '==='){ + return ["===", opLocStart]; + } + else if(boolOp == '!=='){ + return ["!==", opLocStart]; + } + else{ + return false; + } + } + else if(operation.match(regex)){ + return [operation, opLocStart]; + } +} + +function calculate(answer){ + let expression = answer; + if (determineOperator(expression)){ + let [operation, location] = determineOperator(expression); + if((operation == '===')||(operation == '!==')){ + let charAfterOp = location + 3; + let num1Str = expression.slice(0, location).trim(); + let num2Str = expression.slice(charAfterOp, expression.length).trim() + let num1 = Number(num1Str); + let num2 = Number(num2Str); + if(!num1 || !num2){ + console.log("please enter expression in the following format: ") + console.log("number operation number") + } + else if(operation == '==='){ + isEqual(num1, num2); + } + else if(operation == '!=='){ + isNotEqual(num1, num2); + } + } + else{ + let charAfterOp = location + 1; + let num1Str = expression.slice(0, location).trim(); + let num2Str = expression.slice(charAfterOp, expression.length).trim() + let num1 = Number(num1Str); + let num2 = Number(num2Str); + if(!num1 || !num2){ + console.log("please enter expression in the following format: ") + console.log("number operator number") + } + else if (operation === '+'){ + add(num1, num2) + } + else if(operation === '-'){ + subtract(num1, num2); + } + else if(operation === '*'){ + multiply(num1, num2); + } + else if(operation === '/'){ + divide(num1, num2); + } + else if(operation === '<'){ + lessThan(num1, num2); + } + else if(operation === '>'){ + greaterThan(num1, num2); + } + } + } + else{ + console.log("please enter valid mathematical oprator"); + } +} \ No newline at end of file diff --git a/modules/add.js b/modules/add.js new file mode 100644 index 0000000..d2d00d3 --- /dev/null +++ b/modules/add.js @@ -0,0 +1,4 @@ +function add (num1, num2){ + console.log(num1+num2); +} +module.exports = add; \ No newline at end of file diff --git a/modules/boolean.js b/modules/boolean.js new file mode 100644 index 0000000..50b823d --- /dev/null +++ b/modules/boolean.js @@ -0,0 +1,15 @@ +module.exports.lessThan = function lessThan(num1, num2){ + console.log(num1 < num2); +} + +module.exports.greaterThan = function greaterThan(num1, num2){ + console.log(num1 > num2); +} + +module.exports.isEqual = function isEqual(num1, num2){ + console.log(num1 == num2); +} + +module.exports.isNotEqual = function isEqual(num1, num2){ + console.log(num1 != num2); +} diff --git a/modules/divide.js b/modules/divide.js new file mode 100644 index 0000000..2b47ad6 --- /dev/null +++ b/modules/divide.js @@ -0,0 +1,4 @@ +function divide (num1, num2){ + console.log(num1/num2); +} +module.exports = divide; \ No newline at end of file diff --git a/modules/multiply.js b/modules/multiply.js new file mode 100644 index 0000000..aaf7908 --- /dev/null +++ b/modules/multiply.js @@ -0,0 +1,4 @@ +function multiply (num1, num2){ + console.log(num1*num2); +} +module.exports = multiply; \ No newline at end of file diff --git a/modules/subtract.js b/modules/subtract.js new file mode 100644 index 0000000..3013dd3 --- /dev/null +++ b/modules/subtract.js @@ -0,0 +1,4 @@ +function subtract (num1, num2){ + console.log(num1-num2); +} +module.exports = subtract; \ No newline at end of file From 1de39727fb36384af3c3ea4b52a51995fc992140 Mon Sep 17 00:00:00 2001 From: Selena Solis Date: Mon, 1 Jul 2019 16:28:47 -0500 Subject: [PATCH 2/3] assign global variables --- index.js | 27 ++++++++++++++++++++++++--- modules/assignVariable.js | 4 ++++ 2 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 modules/assignVariable.js diff --git a/index.js b/index.js index 2ea0f2c..6c6af78 100644 --- a/index.js +++ b/index.js @@ -3,6 +3,7 @@ const add = require("./modules/add"); const subtract = require("./modules/subtract"); const multiply = require("./modules/multiply"); const divide = require("./modules/divide"); +const assignVariable = require("./modules/assignVariable"); const {lessThan, greaterThan, isEqual, isNotEqual} = require("./modules/boolean"); const rl = readline.createInterface({ @@ -29,13 +30,15 @@ function determineOperator(string){ } else if(operation == '=' || operation == '!'){ let boolOp = string.slice(opLocStart, opLocBoolEnd); - console.log(boolOp); if(boolOp == '==='){ return ["===", opLocStart]; } else if(boolOp == '!=='){ return ["!==", opLocStart]; } + else if (operation == '='){ + return ['=', opLocStart]; + } else{ return false; } @@ -66,16 +69,29 @@ function calculate(answer){ isNotEqual(num1, num2); } } + else{ let charAfterOp = location + 1; let num1Str = expression.slice(0, location).trim(); + let varName = num1Str; let num2Str = expression.slice(charAfterOp, expression.length).trim() let num1 = Number(num1Str); let num2 = Number(num2Str); - if(!num1 || !num2){ + if(operation == '='){ + if (num2){ + assignVariable(varName, num2) + } + else { + let string = num2Str.split(/"/)[1]; + assignVariable(varName, string); + } + + } + else if(!num1 || !num2){ console.log("please enter expression in the following format: ") console.log("number operator number") } + else if (operation === '+'){ add(num1, num2) } @@ -97,6 +113,11 @@ function calculate(answer){ } } else{ - console.log("please enter valid mathematical oprator"); + if(global[answer]){ + console.log(global[answer]); + } + else{ + console.log("please enter valid mathematical oprator"); + } } } \ No newline at end of file diff --git a/modules/assignVariable.js b/modules/assignVariable.js new file mode 100644 index 0000000..96d4f98 --- /dev/null +++ b/modules/assignVariable.js @@ -0,0 +1,4 @@ +function assignVariable (varName, value){ + global[varName] = value; +} +module.exports = assignVariable; \ No newline at end of file From e91a4037c5d1ddaea25203ea8406ef537f1c6f3c Mon Sep 17 00:00:00 2001 From: Selena Solis Date: Wed, 3 Jul 2019 18:59:50 -0500 Subject: [PATCH 3/3] fixed error in determineOperator function --- index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 6c6af78..d4e2549 100644 --- a/index.js +++ b/index.js @@ -21,7 +21,7 @@ function prompt(){ prompt(); function determineOperator(string){ - let regex = /[\/\+\-\*\>\<\={2}\!]/g; + let regex = /[\/\+\-\*\>\<\=\!]/g; let opLocStart = string.search(regex) let opLocBoolEnd = opLocStart+3; let operation = string.charAt(opLocStart); @@ -59,6 +59,7 @@ function calculate(answer){ let num1 = Number(num1Str); let num2 = Number(num2Str); if(!num1 || !num2){ + console.log("please enter expression in the following format: ") console.log("number operation number") }