Pagini recente » Cod sursa (job #1496397) | Cod sursa (job #1680759) | Cod sursa (job #1152571) | Cod sursa (job #2034919) | Cod sursa (job #2851071)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("bool.in");
ofstream g ("bool.out");
char s[1005], c, t[1005], *p;
bool val[30];
int n, i, nr;
bool eval();
bool termen();
bool factor();
void citire()
{
f.getline(t, 1005);
f >> n;
f.get();
}
void tocare()
{
p = t;
p = strtok(t, " ");
while(p)
{
strcat(s, p);
p = strtok(NULL, " ");
}
}
/*
void despatiere()
{
int m = strlen(t);
for (int i = 0; i < m; ++i)
{
if (t[i] != ' ') s[nr++]= t[i];
}
}
*/
bool eval()
{
bool r = 0;
r = termen();
while (s[i] == 'O' && s[i+1] == 'R')
{
i += 2;
r |= termen();
}
return r;
}
bool termen()
{
bool r = 0;
r = factor();
while (s[i] == 'A' && s[i+1] == 'N' && s[i+2] == 'D')
{
i += 3;
r &= factor();
}
return r;
}
bool factor()
{
bool r = 0;
if (s[i] == 'N' && s[i+1] == 'O' && s[i+2] == 'T')
{
i += 3;
r =! factor();
}
else if (s[i] == '(')
{
++i;
r = eval();
++i;
}
else if (s[i] == 'T' && s[i+1] == 'R' && s[i+2] == 'U' && s[i+3] == 'E')
{
i += 4;
r = true;
}
else if (s[i] == 'F' && s[i+1] == 'A' && s[i+2] == 'L' && s[i+3] == 'S' && s[i+4] == 'E')
{
i += 5;
r = false;
}
else
{
r = val[s[i]-'A'];
++i;
}
return r;
}
int main()
{
f.tie(nullptr);
citire();
tocare();
for (int k = 1; k <= n; ++k)
{
i = 0;
f >> c;
val[c-'A'] = !val[c-'A'];
g << eval();
}
return 0;
}