Pagini recente » Cod sursa (job #1698899) | Cod sursa (job #1030570) | Cod sursa (job #2897666) | Cod sursa (job #15791) | Cod sursa (job #1074799)
#include<fstream>
#include<cstring>
using namespace std;
int val[50];;
char s[1001],sir[101],v[1001];
int n,p;
int eval();
int termen();
int factor();
int AND();
int main()
{
fstream f("bool.in",ios::in);
fstream g("bool.out",ios::out);
f.getline(s,1001);
int x=strlen(s);
int i=0,k=-1;
while (i<x)
{
if (s[i]=='A' && s[i+1]=='N') {v[++k]='&',i+=3;}
else if (s[i]=='O' && s[i+1]=='R') {v[++k]='|',i+=2;}
else if (s[i]=='N' && s[i+1]=='O') {v[++k]='!',i+=3;}
else if (s[i]=='T' && s[i+1]=='R') {v[++k]='1';i+=4;}
else if (s[i]=='F' && s[i+1]=='A') {v[++k]='0';i+=5;}
else if (s[i]!=' ') v[++k]=s[i],++i;
else ++i;
}
f>>n;
char c;
for (int o=1;o<=n;++o)
{
f>>c;
val['Z'-c]=!val['Z'-c];
p=0;
g<<eval();
}
g<<'\n';
return 0;
}
int eval()
{
int r=AND();
while (v[p]=='|')
{
++p;
int x=AND();
r|=x;
}
return r;
}
int AND()
{
int r=termen();
while (v[p]=='&')
{
++p;
int x=termen();
r&=x;
}
return r;
}
int termen()
{
int r=factor();
while (v[p]=='!')
{
++p;
r=!factor();
}
return r;
}
int factor()
{
int r=0;
if (v[p]=='(') {++p;r=eval();++p;}
else if (v[p]>='A' && v[p]<='Z') r=val['Z'-v[p]],p+=1;
else if (v[p]=='0') return 0;
else if (v[p]=='1') return 1;
return r;
}