169 lines
4.6 KiB
JavaScript
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;
|
|
}
|
|
}
|
|
|