0 / 0 / 0
Регистрация: 02.04.2017
Сообщений: 7
1

Вычисление булевых выражений из строки

26.03.2018, 05:27. Показов 876. Ответов 0

Author24 — интернет-сервис помощи студентам
Привет.

Сначала опишу задачу подробно, чтобы не посчитали дичью

Есть необходимость создавать условия для микроконтроллера через веб-форму, условия как простые так и более сложные
C
1
if(var > 200 && var < 300 || var > 500 && var < 700) { выполнить что-то } else { выполнить что-то еще }
Пытаюсь сложить условие, последовательно с простых выражений сделать более сложное и получить результат.
С конструктором проблем нет, простые выражения вычисляются и вбиваются в строку вида 1A0B0A1
Потом, найденный на просторах интернетов код https://ide.geeksforgeeks.org/WHTueJ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <string>
#include <deque>
using namespace std;
 
char cal(char c1, char op, char c2)
{
    int num1, num2;
    num1 = (c1 == '1') ? 1 : 0;
    num2 = (c1 == '1') ? 1 : 0;
    switch(op) {
        case 'A':
            return (num1 & num2) ? '1' : '0';
        case 'B':
            return (num1 | num2) ? '1' : '0';
        case 'C':
            return (num1 ^ num2) ? '1' : '0';
    }
}
 
char process(string s)
{
    deque<char> q;
    char opd1, opd2, opt;
    for(int i = 0; i < s.length(); i++)
        q.push_back(s[i]);
        
    while(true) {
        opd1 = q.front();
        q.pop_front();
        if(q.empty())
            return opd1;
        opt = q.front(); q.pop_front();
        opd2 = q.front(); q.pop_front();
        q.push_front(cal(opd1, opt, opd2));
    }
}
 
int main(void)
{
    cout << process("1C1B1B0A0");
    return 0;
}
должен был вычислить общее условие, но булевые выражения обрабатываются сокращенно, не так как мне нужно. Подскажите пожалуйста, как можно доработать данный код чтобы условие отрабатывалось не как булево? Или может быть есть менее костыльные решения?
Ограничение C++11 и сама железка МК esp8266
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2018, 05:27
Ответы с готовыми решениями:

Правильное преобразование булевых выражений
а) (A\vee B)\wedge (\bar{A}) = \bar{A} \wedge B б) (A\vee B)\wedge (\bar{A}) = A \wedge B в)...

Вычисление непрерывных дробей и выражений. Вычисление полиномов и их производных.
1. Чему равна знакочередующаяся сумма цифр числа n. 2. Даны натуральное число n и...

Вычисление выражений
Составьте программы на языке программирования Pascal, используя условный оператор и оператор выбора.

Вычисление выражений
Помогите пожалуйста разобраться с следующей задачей. Написать это нужно на языке Си (Linux)....

0
26.03.2018, 05:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2018, 05:27
Помогаю со студенческими работами здесь

Вычисление выражений
Кто может подскажите правильно ли я вычисляю выражения A:= Exp(Abs(x-y))+Power(z,3/2); B:=...

Вычисление выражений
Примитивный калькулятор. Вопрос следующий если писать выражение пр: 2+5 или 6-2....то все...

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

Вычисление выражений
Помогите решить, задания на языке C 1. Создать программу для вычисления выражения. 2. Найдите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru