Pagini recente » Cod sursa (job #329118) | Cod sursa (job #880999) | Cod sursa (job #198579) | Cod sursa (job #152782) | Cod sursa (job #2258103)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("bool.in") ;
ofstream g ("bool.out") ;
char s[1010] , x ;
int N , p = 0 , frecv[31] , m ;
int eval() ;
int termen() ;
int factor() ;
int eval()
{
int t = termen() ;
while (s[p] == 'O' && s[p + 1] == 'R' && p < m)
{p += 3;
t = (t|termen());
}
return t ;
}
int termen()
{
int t = factor() ;
while (s[p] == 'A' && s[p + 1] == 'N' && p < m)
{
p += 4;
t = (t&factor()) ;
}
return t;
}
int factor()
{
int rasp ;
int ok = 0 ;
if (s[p] == '(')
{ p ++ ;
rasp = eval() ;
p ++ ;
}
else if (s[p] == 'N' && s[p + 1] == 'O')
{
p += 4;
if (ok == 1) ok = 0 ;
else ok = 1 ;
rasp = factor() ;
}
else if (s[p] == 'F' && s[p + 1] == 'A')
{
p += 6;
rasp = 0 ;
}
else if (s[p] == 'T' && s[p + 1] == 'R')
{
p += 5;
rasp = 1;
}
else if (isalpha(s[p]))
{
rasp = frecv[s[p] -'A' + 1] ;
p += 2;
}
if (ok)
{if (rasp == 1) rasp = 0 ;
else rasp = 1 ;
}
return rasp ;
}
int main()
{
f.getline(s , 1010) ;
m = strlen(s) ;
f >> N ;
f.get() ;
for (int i = 1 ; i <= N ; ++i)
{
f >> x ;
if (frecv[x - 'A' + 1] == 0) frecv[x - 'A' + 1] = 1;
else frecv[x - 'A' + 1] = 0 ;
p = 0 ;
g << eval() ;
}
}