BODMAS Порядок действий - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь построить калькулятор. Калькулятор теперь может выполнять basi c arithmeti c, если я даю ему только одну операцию, например 2 * 2 или 2 + 10, но мне нужно иметь возможность выполнять более сложные операции, такие как:

(2 + 2 * 10–3 / 2)

Я пытался создать функцию, которая может оценивать в порядке BODMAS. Однако я немного застрял. Обратите внимание, что я хочу избежать использования метода eval ().

Я пробовал l oop через массив и оценивать каждую операцию за раз. Однако проблема в том, что он оставляет определенные операции в массиве (см. Пример). Вы можете видеть, что я также попытался сбросить инициализатор в l oop, чтобы решить эту проблему, но когда я пытаюсь это сделать, результат будет неправильным.

В примерах, не показанных здесь, я также некоторое время пробовал l oop, но безрезультатно.

Думаю, я близок к правильному выводу, но мне просто нужна помощь, чтобы добраться до него.

Кто-нибудь сможет посоветовать? Спасибо! И извините, если это неясно, все еще новичок в программировании, а также в правильном задании вопросов.

function multiply(a,b) {
        return a * b;
      }

    function subtract(a,b) {
        return a - b;
      }

    function divide(a,b) {
        return a / b;
      }

    function add(a,b) {
        return a + b;
      }

      function operate(arr) {
        for (var i = 0; i < arr.length; i++) {
          if (arr[i] === '*' || arr[i] === 'x' || arr[i] === 'X') {
          arr[i] = multiply(arr[i-1], arr[i+1])
          arr.splice(i-1, 1);
          arr.splice(i, 1);
          }
          if (arr[i] === '/' || arr[i] === '%' ) {
          arr[i] = divide(arr[i-1], arr[i+1])
          arr.splice(i-1, 1);
          arr.splice(i, 1);
          }
          if (arr[i] === '+') {
          arr[i] = add(arr[i-1], arr[i+1])
          arr.splice(i-1, 1);
          arr.splice(i, 1);
          }
          if (arr[i] === '-') {
          arr[i] = subtract(arr[i-1], arr[i+1])
          arr.splice(i-1, 1);
          arr.splice(i, 1);
          }
       // if (arr.length > 1) {i = 0}
      } return arr
    }


    operate([10, '*', 12, '+', 4, '+', 4, '*', 2]) // should be 132 


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...