Pagini recente » Cod sursa (job #1008256) | Cod sursa (job #1521481) | Cod sursa (job #1906371) | Cod sursa (job #3146138) | Cod sursa (job #1571093)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("bool.in");
ofstream cout("bool.out");
const int MAX = 1005, MAXI = 105;
char s[MAX], a[MAXI], eval[MAX];
int n, nr_op, k, p;
int citire();
int factor();
int termen();
int expresie();
struct op
{
char c;
int val;
}v[1000];
int main()
{
citire();
for(int i=0; i<n; ++i)
{
int j;
for(j=1; j<=nr_op; ++j)
if(v[j].c == a[i])
{
v[j].val = (v[j].val + 1) % 2;
cout<<expresie();
break;
}
}
return 0;
}
int citire()
{
cin.getline(s, MAX);
cin>>n;
cin.get();
cin.getline(a, MAXI);
int k=-1;
for(int i=0; s[i]; ++i)
{
if(isupper(s[i]))
{
char aux[4];
int l=-1;
while(isupper(s[i]))
{
aux[++l] = s[i];
i++;
}
aux[++l]=NULL;
if(strcmp(aux, "TRUE")==0)
eval[++k] = '1';
if(strcmp(aux, "FALSE")==0)
eval[++k] = '0';
if(strcmp(aux, "OR")==0)
eval[++k] = '|';
if(strcmp(aux, "AND")==0)
eval[++k] = '&';
if(strcmp(aux, "NOT")==0)
eval[++k] = '!';
if(l==1)
{
v[++nr_op].c = aux[0];
eval[++k] = aux[0];
}
}
if(s[i] == '(')
eval[++k] = '(';
if(s[i] == ')')
eval[++k] = ')';
}
}
int factor()
{
int ans = 0;
int semn = 1;
if(eval[p] == '(')
{
p++;
ans = expresie();
p++;
}
else
{
if(eval[p] == '!')
{
++p;
semn = -1;
}
if(eval[p] == '1')
{
++p;
ans = 1;
if(semn == 1)
return ans;
if(semn == -1)
return !ans;
}
if(eval[p] == '0')
{
++p;
if(semn == 1)
return ans;
if(semn == -1)
return !ans;
}
if(isupper(s[p]))
{
int i;
for(i=1; i<=nr_op; ++i)
if(v[i].c == eval[p])
break;
ans = v[i].val;
if(semn == 1)
return ans;
if(semn == -1)
return !ans;
}
}
}
int expresie()
{
int ans = factor();
while(eval[p] == '&' or eval[p] == '|')
if(eval[p] == '&')
{
p++;
ans = ans & factor();
}
else
{
p++;
ans = ans | factor();
}
return ans;
}