Pagini recente » Cod sursa (job #118102) | Cod sursa (job #3237845) | Cod sursa (job #546560) | Cod sursa (job #2920721) | Cod sursa (job #2376532)
#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()
{
while (i < cnt)
{
if ((isupper(v[i]) && !isalpha(v[i-1]) && !isalpha(v[i+1])) || v[i] == ' ')
{
if (v[i] == ' ') i ++ ;
else
{
s[++k] = v[i] ;
i ++ ;
}
}
if (v[i] == '(') s[++k] = '(' , i++;
if (v[i] == ')') s[++k] = ')' , i++;
if (v[i] == 'A' && v[i+1] == 'N' && v[i+2] == 'D')
{
i += 3;
s[++k] = '&';
}
if (v[i] =='O' && v[i+1] == 'R')
{
i += 2;
s[++k] = '|';
}
if (v[i] == 'N' && v[i+1] == 'O' && v[i+2] == 'T')
{
i += 3;
s[++k] = '!' ;
}
if (v[i] == 'T' && v[i+1] == 'R' && v[i+2] == 'U' && v[i+3] == 'E')
{
i += 4;
s[++k] = '1';
}
if (v[i] == 'F' && v[i+1] == 'A' && v[i+2] == 'L' && v[i+3] == 'S' && v[i+4] == 'E')
{
i += 5;
s[++k] = '0';
}
}
}
int eval()
{
int r = termen();
if (s[i] == '|')
{
i ++ ;
r = (r | termen());
}
return r;
}
int termen()
{
int r = factor();
if (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 = !factor() ;
if (s[i] == '1')r = 1;
else if (s[i] == '0')r = 0;
else r = fv[s[i]-'A'];
}
return r;
}
int main()
{
f.getline(v,102) ;
i = 0 ;
cnt = strlen(v);
prelucrare();
i = 0;
k ++ ;
/* k = strlen(s)
for (i = 0 ;i < k ; ++i)
g << s[i] ;*/
f >> N ;
for (int query = 1 ; query <= N ; ++ query)
{
f >> c;
fv[c-'A'] = 1 - fv[c-'A'];
g << eval();
}
}