NUEVA solución (SIN COMANDO EVAL) aqui se aplica en dos oportunidades el codigo do {} while () para la calculadora. En la primera parte se recibe una entrada por consola los datos y los evalue para mostrar el resultado, entonces la unica forma de salir del ciclo y hacer otra cosas seria tipeando "exit" en la entrada, lo cual terminaria el ciclo do while. Actualizando la respuesta la segunda parte de usar el codigo do {} while() es ahora donde se evalua la expresion aritmetica sin usar eval() tambien esta funcion cumple con el do {} while () al evaluar la cadena para sacar los operadores, numeradores y denominadores, con cada operacion mientras va acomulando el valor anterior y se procede a ejecutar el siguiente calculo hasta concluir todas las operaciones de la cadena y se termina el ciclo, el nuevo codigo emplea expresiones regulares por lo que se coloca el link para ampliar informacion. link de expresiones regulares: Adjunto nuevo codigo documentado de calculadora con do {} while() en el area de ejecucion:
// funcion de calculadora con do {} while() function calculadora() { var correr = true; // var de salida // para historial de calculos do { var entrada = prompt("Calculadora lineal (coloque su operacion / para salir tipee: exit)"); if (entrada=='exit') { correr=false; alert('Adios..') } else { calculo = calculoSinEval(entrada); // evaluacion de expresion salida = entrada + ' = ' + calculo; alert('Resultado de : ' + salida); // crear nueva li para historico de calculo var node = document.createElement("LI"); var textnode = document.createTextNode(salida); node.appendChild(textnode); document.getElementById("historico").appendChild(node); } } while (correr); }; // funcion para calcular sin usar eval() function calculoSinEval(entrada) { // declaracion de variables usadas var valorA=0; var valorB=0; var calculo =0; var operador=''; var ciclo =true; var paso=0; var cadena =entrada; // entrada de operacion de calculo var expNum = /[\d|.|]+/; // exp para numeros int / flotante var expOper = /[-|\|+|-|*|//]/; // exp para operador + - * / do { paso++; // pone ultimo valor calculado para volver a operar if (paso>1) { cadena = calculo.toString().concat(cadena); } // 1) PARA el primer valor valorA= cadena.match(expNum); // tomar numero encontrado por exp de numero if (valorA==null) { break; } cadena= cadena.replace(valorA, ""); // quitar numero encontrado ciclo = (valorA.length-length==0)? false : true; // si no se consigue el primer numero se sale // 2) PARA el segundo valor valorB= cadena.match(expNum); // tomar numero encontrado por exp de numero cadena= cadena.replace(valorB, ""); // quitar numero encontrado // 3) Para el operador operador= cadena.match(expOper); // tomar numero encontrado por exp de numero cadena= cadena.replace(operador, ""); // quitar numero encontrado // si no se consigue operador se sale del ciclo. if (operador==null) { break; } operador=operador.toString(); // convierte operador en string para el switch // calculo de operacion artimeticas switch (operador) { case '+': calculo = parseFloat(valorA) + parseFloat(valorB); break; case '-': calculo = parseFloat(valorA) - parseFloat(valorB); break; case '*': calculo = parseFloat(valorA) * parseFloat(valorB); break; case '/': calculo = parseFloat(valorA) / parseFloat(valorB); break; default: calculo=null; ciclo = false; // si falla el calculo se sale; break; } // si no hay mas contenido se sale del ciclo if (cadena.length<=1) { ciclo = false; } } while (ciclo); return calculo; // salida de calculo } // fin de funcion calculoSinEval() <h2>Calculadora lineal</h2> <p> Colocque su calculo ej: 5 + 5</p> <p> para Salir tipee: exit</p> <input type="button" value="pulse iniciar"> <ul> </ul> Basandome en esta idea hice el siguiente codigo de calculadora: <script> // funcion de calculadora con do {} while() function calculadora() { var correr = true; // var de salida // para historial de calculos do { var entrada = prompt("Calculadora lineal (coloque su operacion / para salir tipee: exit)"); if (entrada=='exit') { correr=false; alert('Adios..') } else { calculo = eval(entrada); // evaluacion de expresion salida = entrada + ' = ' + calculo; alert('Resultado de : ' + salida); // crear nueva li para historico de calculo var node = document.createElement("LI"); var textnode = document.createTextNode(salida); node.appendChild(textnode); document.getElementById("historico").appendChild(node); } } while (correr); }; </script>Explicacion: 1) Hice una funcion que tiene un ciclo do {} while() y se llama con el boton "pulsar iniciar". 2) se declara y asigna la variable correr como true para el ciclo do while() ella al ponerla como false terminara el ciclo. 3) La variable entrada recibe los datos del prompt() para su calculo y evaluacion. 4) si (entrada = "exit") entonces se termina el ciclo al asignar a la variable correr = false. 5) La variable calculo ejecuta el comando eval() que evalua una expresion dentro de la variable entrada. 6) La variable salida arma la operacion y resultado 7) Con el comando alert() mostramos la variable salida HiSTORICO DE OPERACIONES 8) Se crea un nodo para agregar una etiqueta LI en UL para el historial 9) Creamos un valor al node con la variable salida 10) Asignamos el valor del node con la etiqueta creada LI 11) Agregamos la etiqueta creada LI al UL con id="historico", el cual sera mostrado una vez finalizado el ciclo do while Ejecucion del codigo:
// funcion de calculadora con do {} while() function calculadora() { var correr = true; // var de salida // para historial de calculos do { var entrada = prompt("Calculadora lineal (coloque su operacion / para salir tipee: exit)"); if (entrada=='exit') { correr=false; alert('Adios..') } else { calculo = eval(entrada); // evaluacion de expresion salida = entrada + ' = ' + calculo; alert('Resultado de : ' + salida); // crear nueva li para historico de calculo var node = document.createElement("LI"); var textnode = document.createTextNode(salida); node.appendChild(textnode); document.getElementById("historico").appendChild(node); } } while (correr); }; <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta content="width=<device-width>, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <h2>Calculadora lineal</h2> <p> Colocque su calculo ej: 5 + 5</p> <p> para Salir tipee: exit</p> <input type="button" value="pulse iniciar"> <ul> </ul> </head> <body> </body> </html> Espero que sea de ayuda... (责任编辑:) |