Pagini recente » Cod sursa (job #3174382) | Cod sursa (job #2525270) | Cod sursa (job #1352478) | Cod sursa (job #2809223) | Cod sursa (job #1447817)
#include <fstream>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int L[30],N;
char S[200],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,200);
fin >> N;
for (int i = 1;i <= N;i++)
{
fin >> C;
L[C - 'A'] = 1 - L[C - 'A'];
P = S;
fout << Eval();
}
return 0;
}