Pagini recente » Istoria paginii runda/bravo4/clasament | Cod sursa (job #745178) | Cod sursa (job #1883786) | Cod sursa (job #24262) | Cod sursa (job #1153718)
#include <fstream>
#include <string.h>
using namespace std;
ifstream cin("bool.in");
ofstream cout("bool.out");
char v[1003],x;
int var[30];
int i,p=0,lim,n;
int expresie();
int termen();
int factor();
int main()
{
cin.getline(v,1001); lim=strlen(v);
cin>>n;
for(i=1; i<=n; i++)
{
cin>>x;
var[x-'A']=1-var[x-'A'];
p=0;
p=0;
cout<<expresie();
}
}
int expresie()
{
int val=termen();
while(p+1<lim && v[p]=='O' && v[p+1]=='R')
{
p+=3;
val=val | termen();
}
return val;
}
int termen()
{
int val=factor();
while(p+2<lim && v[p]=='A' && v[p+1]=='N' && v[p+2]=='D')
{
p+=4;
val= val & factor();
}
return val;
}
int factor()
{
int semn=1,val=0;
if(p+2<lim && v[p]=='N' && v[p+1]=='O' && v[p+2]=='T')
while(p+2<lim && v[p]=='N' && v[p+1]=='O' && v[p+2]=='T')
{
p+=4;
semn=-semn;
}
if(p+3<lim && v[p]=='T' && v[p+1]=='R' && v[p+2]=='U' && v[p+3]=='E')
{
p+=5;
val=1;
if(semn==1)
return val;
return 1-val;
}
if(p+4<lim && v[p]=='F' && v[p+1]=='A' && v[p+2]=='L' && v[p+3]=='S' && v[p+4]=='E')
{
p+=6;
val=0;
if(semn==1)
return val;
return 1-val;
}
if(v[p]=='(')
{
p++;
val=expresie();
p++;
if(semn==1)
return val;
return 1-val;
}
val=var[v[p]-'A'];
p+=2;
if(semn==1)
return val;
return 1-val;
}