Pagini recente » Cod sursa (job #2221756) | Cod sursa (job #2392440) | Cod sursa (job #659819) | Cod sursa (job #361470) | Cod sursa (job #2950650)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
//expresie = factor si factor si factor....
//factor = termen sau termen sau termen...
//termen = fie expresie, fie nu de expresie
bool f['z' - 'a' + 3];
char s[1003];
bool expresie();
bool factor();
int termen();
int i;
string cuv;
string cuvant()
{
string ans;
if (s[i] == '(')
{
i++;
return "(";
}
while (s[i] and s[i] != ' '
//and s[i] != '('
and s[i] != ')')
{
ans += s[i++];
}
return ans;
}
bool expresie()
{
bool ans = 1;
do
{
ans &= factor();
}
while (cuv == "AND");
return ans;
}
bool factor()
{
bool ans = 0;
do
{
ans |= termen();
cuv = cuvant();
i++;
}
while (cuv == "OR");
return ans;
}
int termen()
{
bool ans;
string ce = cuvant();
if (ce.size() == 1)
{
if (isalpha(ce[0]))
{
ans = f[ce[0] - 'A'];
}
else
{
ans = expresie();
}
}
else
{
if (ce == "TRUE")
{
ans = 1;
}
else if (ce == "FALSE")
{
ans = 0;
}
else if (ce == "NOT")
{
// if (s[i] == ' ')
i++;
ans = !expresie();
}
else
{
return -1;
}
}
i++;
return ans;
}
int main()
{
ifstream cin("bool.in");
ofstream cout("bool.out");
/*
((NOT (J) AND (X)) AND (NOT (B AND U)) AND NOT (NOT ((R) OR (D)))) OR (NOT (NOT (T AND A)) OR ((L) AND (O) OR NOT U))
100
GPTGVCEKKRKZXBKDWGCZSMRTRUYEIVGYDGOMIMJNZJZUBJWCDNPPLTXSCQYMJJMFZPUDQFJCSWDQOXZWKQLDWHBLTWSUMMYEEZVY
*/
cin.getline(s, sizeof(s));
int n;
cin >> n;
while (n--)
{
char x;
cin >> x;
f[x - 'A'] ^= 1;
i = 0;
//cout << "gg";
cout << expresie();
}
}