Pagini recente » Cod sursa (job #1958107) | Cod sursa (job #1241254) | Cod sursa (job #1362697) | Cod sursa (job #167085) | Cod sursa (job #2312907)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("bool.in");
ofstream g ("bool.out");
int eval();
int termen();
int factor();
int valoare();
int n, vf, m, val[30];
char ch, *p;
char sirin[1105], sir[1105];
void transform_sir()
{
vf = 0;
for (int i = 0; i < n;)
{
if (sirin[i] == 'A' && sirin[i+1] == 'N')
{
sir[++vf] = '&';
i += 3;
}
else if (sirin[i] == 'O' && sirin[i+1] == 'R')
{
sir[++vf] = '|';
i += 2;
}
else if (sirin[i] == 'N' && sirin[i+1] == 'O')
{
sir[++vf] = '!';
i += 3;
}
else if (sirin[i] == 'T' && sirin[i+1] == 'R')
{
sir[++vf] = 't';
i += 4;
}
else if (sirin[i] == 'F' && sirin[i+1] == 'A')
{
sir[++vf] = 'f';
i += 5;
}
else
{
if (sirin[i] >= 'A' && sirin[i] <= 'Z' || sirin[i] == '(' || sirin[i] == ')')
sir[++vf] = sirin[i];
++i;
}
}
}
int eval()
{
int r = termen();
while (*p == '|')
{
p++;
r = r | termen();
}
return r;
}
int termen()
{
int r = factor();
while (*p == '&')
{
p++;
r = r & factor();
}
return r;
}
int factor()
{
if (*p == '!')
{
p++;
return !factor();
}
return valoare();
}
int valoare()
{
int res = 0;
if (*p == 't')
{
p++;
return true;
}
else if (*p == 'f')
{
p++;
return false;
}
else if (*p >= 'A' && *p <= 'Z')
{
res = val[*p - 'A'];
p++;
}
else if (*p == '(')
{
p++;
res = eval();
p++;
}
return res;
}
int main()
{
f.getline(sirin, 1010);
n = strlen(sirin);
transform_sir();
f >> m;
for (; m; --m)
{
f >> ch;
val[ch - 'A'] ^= 1;
p = sir;
p++;
g << eval();
}
return 0;
}