const teclas = document.querySelectorAll('.tecla'); var screen = document.getElementById("screen"); var screenAnterior = document.getElementById("screen-anterior"); var entrada_anterior=""; var dot_posible = true; var escribir = function(contenido) { switch (getTipo(contenido)) { case "num": switch (getTipo(entrada_anterior)) { case "num": case "": screen.value = Number(screen.value + contenido) break; case "op": screen.value = contenido break; case "dot": screen.value = Number(screen.value + contenido) break; case "eq": screen.value = contenido screenAnterior.innerHTML = "" break; default: break; } break; case "op": case "eq": let ls = screenAnterior.innerHTML.length-1; if(screen.value.length==0 && screenAnterior.innerHTML.length==0) return; switch (getTipo(entrada_anterior)) { case "num": case "dot": if(esOperador(screenAnterior.innerHTML[ls])){ let a = screenAnterior.innerHTML.substring(0,ls); let b = screen.value screen.value = operar(Number(a),Number(b),screenAnterior.innerHTML[ls]) if (getTipo(contenido)=="eq") { screenAnterior.innerHTML += b + contenido; } else { screenAnterior.innerHTML = screen.value + contenido; } } else{ screenAnterior.innerHTML = Number(screen.value) + contenido; } break; case "op": screenAnterior.innerHTML = screenAnterior.innerHTML.substring(0,ls) + contenido; break; case "eq": screenAnterior.innerHTML = Number(screen.value) + contenido; default: break; } dot_posible = true; break; case "dot": if(dot_posible){ switch (getTipo(entrada_anterior)) { case "num": dot_posible = false; screen.value = screen.value + contenido; break; default: break; } } break; default: break; } entrada_anterior = contenido; }; function esNumero(valor){ return !isNaN(Number(valor)) } function esOperador(valor){ switch (valor) { case "+": case "-": case "/": case "*": return true; default: return false; } } function getTipo(valor){ if(esNumero(valor)) return "num"; if(esOperador(valor)) return "op"; if(valor=="=") return "eq"; if(valor==".") return "dot"; return valor; } function operar(a,b,op){ switch (op) { case "+": return a + b; case "-": return a - b; case "/": return a / b; case "*": return a * b; } } teclas.forEach(el => el.addEventListener('click', event =>{escribir(event.target.innerHTML)})); document.addEventListener('keypress',event => {escribir(event.key)})