Pagini recente » Cod sursa (job #805407) | Cod sursa (job #2094212) | Cod sursa (job #3172033) | Cod sursa (job #229597) | Cod sursa (job #2370096)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("bool.in") ;
ofstream g ("bool.out") ;
int N , i = 0 , k ;
int Q , fv[30];
char c;
char s[1010];
int eval() ;
int NOT() ;
int termen() ;
int factor() ;
int eval()
{
int r = termen() ;
while (s[i] == 'O' && s[i+1] == 'R')
{
i += 2;
r = (r | termen()) ;
}
return r;
}
int termen()
{
int r = NOT() ;
while (s[i] == 'A' && s[i+1] == 'N' && s[i+2] == 'D')
{
i += 3;
r = (r & NOT()) ;
}
return r;
}
int NOT()
{
int r = factor() ;
while (s[i] == 'N' && s[i+1] == 'O' && s[i+2] == 'T')
{
i += 3;
if (r == 1) r = 0 ;
else r = 1;
}
return r;
}
int factor()
{
int r = 0 ;
if (s[i] == '(')
{
i ++ ;
r = eval() ;
i ++ ;
}
else
{
if (s[i] == 'T' && s[i+1] == 'R' && s[i+2] == 'U' && s[i+3] == 'E')
{
i += 4;
r = 1;
}
else if (s[i] == 'F' && s[i+1] == 'A' && s[i+2] == 'L' && s[i+3] == 'S' && s[i+4] == 'E')
{
i += 5 ;
r = 0;
}
else
r = fv[s[i]-'A'+1] ;
}
return r;
}
int main()
{
f.getline(s,1002) ;
f >> Q ;
for (int q = 1 ; q <= Q ; ++q)
{
f >> c;
if (fv[c-'A'+1] == 1) fv[c-'A'+1] = 0;
else fv[c-'A'+1] = 1 ;
//g << c << ' ' << fv[c-'A'+1] << '\n' ;
g << eval();
}
}