Решение задачи Булева алгебра с Acmp

Без пояснения   Просмотров: 872


В каждом языке программирования, даже самом простом, есть оператор ветвления, позволяющий проверить истинность логического выражения и, в зависимости от его результата, выполнить то или иное действие. Условие оператора ветвления представляет собой логическое (булевское) выражение, результатом которого может быть либо истина (TRUE), либо ложь (FALSE). Переменные, которые могут участвовать в логическом выражении, называются булевскими (boolean). Булевские переменные могут объединяться в сложные условия при помощи логических операций (функций):

Код

#include <bits/stdc++.h>

using namespace std;

void func(string t)
{
    int pos = t.find(')');
    while(pos + 1){
        int last = t.rfind('(', pos);

        if(t[last - 1] == 'T'){ // если кончается на NOT
            if(t[last + 1] == '1')
                t[last - 3] = '0';
            else{
                t[last - 3] = '1';
            }
            t.erase(last - 2, 5);
        }
        else if(t[last - 1] == 'D'){   // если кончается на AND
            if(t[last + 1] == '0' || t[last + 3] == '0')
                t[last - 3] = '0';
            else{
                t[last - 3] = '1';
            }
            t.erase(last - 2, 7);
        }
        else if(t[last - 1] == 'R'){  // если кончается на OR
            if(t[last + 1] == '0' && t[last + 3] == '0')
                t[last - 2] = '0';
            else{
                t[last - 2] = '1';
            }
            t.erase(last - 1, 6);
        }
        pos = t.find(')');
    }
    if(t == "0")
        cout << "FALSE";
    else
        cout << "TRUE";
    cout << endl;
}
int main()
{
    string s, a;
    cin >> s;
    int n, k;
    cin >> n >> k;
    for(int i = 0; i < n; ++i){
        string t = s;
        for(int j = 0; j < k; ++j){
            char r = '1';
            cin >> a;
            if(a.find("FALSE") + 1)
                r = '0';
            for(int h = 1; h < t.size() - 1; ++h)
                if((t[h + 1] < 'A' || t[h + 1] > 'Z') && (t[h - 1] < 'A' || t[h - 1] > 'Z') && t[h] == a[0])
                   t[h] = r;
        }
        func(t);
    }

    return 0;
}

         

Администратор Photo Автор: Администратор




Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться