Pagini recente » Cod sursa (job #259833) | Cod sursa (job #1720560) | Cod sursa (job #1747142) | Cod sursa (job #838650) | Cod sursa (job #1775887)
#include <iostream>
#include<fstream>
using namespace std;
string s,changes;
int c,i,n,val[30];
int eval();
int termen();
int termen()
{
int ret=0;
if(s[c]==' ')
c++;
if(s[c]=='T'&&s[c+1]=='R') {c+=4;return 1;}
if(s[c]=='F'&&s[c]=='A') {c+=5;return 0;}
if(s[c]=='(') {c++;ret=eval();return ret;}
if(s[c]=='N'&&s[c+1]=='O') {c+=3;ret=termen();return (1^ret);}
if(s[c]>='A'&&s[c]<='Z') {ret=val[s[c]-'A'];c++;return ret;}
}
int eval()
{
int curr=0;bool ok=0;
while(c<=s.size())
{
if(c==s.size()||s[c]==')') {c++;return curr;}
if(s[c]==' ') c++;
if(s[c]=='A'&&s[c+1]=='N')
{
c+=3;ok=1;
curr&=termen();
}
if(s[c]=='O'&&s[c+1]=='R')
{
c+=2;ok=1;
curr|=termen();
}
if(ok==0) curr=termen();
}
}
int main()
{
ifstream f("bool.in");
ofstream g("bool.out");
getline(f,s);
f>>n;
f>>changes;
for(i=0;i<n;i++)
{
val[changes[i]-'A']^=1;
c=0;
g<<eval();
}
return 0;
}