Pagini recente » Cod sursa (job #898223) | Cod sursa (job #2883141) | Cod sursa (job #332620) | Cod sursa (job #2847799) | Cod sursa (job #2109574)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
char s[1005],r[105],t[1005],c[1005];
int n,ind;
int eval();
int factor();
int termen();
int eval()
{
int nr=termen();
while(s[ind]=='O' && s[ind+1]=='R')
{
ind+=3;
nr=nr | termen();
}
return nr;
}
int termen()
{
int nr=factor();
while(s[ind]=='A' && s[ind+1]=='N' && s[ind+2]=='D')
{
ind+=4;
nr=nr&factor();
}
return nr;
}
int factor()
{
int nr;
if(s[ind]=='(')
{
++ind;
nr=eval();
++ind;
}
else
if(s[ind]=='N' && s[ind+1]=='O' && s[ind+2]=='T')
{
ind+=4;
nr=!factor();
}
else
if(s[ind]=='T' && s[ind+1]=='R' && s[ind+2]=='U' && s[ind+3]=='E')
{
ind+=5;
nr=1;
}
else
if(s[ind]=='F' && s[ind+1]=='A' && s[ind+2]=='L' && s[ind+3]=='S' && s[ind+4]=='E')
{
ind+=6;
nr=0;
}
else
{
nr=t[s[ind]-'A'];
ind+=2;
}
return nr;
}
int main()
{
int i=-1,j=-1,x;
fin.getline(s,1000);
x=strlen(s);
fin>>n;
fin>>r;
while(i<x)
{
i++;
c[++j]=s[i];
while(s[i]==s[i+1] && s[i+1]==' ' && i<x)
{
i++;
}
}
c[++j]=0;
strcpy(s,c);
for(i=0;i<n;i++)
{
ind=0;
t[r[i]-'A']=1-t[r[i]-'A'];
fout<<eval();
}
return 0;
}