Pagini recente » Profil Sagunistu | Cod sursa (job #2458482) | Cod sursa (job #387515) | Cod sursa (job #2054749) | Cod sursa (job #942521)
Cod sursa(job #942521)
#include <fstream>
#include <string>
using namespace std;
ifstream fi("bool.in");
ofstream fo("bool.out");
string s;
bool a[30];
int 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+=4,r=0; else
if (s[p]=='(') ++p,r=eval(),++p; else r=a[s[p]-'A'],++p;
return r;
}
int main(){
// A-65 Z-90
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;
}