163 lines
3.5 KiB
JavaScript
163 lines
3.5 KiB
JavaScript
let displayValue = 0;
|
|
let operator = 0;
|
|
let num1 = 0;
|
|
let num2 = 0;
|
|
const specialChars = ['!', '^', '*', '/', '+', '-'];
|
|
|
|
const add = function(num1, num2) {
|
|
let sum = num1 + num2;
|
|
return sum;
|
|
};
|
|
|
|
const subtract = function(num1, num2) {
|
|
let sum = num1 - num2;
|
|
return sum;
|
|
};
|
|
|
|
// const sum = function(array) {
|
|
// let sum = 0;
|
|
// if (array.length > 0) {
|
|
// for (i = 0; i < array.length; i++ ) {
|
|
// sum += array[i];
|
|
// }
|
|
// } else {
|
|
// let sum = 0;
|
|
// return sum;
|
|
// }
|
|
// return sum;
|
|
// };
|
|
|
|
const multiply = function(num1, num2) {
|
|
let sum = 1;
|
|
sum = num1 * num2;
|
|
return sum;
|
|
|
|
};
|
|
|
|
const divide = function(num1, num2) {
|
|
let sum = num1 / num2;
|
|
return sum;
|
|
}
|
|
|
|
const power = function(num1, num2) {
|
|
let sum = 1;
|
|
for (i = 0; i < num2; i++) {
|
|
sum = sum * num1;
|
|
}
|
|
return sum;
|
|
};
|
|
|
|
const factorial = function(num) {
|
|
let sum = 1;
|
|
for (i = num; i > 0; i--) {
|
|
sum = sum * i;
|
|
}
|
|
return sum;
|
|
};
|
|
|
|
const operate = function(op, num1, num2) {
|
|
switch (op) {
|
|
case '+':
|
|
return add(num1, num2);
|
|
case '-':
|
|
return subtract(num1, num2);
|
|
case '*':
|
|
return multiply(num1, num2);
|
|
case '/':
|
|
return divide(num1, num2);
|
|
case '^':
|
|
return power(num1, num2);
|
|
case '!':
|
|
return factorial(num1);
|
|
}
|
|
}
|
|
function updateDisplay(id) {
|
|
switch (id) {
|
|
case '+':
|
|
case '-':
|
|
case '*':
|
|
case '/':
|
|
case '^':
|
|
case '!':
|
|
case '.':
|
|
let includesSpec = specialChars.some(char => display.textContent.includes(char));
|
|
if (includesSpec) {
|
|
let num2 = display.textContent.split(/[\/+^!-*-]/);
|
|
num1 = num2[0];
|
|
num1 = parseFloat(num1);
|
|
num2 = num2[1];
|
|
num2 = parseFloat(num2);
|
|
let currentAnswer = operate(operator, num1, num2);
|
|
operator = id;
|
|
display.textContent = currentAnswer + id;
|
|
displayValue = display.textContent;
|
|
break;
|
|
|
|
}
|
|
else {
|
|
num1 = display.textContent;
|
|
num1 = parseFloat(num1);
|
|
operator = id;
|
|
display.textContent += id;
|
|
displayValue = display.textContent;
|
|
console.log('false');
|
|
break;
|
|
}
|
|
case '1':
|
|
case "2":
|
|
case "3":
|
|
case "4":
|
|
case "5":
|
|
case "6":
|
|
case '7':
|
|
case '8':
|
|
case '9':
|
|
case '0':
|
|
if (displayValue === 0) {
|
|
display.textContent = '';
|
|
display.textContent = id;
|
|
displayValue = display.textContent;
|
|
}
|
|
else {
|
|
display.textContent += id;
|
|
displayValue = display.textContent;
|
|
};
|
|
break;
|
|
case 'back':
|
|
let newString = display.textContent.slice(0, -1);
|
|
display.textContent = newString
|
|
displayValue = display.textContent;
|
|
console.log('back');
|
|
break;
|
|
case 'equals':
|
|
let num2 = display.textContent.split(/[\/+^!-*-]/);
|
|
num1 = num2[0];
|
|
num1 = parseFloat(num1);
|
|
num2 = num2[1];
|
|
num2 = parseFloat(num2);
|
|
let answer = operate(operator, num1, num2)
|
|
display.textContent = answer;
|
|
displayValue = answer;
|
|
console.log('equals');
|
|
break;
|
|
case 'clear':
|
|
display.textContent = '0';
|
|
displayValue = 0;
|
|
console.log('clear');
|
|
break;
|
|
}
|
|
}
|
|
|
|
const display = document.querySelector('.display');
|
|
|
|
const buttons = document.querySelectorAll('.btn');
|
|
buttons.forEach((button) => {
|
|
button.addEventListener('click', (e) => {
|
|
// operate(button.id);
|
|
updateDisplay(button.id);
|
|
});
|
|
});
|
|
|
|
// let answer = operate("multiply", 1, 2);
|
|
|
|
// console.log(answer);
|