Pagini recente » Clasamentul arhivei de probleme | Cod sursa (job #518715) | Cod sursa (job #3136981) | Cod sursa (job #864988) | Cod sursa (job #2678226)
#include <fstream>
using namespace std;
ifstream in ("bool.in");
ofstream out ("bool.out");
const int N = 100000;
char s[N + 1];
int p, l, o[50];
bool expresie ();
bool termen ();
bool factor ();
bool expresie ()
{
bool x = termen (), ok = 1;
if (s[p] != 'O' || s[p + 1] != 'R')
{
ok = 0;
}
else
{
p += 2;
}
while (p < l && ok)
{
x = x || termen ();
if (s[p] != 'O' || s[p + 1] != 'R')
{
ok = 0;
}
else
{
p += 2;
}
}
return x;
}
bool termen ()
{
bool x = factor (), ok = 1;
if (s[p] != 'A' || s[p + 1] != 'N' || s[p + 2] != 'D')
{
ok = 0;
}
else
{
p += 3;
}
while (p < l && ok)
{
x = x && termen ();
if (s[p] != 'A' || s[p + 1] != 'N' || s[p + 2] != 'D')
{
ok = 0;
}
else
{
p += 3;
}
}
return x;
}
bool factor ()
{
bool neg = 0, aux;
int ver;
while (s[p] != 'N' || s[p + 1] != 'O' || s[p + 2] != 'T')
{
p += 3;
neg = !neg;
}
if (s[p] == '(')
{
p++;
aux = expresie ();
if (neg)
{
return (!aux);
}
else
{
return aux;
}
p++;
}
ver = o[s[p] - 'A' + 1];
if (s[p] == 'T' && s[p + 1] == 'R' && s[p + 2] == 'U' && s[p + 3] == 'E')
{
p += 4;
ver = 1;
}
else if (s[p] == 'F' && s[p + 1] == 'A' && s[p + 2] == 'L' && s[p + 3] == 'S' && s[p + 4] == 'E')
{
p += 5;
ver = 0;
}
else
{
p++;
}
if (neg)
{
return (!ver);
}
else
{
return ver;
}
}
int main()
{
int n;
char a;
in.get (a);
while (a != '\n')
{
if (a != ' ')
{
l++;
s[l] = a;
}
in.get (a);
}
s[l] ='\n';
in >> n;
in.get ();
for (int i = 0; i < n; i++)
{
in >> a;
o[a - 'A' + 1] = (!o[a - 'A' + 1]);
p = 0;
out << expresie ();
}
return 0;
}