Pagini recente » Cod sursa (job #3223273) | Cod sursa (job #2341782) | Cod sursa (job #1161910) | Cod sursa (job #3000553) | Cod sursa (job #2560905)
#include <fstream>
#include <cstring>
#include <stack>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
struct s
{
int poz;
char semn, semn1;
};
s stiva[1001];
int n, lg, nrv, nrs;
char c[1001], x;
bool val[26];
pair < bool, char > v[1001];
bool rezolva(int st, int dr)
{
nrv = nrs = 0;
char semn = 0, semn1 = 0;
for (int i = st; i <= dr; i++)
{
if (c[i] >= 'A' && c[i] <= 'Z')
{
if (c[i+1] == ' ' || c[i+1] == 0)
{
for (int j=1; j<nrv; j++)
{
g << v[j].first << " ";
if (v[j].second)
g << v[j].second << " ";
else
g << "X ";
}
g << v[nrv].first << " ";
if (semn)
g << semn << " ";
else
g << "X ";
g << val[c[i] - 'A'] << "\n";
if (semn == 0)
{
nrv++;
v[nrv].first = val[c[i] - 'A'];
v[nrv].second = semn;
}
else if (semn == '&')
v[nrv].first = (v[nrv].first && val[c[i] - 'A']);
else if (semn == '|')
v[nrv].first = (v[nrv].first || val[c[i] - 'A']);
else if (semn == '!')
{
if (semn1 == '&')
v[nrv].first = (v[nrv].first && !val[c[i] - 'A']);
else if (semn1 == '|')
v[nrv].first = (v[nrv].first || !val[c[i] - 'A']);
}
}
else
{
semn1 = semn;
if (c[i] == 'A')
{
semn = '&';
i += 2;
}
else if (c[i] == 'O')
{
semn = '|';
i += 1;
}
else if (c[i] == 'N')
{
semn = '!';
i += 2;
}
}
}
else if (c[i] == '(')
{
nrs++;
stiva[nrs].poz = nrv + 1;
stiva[nrs].semn = semn;
stiva[nrs].semn1 = semn1;
semn = 0;
}
else if (c[i] == ')')
{
if (stiva[nrs].poz != nrv)
{
if (stiva[nrs].semn == '&')
v[nrv - 1].first = (v[nrv - 1].first && v[nrv].first);
else if (stiva[nrs].semn == '|')
v[nrv - 1].first = (v[nrv - 1].first || v[nrv].first);
else
{
if (stiva[nrs].semn1 == '&')
v[nrv - 1].first = (v[nrv - 1].first && !v[nrv].first);
else if (stiva[nrs].semn1 == '|')
v[nrv - 1].first = (v[nrv - 1].first || !v[nrv].first);
}
nrv--;
}
nrs--;
}
}
for (int i=2; i<=nrv; i++)
if (v[i].second == '&')
v[1].first = (v[1].first && v[i].first);
else if (v[i].second == '|')
v[1].first = (v[1].first || v[i].first);
return v[1].first;
}
int main()
{
f.getline(c, sizeof(c));
lg = strlen(c);
f >> n;
while (n--)
{
f >> x;
val[x - 'A'] = !val[x - 'A'];
g << rezolva(0, lg - 1) << "\n";
}
return 0;
}