Pagini recente » Cod sursa (job #1522124) | Cod sursa (job #1753441) | Cod sursa (job #2093863) | Cod sursa (job #851072) | Cod sursa (job #2370239)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("bool.in") ;
ofstream g ("bool.out") ;
int N , i = 0 , k ;
int Q , fv[100];
char c;
char s[1010];
bool eval() ;
bool NOT() ;
bool termen() ;
bool factor() ;
bool eval()
{
bool r = termen() ;
while (s[i] == 'O' && s[i+1] == 'R')
{
i += 2;
r = (r | termen()) ;
}
return r;
}
bool termen()
{
bool r = NOT() ;
while (s[i] == 'A' && s[i+1] == 'N' && s[i+2] == 'D')
{
i += 3;
r = (r & NOT()) ;
}
return r;
}
bool NOT()
{
bool r = false;
while (s[i] == 'N' && s[i+1] == 'O' && s[i+2] == 'T')
{
r = factor() ;
i += 3;
r = !r;
}
return r;
}
bool factor()
{
bool 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 = true;
}
else if (s[i] == 'F' && s[i+1] == 'A' && s[i+2] == 'L' && s[i+3] == 'S' && s[i+4] == 'E')
{
i += 5 ;
r = false;
}
else if (isalpha(s[i]))
r = fv[s[i]-'A'+1] ;
}
return r;
}
int main()
{
f.getline(s,1002) ;
k = strlen(s);
f >> Q ;
for ( i = 0 ; i < k ; ++i)
{
if (s[i] == ' ')
strcpy(s + i , s + i + 1) ;
}
memset(fv, 0 , sizeof(fv));
for (int q = 1 ; q <= Q ; ++q)
{
f >> c;
i = 0 ;
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();
}
}