How to put the operation (sum, multiplication) within a variable

Asked

Viewed 835 times

2

Good morning!

I am studying programming logic with JS and would like to know how to ask the user to type the operation, so the JS interprets this and generates the result...

 <script>
     var n1 = prompt('Digite um número');
     n1 = parseInt(n1);
     var n2 = prompt('Digite outro número');
     n2 = parseInt(n2);
     var operacao = prompt('Digite a operação:')

     var resultado = (n1+operacao+n2);


     alert("O resultado da mutiplicação é: " + resultado)
 </script>

Thanks in advance

  • 1

    For this didactic exercise, the advised var resultado = eval((n1+operacao+n2)); solves, but for better learning, you would have to create a function that checks the operator and whether n1 and N2 were correctly reported as numbers to get the expected result, with N2 plus checking not being equal to zero in the split operation.

  • 2

5 answers

1

You can use if to check the operation, example:

    <script>
         var n1 = prompt('Digite um número');
         n1 = parseInt(n1);
         var n2 = prompt('Digite outro número');
         n2 = parseInt(n2);
         var operacao = prompt('Digite a operação:')

       //Podes ate testar se é um dos operadores que  o usuário digitou
        if(operacao !=="-" ||operacao !=="+" ||operacao !=="/" ||operacao !=="*"){
           alert("Informe um operador Válido");
           return false;   
         }

 //Pode fazer um if pra testar tbm se é numero ou letra que digitou e por ai vaiii

         var resultado = (n1+operacao+n2);

             if(operacao ==="+")
                resultado = n1 + n2;

             if(operacao ==="*")
                resultado = n1 * n2;


               if(operacao ==="/" && n2 > 0)
                resultado = n1 / n2;

              if(operacao ==="-")
                resultado = n1 - n2;




         alert("O resultado da Operação é: " + resultado)
     </script>

1

In Javascript it is not possible, at the syntactic level, to pass an arithmetic operator as argument. What you can do is merge the input numbers into an array and use the method Array.prototype.reduce() to perform a specific reduction function which in this case would be an arithmetic function indicated by a user-defined string.

//  Cada índice desse objeto corresponde a uma operação aritmética 
//a ser passada por referência
let operaçãoAritimética = {
  '+': function(x, y) {
    return x + y;
  },
  '-': function(x, y) {
    return x - y;
  },
  '*': function(x, y) {
    return x * y;
  },
  '/': function(x, y) {
    return x / y;
  }
};

let valores = [];
valores.push(parseInt(prompt('Digite um número')));
valores.push(parseInt(prompt('Digite outro número')));

let operação = prompt('Digite a operação(+, -, *, /):')

//  Cada string passada em operação corresponde a uma função redutora
//aplicada em valores.
let result = valores.reduce(operaçãoAritimética[operação]);

console.log(result);

  • 1

    Could I explain the negative vote?

0

The best way to solve your case is by using a case switch...:

var resultado = 0
switch (operacao){
  case '+':
    resultado = n1 + n2
    break
  case '-':
    resultado = n1 - n2
    break
  case '*':
    resultado = n1 * n2
    break
  case '/':
    resultado = n1 / n2
    break
  default:
    alert('operação não permitida')
    break

0

A simple way to do what you want is by using the function val Javascript, but it is a dangerous function, should be used with caution in the creation of systems. Since you are studying only algorithms, I don’t see much problem in using it. This function computes (interprets) a string as code. The string, when passed to it, runs, as if you typed it on the console.

I will do below an example of what you want using this function.

function efetuaOperacao(){
   var n1 = prompt('Digite um número');
   n1 = parseInt(n1);
   var n2 = prompt('Digite outro número');
   n2 = parseInt(n2);
   var operacao = prompt('Digite a operação:')
   var resultado = eval(n1+operacao+n2);
   alert('O resultado da operação é ' + resultado + '.')
}

efetuaOperacao()

-1

One option is to use the operator val

However, it can lead to problems, since the context of the JS will be exposed in the commands of the val.

An ideal but complex solution would be to create something like a compiler.

  • In fact, the solution that I proposed transcends the idea of learning programming logic, I do not recommend that you use, the ideal solution would be the ones presented below, as that one

Browser other questions tagged

You are not signed in. Login or sign up in order to post.