Pagini recente » Cod sursa (job #1141124) | Cod sursa (job #531385) | Cod sursa (job #1131821) | Cod sursa (job #1535014) | Cod sursa (job #942530)
Cod sursa(job #942530)
#include <fstream>
#include <string>
using namespace std;
ifstream fi("bool.in");
ofstream fo("bool.out");
string s;
bool a[30];
long n,i,p;
char ch;
bool eval(),termen(),factor();
bool eval(){
bool r=termen();
while ((s[p]=='O')&&(s[p+1]=='R')) p+=2,r|=termen();
return r;
}
bool termen(){
bool r=factor();
while ((s[p]=='A')&&(s[p+1]=='N')) p+=3,r&=factor();
return r;
}
bool factor(){
bool r=0;
if ((s[p]=='N')&&(s[p+1]=='O')) p+=3,r=!factor(); else
if ((s[p]=='T')&&(s[p+1]=='R')) p+=4,r=1; else
if ((s[p]=='F')&&(s[p+1]=='A')) p+=5,r=0; else
if (s[p]=='(') ++p,r=eval(),++p; else r=a[s[p]-'A'],++p;
return r;
}
int main(){
getline(fi,s);
for (i=0; i<(int)s.length(); i++) if (s[i]==' ') s.erase(s.begin()+i);
fi >> n;
while (n--) fi >> ch,a[ch-'A']=!a[ch-'A'],p=0,fo << eval();
return 0;
}