Pagini recente » Cod sursa (job #1689166) | Cod sursa (job #603692) | Cod sursa (job #642457) | Cod sursa (job #1339912) | Cod sursa (job #2376584)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("bool.in") ;
ofstream g ("bool.out");
int N ;
char v[105] ,c, s[105] ;
int fv[35] ;
int i = 0 , k = -1, cnt = 0;
int eval() ;
int termen() ;
int factor();
void prelucrare()
{
for (int i = 0 ; i < cnt ; ++i)
{
if (v[i]== ' ') i ++ ;
if (isupper(v[i]) && !isalpha(v[i-1]) && !isalpha(v[i+1]) || v[i] == '(' || v[i] == ')')
{
s[++k] = v[i];
}
else{
if (v[i] == 'A' && v[i+1] == 'N' && v[i+2] == 'D')
{
s[++k] = '&';
}
if (v[i] =='O' && v[i+1] == 'R')
{
s[++k] = '|';
}
if (v[i] == 'N' && v[i+1] == 'O' && v[i+2] == 'T')
{
s[++k] = '!' ;
}
if (v[i] == 'T' && v[i+1] == 'R' && v[i+2] == 'U' && v[i+3] == 'E')
{
s[++k] = '1';
}
if (v[i] == 'F' && v[i+1] == 'A' && v[i+2] == 'L' && v[i+3] == 'S' && v[i+4] == 'E')
{
s[++k] = '0';
}
}
}
}
int eval()
{
int r = termen();
while (s[i] == '|')
{
i ++ ;
r = (r | termen());
}
return r;
}
int termen()
{
int r = factor();
while (s[i] == '&')
{
i ++ ;
r = (r & factor()) ;
}
return r;
}
int factor()
{
int r = 0 ;
if (s[i] == '(')
{
i ++ ;
r = eval() ;
i ++ ;
}
else
{
if (s[i] == '!') i ++ , r = 1 -factor() ;
else if (s[i] == '1')r = 1 , i ++;
else if (s[i] == '0')r = 0 , i ++ ;
else if (isupper(s[i])) r = fv[s[i]-'A'] , i++ ;
}
return r;
}
int main()
{
f.getline(v,102) ;
i = 0 ;
cnt = strlen(v);
prelucrare();
k ++ ;
f >> N ;
for (int query = 1 ; query <= N ; ++ query)
{
f >> c;
i = 0 ;
fv[c-'A'] = 1 - fv[c-'A'];
g << eval();
}
}