Files
2023-09-10 12:00:23 +08:00

169 lines
4.6 KiB
JavaScript

// Get the screen element
var screen = document.getElementById("screen");
// Get the button elements
var buttons = document.getElementsByClassName("button");
// Declare a variable to store the current input
var input = "";
// Declare a variable to store the current result
var result = 0;
// Declare a variable to store the current operator
var operator = "";
// Declare a variable to store the current function
var func = "";
// Declare a variable to indicate if the input is valid
var valid = true;
// Loop through the buttons and add event listeners
for (var i = 0; i < buttons.length; i++) {
buttons[i].addEventListener("click", function() {
// Get the value of the clicked button
var value = this.innerHTML;
// Check if the value is a number or a dot
if (isNumber(value) || value == ".") {
// Append the value to the input
input += value;
// Display the input on the screen
screen.innerHTML = input;
}
// Check if the value is an operator
else if (isOperator(value)) {
// Check if there is a previous input and operator
if (input && operator) {
// Calculate the result based on the previous input and operator
result = calculate(result, parseFloat(input), operator);
// Display the result on the screen
screen.innerHTML = result;
}
// Check if there is no previous input but there is a result
else if (!input && result) {
// Do nothing, keep the result on the screen
}
// Check if there is an input but no result
else if (input && !result) {
// Set the result to the input
result = parseFloat(input);
// Display the result on the screen
screen.innerHTML = result;
}
// Clear the input
input = "";
// Set the operator to the value
operator = value;
}
// Check if the value is a function
else if (isFunction(value)) {
// Set the function to the value
func = value;
// Check if there is an input
if (input) {
// Calculate the result based on the input and function
result = calculateFunction(parseFloat(input), func);
// Display the result on the screen
screen.innerHTML = result;
// Clear the input
input = "";
}
// Check if there is no input but there is a result
else if (!input && result) {
// Calculate the result based on the result and function
result = calculateFunction(result, func);
// Display the result on the screen
screen.innerHTML = result;
}
}
// Check if the value is equal sign
else if (value == "=") {
// Check if there is an input and an operator
if (input && operator) {
// Calculate the result based on the input and operator
result = calculate(result, parseFloat(input), operator);
// Display the result on the screen
screen.innerHTML = result;
// Clear the input and operator
input = "";
operator = "";
}
}
// Check if the value is clear sign
else if (value == "C") {
// Clear everything
input = "";
result = 0;
operator = "";
func = "";
valid = true;
// Display zero on the screen
screen.innerHTML = 0;
}
});
}
// A function to check if a value is a number
function isNumber(value) {
return !isNaN(value);
}
// A function to check if a value is an operator
function isOperator(value) {
return value == "+" || value == "-" || value == "*" || value == "/";
}
// A function to check if a value is a function
function isFunction(value) {
return (
value == "√" ||
value == "sin" ||
value == "cos" ||
value == "tan" ||
value == "log" ||
value == "^"
);
}
// A function to calculate the result based on two numbers and an operator
function calculate(x, y, op) {
switch (op) {
case "+":
return x + y;
case "-":
return x - y
case "*":
return x * y;
case "/":
return x / y;
case "^":
return Math.pow(x, y);
default:
return 0;
}
}
// A function to calculate the result based on a number and a function
function calculateFunction(x, f) {
switch (f) {
case "√":
return Math.sqrt(x);
case "sin":
return Math.sin(x);
case "cos":
return Math.cos(x);
case "tan":
return Math.tan(x);
case "log":
return Math.log(x);
default:
return 0;
}
}