Вычисление формул двузначных булевых функций JavaScript
Разработайте алгоритм, который выполняет следующие действия: Дано: произвольная формула двузначной булевой алгебры(операции конъюнкции, дизъюнкции, отрицания) и значения (0 или 1) ее переменных.
Требуется:
- Ввести формулу и значения ее переменных,
- Распечатать исходные данные,
- Оценить формулу,
- Распечатать результат.
Примечание. Если вы представляете формулу в RPN, то алгоритм ее вычисления прост. Вы можете вручную преобразовать формулу в RPN и ввести ее в свой компьютер в RPN. Другой способ - ввести инфиксную форму формулы и автоматически преобразовать ее в RPN с помощью некоторого доступного алгоритма.
Вот мой код, но он не работает
<script>
let f = prompt("Enter the function, using x,y as operants and such operations: " + "\n" + "+ for disjunction" + "\n" + "* for conjunction" + "\n" + "~ for negation");
let x = +prompt("Enter x(1 or 0) ");
let y = +prompt("Enter y(1 or 0) ");
f.replace('x', x);
f.replace('y', y);
f.replace('*', '&&');
f.replace('+', '||');
f.replace('~', '!');
alert(eval(f));
</script>
Возможно мне стоит выполнять операции таким образом?
//коньюнкция
function min(a, b) {
if (a <= b) {
return a;
}
else {
return b;
}
}
//дизьюнкция
function max(a, b) {
if (a >= b) {
return a;
}
else {
return b;
}
}
//отрицание
function neg(a){
a = (a + 1) % 2;
return a;
}
Но как тогда вычислить финальный результат?
Ответы (1 шт):
как вариант а вариантов много это первое что пришло на ум
const res = (f) => {
let x = +prompt("Enter x(1 or 0) ");
let y = +prompt("Enter y(1 or 0) ");
alert(f(x,y,'disjunction') + f(x,y,'conjunction') + f(x,'negation'))
}
res((a,b,formula) => {
if(!isFinite(b)){
formula = b
}
switch(formula){
case 'disjunction':
return Math.max(a,b)
case 'conjunction':
return Math.min(a,b)
case 'negation':
return (a + 1) % 2
default: return `no current formula ${formula}`
}
})