Pagini recente » Cod sursa (job #2910603) | Cod sursa (job #2163229) | Cod sursa (job #80910) | Cod sursa (job #3141622) | Cod sursa (job #3196981)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
char s[1005],t[1005],c;
int i,k,n,f[150];
int expresieOr();
int expresieAnd();
int expresieXor();
int expresieOr();
int factor();
int expresieOr()
{
int r=expresieAnd();
while(t[i]=='|')
{
i++;
r=(r|expresieAnd());
}
return r;
}
int expresieAnd()
{
int r=expresieXor();
while(t[i]=='&')
{
i++;
r=(r&expresieXor());
}
return r;
}
int expresieXor()
{
int r=factor();
while(t[i]=='!')
{
i++;
r=(r^factor());
}
return r;
}
int factor()
{
int r;
if(t[i]=='(')
{
i++;
r=expresieOr();
i++;
}
else
{
if(t[i]=='0')
{
i++;
return 0;
}
if(t[i]=='1')
{
i++;
return 1;
}
return f[t[i++]];
}
return r;
}
int main()
{
fin.getline(s,1005);
fin>>n;
for(i=0; i<strlen(s); i++)
{
if(s[i]==' ')
continue;
if(s[i]=='(' || s[i]==')')
{
t[k++]=s[i];
continue;
}
if(s[i]=='T' && s[i+1]=='R')
{
t[k++]='1';
i+=3;
continue;
}
if(s[i]=='F' && s[i+1]=='A')
{
t[k++]='0';
i+=4;
continue;
}
if(s[i]=='O' && s[i+1]=='R')
{
t[k++]='|';
i++;
continue;
}
if(s[i]=='N' && s[i+1]=='O')
{
t[k++]='1';
t[k++]='!';
i+=2;
continue;
}
if(s[i]=='A' && s[i+1]=='N')
{
t[k++]='&';
i+=2;
continue;
}
t[k++]=s[i];
}
for(int z=1; z<=n; z++)
{
fin>>c;
f[c]=1-f[c];
i=0;
fout<<expresieOr();
}
return 0;
}