Pagini recente » Cod sursa (job #2215953) | Cod sursa (job #2835915) | Cod sursa (job #1030040) | Cod sursa (job #423083) | Cod sursa (job #1447820)
#include <fstream>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int L[30],N;
char S[2000],C,*P;
int Term();
int Fact();
int Eval()
{
int R = Term();
while (*P == 'O' && *(P+1) == 'R')
{
P += 3;
R = R | Term();
}
return R;
}
int Term()
{
int R = Fact();
while (*P == 'A' && *(P+1) == 'N' && *(P+2) == 'D')
{
P += 4;
R = R & Fact();
}
return R;
}
int Fact()
{
int R = 0;
if (*P == 'N' && *(P+1) == 'O' && *(P+2) == 'T')
{
P += 4;
R = Fact();
return !R;
}
else
if (*P == '(')
{
P++;
R = Eval();
P++;
}
else
if (*P == 'T' && *(P+1) == 'R')
{
P += 5;
R = 1;
}
else
if (*P == 'F' && *(P+1) == 'A')
{
P += 6;
R = 0;
}
else
{
R = L[*P - 'A'];
P += 2;
}
return R;
}
int main()
{
fin.getline(S,2000);
fin >> N;
for (int i = 1;i <= N;i++)
{
fin >> C;
L[C - 'A'] = 1 - L[C - 'A'];
P = S;
fout << Eval();
}
return 0;
}