Estoy desarrollando una calculadora de consola javascript simple y necesito implementar una matriz/lista. Mi idea actual es crear una matriz con tres enteros/elementos (que el usuario completaría), luego (dependiendo de lo que el usuario quiera), los primeros dos elementos se sumarían/restarían/dividirían/multiplicarían, y luego el último el elemento se sumaría/restaría/dividiría/multiplicaría por separado (sin depender del primer operador) con la respuesta de los dos primeros elementos.
La matriz actual que tengo se ve así:
var equfirst = ["num1", "num2", "num3"];Todos los elementos de la matriz serían proporcionados por el usuario.
Primero se operaría "num1" y "num2", luego "num3" (como se indicó anteriormente). O, ¿habría una forma separada siguiendo el orden de las operaciones donde los números podrían operarse sin un orden específico?
¿Quizás la notación polaca inversa puede ser útil aquí?
RPN facilita la especificación de números y operadores de forma secuencial sin tener que usar paréntesis. Una implementación simple de JavaScript podría ser esta:
function rpn(inps) { // Reverse Polish Notation calculator const st = []; // the stack inps.forEach(t => { if (t.length==0) return; let k = st.length - 2; // index of penultimate element on stack if (!isNaN(t)) st.push(+t); // a numeric value (operand) else switch (t) { // an operator case "+": st[k] += st.pop(); break; case "-": st[k] -= st.pop(); break; case "*": st[k] *= st.pop(); break; case "/": st[k] /= st.pop(); break; case "**": st[k] **= st.pop(); break; } }); return st.pop() } // examples: const inpArrs=[ [7,4,"-",5,"*"], // (7-4)*5= 15 [7,4,5,"*","-"], // 7- 4*5=-13 [5,7,"+",4,"/"], // (5+7)/4= 3 // or, something more complicated: // Pythagoras's theorem [3,3,"*",4,4,"*","+",.5,"**"] // sqrt(3²+4²)=5 ]; console.log(inpArrs.map(rpn)); // a commented input format: const eqn="The sum of 3, 4 and 5 in RPN is: 3 4 5 + + = "; console.log(eqn+rpn(eqn.split(" ")));Como los elementos de la matriz de entrada se verifican para que sean numéricos o iguales a uno de una lista dada de operadores, todos los demás tipos de entrada se ignoran. Por lo tanto, las cadenas pueden verse como "comentarios".