$(function() { // Iniciamos Jquery
// Validamos la hora para dar la bienvenida a la calculadora
var fecha = new Date();
var msj;
if(fecha.getHours() < 7) {
msj = "Buenas Noches";
}else if(fecha.getHours() < 12) {
msj = "Buenos Días";
}else if(fecha.getHours() < 21) {
msj = "Buenas Tardes";
}else {
msj = "Buenas Noches";
}
document.getElementById("h1").innerHTML = msj;
// Declaramos Variables a utilizar
var numPan = "0"; // Mostrar digito pulsado en la pantalla
var iniNum = 1; // Activar digito pulsado 1=si; 0=no
var comaDecimal = 0; // Control de uso del digito punto o coma 0=no, 1=si
var numGuar = 0; // Guardar digito cuando usamos operaciones binarias
var operCurso = 0; // Conocer cual operación esta en curso
// Función que muestra el digito seleccionado en pantalla
$(".btnum").click(function(e) {
e.preventDefault();
var digNum = $(this).attr("value");
if (numPan === "0" || iniNum == 1) { // Si el estado es inicial, realizamos:
$("#vintro").html(digNum); // Muestra el número en pantalla.
numPan = digNum; // Guarda el número mostrado.
if (digNum === ".") { // Si escribimos una coma antes de pulsar un número:
$("#vintro").html("0."); // Muestra "0.".
numPan = "0" + digNum; // Guarda el número mostrado.
comaDecimal = 1; // Como hemos puesto una coma decimal, cambiamos el estado para no poder poner más.
}
} else { // Si el estado no es inicial, continua escribiendo un número:
if (digNum === "." && comaDecimal == 0) { // Si escribimos una coma decimal por primera vez:
$("#vintro").append(digNum); // Muestra el número en pantalla.
numPan += digNum; // Guarda el número mostrado.
comaDecimal = 1; // Se cambia el estado de la coma para que no se pueda introducir más.
}
// Si intentamos escribir una segunda coma decimal, no se realiza ninguna acción:
else if (digNum == "." && comaDecimal == 1) {}
//Resto de casos: escribir un número del 0 al 9:
else {
var longTotal = numPan.length + 1;
if (screen.width >= 768) {
if (longTotal <= 15) {
$("#vintro").css({ 'font-size': '35px' });
} else if (longTotal > 15 && longTotal < 22) {
$("#vintro").css({ 'font-size': '25px' });
} else {
alert("Debido al tamaño del visor, no se permiten la introducción de más números.");
return false;
}
} else if (screen.width < 768) {
if (longTotal <= 15) {
$("#vintro").css({ 'font-size': '25px' });
} else if (longTotal > 15 && longTotal < 22) {
$("#vintro").css({ 'font-size': '20px' });
} else {
alert("Debido al tamaño del visor, no se permiten la introducción de más números.");
return false;
}
}
$("#vintro").append(digNum); // Muestra el número en pantalla.
numPan += digNum; // Guarda el número mostrado.
}
}
iniNum = 0;
});
// Función que realizar operaciónes binarias
$(".obin").click(function(e) {
e.preventDefault();
calcular(); // En primer lugar realizamos las operaciones pendientes.
numGuar = numPan; // Ponemos el primer número en "espera" o "guardado" para poder escribir el segundo.
var tipoOperacion = $(this).attr("value");
operCurso = tipoOperacion; // Guardamos el tipo de operación binaria.
if (operCurso === "poten") { // Si se pulsa sobre la operación de potencia x^y:
var operacionRealizada = numPan + "^";
var operacionAMostrar = numGuar + "^";
} else {
operacionRealizada = numPan + "" + operCurso;
operacionAMostrar = numGuar + operCurso;
}
var mostrarOperacion = String(operacionRealizada);
$("#voper").html(operacionAMostrar); // Aquí se muestra el mismo número en la pantalla superior del visor.
iniNum = 1; // Se cambia el estado para introducir un número nuevo.
comaDecimal = 0; // Se cambia el estado de la coma para que SI se pueda introducir.
});
// Función para realizar calculo del porcentaje (%)
$(".porc").click(function(e) {
e.preventDefault();
var operacionAMostrar = numGuar + operCurso + numPan + "%";
numPan = numPan / 100;
if (operCurso === "-" || operCurso === "+") {
numPan = numGuar * numPan;
}
$("#voper").html(operacionAMostrar);
iniNum = 1;
comaDecimal = 0;
});
// Funcion para calcular operaciones binarias
function calcular() {
if (operCurso == 0) { // Si no hay ninguna operación pendiente
var solucion = String(numPan);
var mostrarOperacion = String(numPan);
$("#vintro").html(solucion); // Mostramos el mismo número en pantalla.
$("#voper").html(mostrarOperacion); // Aquí se muestra el mismo número en la pantalla superior del visor.
} else { // Si hay una operación pendiente, la resolvemos
if (operCurso === "poten") { // En caso de que la operación sea un potencia de x^y:
var sl = Math.pow(numGuar, numPan); // Se calcula.
var operacionRealizada = numGuar + "P" + numPan + "=";
var operacionAMostrar = numGuar + "" + numPan + "=";
} else { // Si es otro tipo de operación binaria:
sl = numGuar + operCurso + numPan; // Se escribe la operación en una cadena.
operacionRealizada = numGuar + "O" + numPan + "=";
operacionAMostrar = sl + "=";
}
var solucionCalculo = eval(sl); // Convertimos la cadena a código y resolvemos.
solucion = String(solucionCalculo);
mostrarOperacion = String(operacionRealizada);
$("#vintro").html(solucion); // Muestra la solución en el visor.
$("#voper").html(operacionAMostrar); // En el visor superior mostramos la operación a realizar.
numPan = solucion; // Guarda la solución para realizar otra operación a continuación.
operCurso = 0; // Cambiamos el estado para indicar que no hay operaciones pendientes.
iniNum = 1; // Se cambia el estado para introducir un número nuevo.
}
}
// Función para mostrar los resultados de las diferentes operaciones
$(".calcular").on("click", function() {
if (operCurso == 0) { // Si no hay ninguna operación pendiente:
var solucion = String(numPan);
var mostrarOperacion = String(numPan);
$("#vintro").html(solucion); // Mostramos el mismo número en pantalla.
$("#voper").html(mostrarOperacion); // Aquí se muestra el mismo número en la pantalla superior del visor.
} else { // Si hay una operación pendiente, la resolvemos
if (operCurso === "poten") { // En caso de que la operación sea un potencia de x^y:
var sl = Math.pow(numGuar, numPan); // Se calcula.
var operacionRealizada = numGuar+"P"+numPan+"=";
var operacionAMostrar = numGuar+""+numPan+""+"=";
} else
if (operCurso === "porc") {
numPan = numPan * 100;
operacionAMostrar = numGuar + operCurso + numPan + "%";
} else { // Si es otro tipo de operación binaria:
var sl = numGuar + operCurso + numPan; // Se escribe la operación en una cadena.
var operacionRealizada = numGuar + "O" + numPan + "=";
var operacionAMostrar = sl + "=";
}
var solucionCalculo = eval(sl); // Convertimos la cadena a código y resolvemos.
solucion = String(solucionCalculo);
mostrarOperacion = String(operacionRealizada);
$("#vintro").html(solucion); // Muestra la solución en el visor.
$("#voper").html(operacionAMostrar); // En el visor superior mostramos la operación a realizar.
numPan = solucion; // Guarda la solución para realizar otra operación a continuación.
operCurso = 0; // Cambiamos el estado para indicar que no hay operaciones pendientes.
iniNum = 1; // Se cambia el estado para introducir un número nuevo.
}
});
// Funcion para limpiar la pantlla
$(".clear").click(function() {
$("#vintro").html("0"); // Quitamos valores de la pantalla
$("#voper").html(""); // Quitamos operaciones de la pantalla
numPan = "0"; // reiniciar número en pantalla
comaDecimal = 0; // Se cambia el estado de la coma para que SI se pueda introducir.
numGuar = 0; // Seteamos a 0 el valor del número en espera.
operCurso = 0; // Cambiamos el estado para indicar que no hay operaciones pendientes.
iniNum = 1; // Se cambia el estado para introducir un número nuevo.
});
// Función calcular el cuadrado de un número
$(".cuadrado").on("click", function() {
var solucionElevadoCuadrado = Math.pow(numPan, 2); // Se resuelve la potencia al cuadrado.
var operacionRealizada = numPan + "^2=";
var operacionAMostrar = numPan + "²=";
var solucion = String(solucionElevadoCuadrado); // Pasamos la solución a String.
var mostrarOperacion = String(operacionRealizada);
$("#vintro").html(solucion); // Muestra la solución en el visor.
$("#voper").html(operacionAMostrar); // En el visor superior mostramos la operación a realizar.
numPan = solucion; // Guarda la solución para realizar otra operación a continuación.
operCurso = 0; // Cambiamos el estado para indicar que no hay operaciones pendientes.
iniNum = 1; // Se cambia el estado para introducir un número nuevo.
});
// Funcion calcular Raiz Cuadrada
$(".raiz").on("click", function() {
var solucionRaizCuadrada = Math.sqrt(numPan); // Se resuelve la raíz cuadrada.
var operacionRealizada = "R" + numPan + "=";
var operacionAMostrar = "√" + numPan + "=";
var solucion = String(solucionRaizCuadrada); // Pasamos la solución a String.
var mostrarOperacion = String(operacionRealizada);
$("#vintro").html(solucion); // Muestra la solución en el visor.
$("#voper").html(operacionAMostrar); // En el visor superior mostramos la operación a realizar.
numPan = solucion; // Guarda la solución para realizar otra operación a continuación.
operCurso = 0; // Cambiamos el estado para indicar que no hay operaciones pendientes.
iniNum = 1; // Se cambia el estado para introducir un número nuevo.
});
// Funcion para calcular el inverso de un número
$(".inverso").on("click", function() {
var nx = Number(numPan); // Convertir el número de pantalla (String) a número.
var solucionInversa = (1 / nx); // Se resuelve la operación inversa.
var operacionRealizada = 1 + "/" + numPan + "=";
var operacionAMostrar = "1/" + numPan + "=";
var solucion = String(solucionInversa); // Pasamos la solución a String.
var mostrarOperacion = String(operacionRealizada);
$("#vintro").html(solucion); // Muestra la solución en el visor.
$("#voper").html(operacionAMostrar); // En el visor superior mostramos la operación a realizar.
numPan = solucion; // Guarda la solución para realizar otra operación a continuación.
operCurso = 0; // Cambiamos el estado para indicar que no hay operaciones pendientes.
iniNum = 1; // Se cambia el estado para introducir un número nuevo.
});
// Función para realizar sumatoria de números
$(".sumatoria").on("click", function() {
var num = numPan;
var lista = num.split(",");
var i = 0,
acc = 0;
while (i < lista.length) {
acc = acc + (+lista[i]);
i++;
}
var solucionSumatoria = acc;
var operacionRealizada = "S(" + numPan + ")=";
var operacionAMostrar = "∑(" + numPan + ")=";
var solucion = String(solucionSumatoria); // Pasamos la solución a String.
var mostrarOperacion = String(operacionRealizada);
$("#vintro").html(solucion); // Muestra la solución en el visor.
$("#voper").html(operacionAMostrar); // En el visor superior mostramos la operación a realizar.
numPan = solucion; // Guarda la solución para realizar otra operación a continuación.
operCurso = 0; // Cambiamos el estado para indicar que no hay operaciones pendientes.
iniNum = 1; // Se cambia el estado para introducir un número nuevo.
});
// Función para calcular el producto de números
$(".producto").on("click", function() {
var num = numPan;
var lista = num.split(",");
for (var i = 0, acc = 1; i < lista.length; i++) {
acc *= +lista[i];
}
var solucionProducto = acc;
var operacionRealizada = "P(" + numPan + ")=";
var operacionAMostrar = "∏(" + numPan + ")=";
var solucion = String(solucionProducto); // Pasamos la solución a String.
var mostrarOperacion = String(operacionRealizada);
$("#vintro").html(solucion); // Muestra la solución en el visor.
$("#voper").html(operacionAMostrar); // En el visor superior mostramos la operación a realizar.
numPan = solucion; // Guarda la solución para realizar otra operación a continuación.
operCurso = 0; // Cambiamos el estado para indicar que no hay operaciones pendientes.
iniNum = 1; // Se cambia el estado para introducir un número nuevo.
});
// Función para obtener la potencia de una base (Binaria)
$(".potencia").on("click", function() {
var solucionElevadoN = Math.pow(2, numPan); // Se resuelve 2 elevado a N.
var operacionRealizada = 2 + "" + numPan + "=";
var operacionAMostrar = 2+""+numPan+""+"=";
var solucion = String(solucionElevadoN); // Pasamos la solución a String.
var mostrarOperacion = String(operacionRealizada);
$("#vintro").html(solucion); // Muestra la solución en el visor.
$("#voper").html(operacionAMostrar); // En el visor superior mostramos la operación a realizar.
numPan = solucion; // Guarda la solución para realizar otra operación a continuación.
operCurso = 0; // Cambiamos el estado para indicar que no hay operaciones pendientes.
iniNum = 1; // Se cambia el estado para introducir un número nuevo.
});
// Función para obtener el número factorial
$(".factorial").on("click", function() {
var comprobarDecimales = numPan % 1;
if (numPan < 0 || comprobarDecimales) {
alert("Debe introducir un número NATURAL, es decir, entero positivo.");
} else {
var solucionFactorial = 1;
for (var i = 1; i <= numPan; i++) {
solucionFactorial *= i;
}
var operacionRealizada = numPan + "!=";
var operacionAMostrar = numPan + "!=";
var solucion = String(solucionFactorial); // Pasamos la solución a String.
var mostrarOperacion = String(operacionRealizada);
$("#vintro").html(solucion); // Muestra la solución en el visor.
$("#voper").html(operacionAMostrar); // En el visor superior mostramos la operación a realizar.
numPan = solucion; // Guarda la solución para realizar otra operación a continuación.
operCurso = 0; // Cambiamos el estado para indicar que no hay operaciones pendientes.
iniNum = 1; // Se cambia el estado para introducir un número nuevo.
}
});
// Función para obtener el entero de un número
$(".entero").on("click", function() {
if (numPan >= 0) { // Si el número es mayor o igual a 0:
var solucionEntero = Math.floor(numPan); // Realizamos el redondeo al entero más bajo (más próximo a 0).
} else { // Si es menor de 0:
var solucionEntero = Math.ceil(numPan); // Realizamos el redondeo al entero más alto (más próximo a 0).
}
var solucion = String(solucionEntero); // Pasamos la solución a String.
$("#vintro").html(solucion); // Muestra la solución en el visor.
numPan = solucion; // Guarda la solución para realizar otra operación a continuación.
operCurso = 0; // Cambiamos el estado para indicar que no hay operaciones pendientes.
iniNum = 1; // Se cambia el estado para introducir un número nuevo.
});
// Función para colocar signo + o - al número
$(".masmeno").on("click", function() {
var nx = Number(numPan); // Convertir el número de pantalla (String) a número.
var solucionSigno = -nx; // Se le cambiar de signo.
var operacionRealizada = solucionSigno;
var solucion = String(solucionSigno); // Pasamos la solución a String.
var mostrarOperacion = String(operacionRealizada);
$("#vintro").html(solucion); // Muestra la solución en el visor.
$("#voper").html(solucionSigno); // En el visor superior mostramos la operación a realizar.
numPan = solucion; // Guarda la solución para realizar otra operación a continuación.
});
});