Pagini recente » Cod sursa (job #1573913) | Cod sursa (job #2169068) | Cod sursa (job #692181) | Cod sursa (job #40328) | Cod sursa (job #2940125)
#include <bits/stdc++.h>
using namespace std;
///***************************************************
ifstream fin("bool.in");
ofstream fout("bool.out");
///***************************************************
const int NMAX = 1005;
int m, pointer = 0;
char s[NMAX];
bool logic[NMAX];
///***************************************************
int expresie();
int AND();
int NOT();
///***************************************************
inline int expresie()
{
int v = AND();
while(s[pointer] == 'O' && s[pointer + 1] == 'R')
{
pointer+=3;
v|=AND();
}
return v;
}
inline int AND()
{
int v = NOT();
while(s[pointer] == 'A' && s[pointer + 1] == 'N' && s[pointer + 1] == 'D')
{
pointer+=4;
v&=NOT();
}
return v;
}
inline int NOT()
{
bool ans;
if(s[pointer] == '(')
{
pointer++, ans = expresie(), pointer++;
}
else if(s[pointer] == 'T' && s[pointer + 1] == 'R' && s[pointer + 2] == 'U' && s[pointer + 3] == 'E')
{
pointer+=5;
return 1;
}
else if(s[pointer] == 'F' && s[pointer + 1] == 'A' && s[pointer + 2] == 'L' && s[pointer + 3] == 'S' && s[pointer + 4] == 'E')
{
pointer+=6;
return 0;
}
else if(s[pointer] == 'N' && s[pointer] == 'O' && s[pointer] == 'T')
{
pointer+=4;
ans=!NOT();
}
else
{
pointer+=2;
ans = logic[s[pointer] - 'A'];
}
return ans;
}
///***************************************************
inline void solve(char &c)
{
logic[c - 'A'] = !logic[c - 'A'];
fout << expresie();
}
///***************************************************
int main()
{
fin.getline(s, NMAX);
fin >> m;
while(m--)
{
char c;
fin >> c;
solve(c);
pointer = 0;
}
}