Pagini recente » Cod sursa (job #2330451) | Cod sursa (job #753124) | Cod sursa (job #194855) | Cod sursa (job #32784) | Cod sursa (job #1741549)
#include<fstream>
#include<string.h>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int t[256],val,i,n,j,l;
char s[1001],modif[101];
int evalExp();
int evalTerm();
int evalFact();
int eval(){
int val;
if (s[i]==' ') i++;
if ('A'<=s[i] && s[i]<='Z' && (s[i+1]=='(' || s[i+1]==')' || s[i+1]==' ')){
val=t[(int)s[i]];
i=i+1;
//fout<<val<<'\n';
return val;
}
if (i==l-1 && 'A'<=s[i] && s[i]<='Z' && s[i-1]==' ') {
return t[(int)s[i]];
i++;
}
if (l==1 && 'A'<=s[0] && s[0]<='Z'){
i++;
return t[(int)s[0]];
}
if (s[i]=='T' && s[i+1]=='R' && s[i+2]=='U' && s[i+3]=='E') {
i=i+4;
return 1;
}
if (s[i]=='F' && s[i+1]=='A' && s[i+2]=='L' && s[i+3]=='S' && s[i+4]=='E') {
i=i+5;
return 0;
}
}
int evalFact(){
int val;
if (s[i]==' ') i++;
if (s[i]=='('){
i++;
val=evalExp();
i++;
}
else
if (i+4<l && s[i]=='N' && s[i+1]=='O' && s[i+2]=='T' && s[i+3]==' '){
i=i+4;
val=evalExp();
if (val==0) val=1;
else
val=0;
}
else{
val=eval();
}
return val;
}
int evalTerm(){
int val=evalFact(),vali;
if (s[i]==' ') i++;
while(s[i]=='A' && s[i+1]=='N' && s[i+2]=='D' && i+3<l){
i=i+3;
vali=evalFact();
if (val==1 && vali==1) val=1;
else
val=0;
}
return val;
}
int evalExp(){
int val=evalTerm(),vali;
while(s[i]=='O' && s[i+1]=='R' && i+2<l){
i=i+2;
vali=evalTerm();
if (vali==1 || val==1) val=1;
else
val=0;
}
return val;
}
int main(){
fin.get(s,1001,'\n');
l=strlen(s);
fin.get();
fin>>n;
fin.get();
fin.get(modif,101,'\n');
fin.close();
for (j=1;j<=n;j++){
i=0;
if (t[(int)modif[j-1]]==0) t[(int)modif[j-1]]=1;
else
t[(int)modif[j-1]]=0;
val=evalExp();
fout<<val;
}
fout.close();
return 0;
}