dimaudi писал(а):
По совету преподавателя для этого можно использовать два типа данных очередь (можно и стек), где в первую кладутся операнды, а во вторую операции. А также использовать обратную или прямую польскую запись...
Что-нибудь типа
алгоритма Дейкстры, наверное. Если непонятно, погуглите по словосочетанию «разбор/вычисление арифметического выражения» и сделайте наподобие.
Наверняка ДНФ можно разобрать и посчитать с меньшими затратами, чем произвольную логическую формулу, но неохота думать/вспоминать/искать.
Есть, конечно, наивный рекурсивный алгоритм (Рутисхаузера): ищем главный знак и возвращаем значение соответствующей операции с подформулами, вычисленными по этому же алгоритму. Тут, правда, тот недостаток, что при измении лежащих на дне рекурсии значений переменных приходится формулу переразбирать, ибо нет никакого удобного промежуточного (по типу обратной польской записи) способа представления.
В общем, так: преобразуем формулу в обратную польскую нотацию алгоритмом Дейкстры, а уж её-то мы вычислить для соответствующих значений переменных сможем легко. Вы, конечно, понимаете, что перед разбором может понадобиться выкинуть из формулы все пробелы и, возможно, добавить значки конъюнкции.