Я пытаюсь построить калькулятор. Калькулятор теперь может выполнять 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