Pagini recente » Cod sursa (job #2059040) | Cod sursa (job #2592845) | Cod sursa (job #3311522) | Cod sursa (job #871087) | Cod sursa (job #3354558)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int val[26];
int i;
char* tok[500];
int ntok;
int atom(), termen(), expresie();
int atom()
{
if(strcmp(tok[i],"NOT")==0){
++i;
return 1-atom();
}
if(strcmp(tok[i],"TRUE")==0){
++i;
return 1;
}
if(strcmp(tok[i],"FALSE")==0){
++i;
return 0;
}
if(strcmp(tok[i],"(")==0){
++i;
int v=expresie();
++i;
return v;
}
int v=val[tok[i][0]-'A'];
++i;
return v;
}
int termen()
{
int v=atom();
while(i<ntok && strcmp(tok[i],"AND")==0){
++i;
v=v&atom();
}
return v;
}
int expresie()
{
int v=termen();
while(i<ntok && strcmp(tok[i],"OR")==0){
++i;
v=v|termen();
}
return v;
}
int evalueaza()
{
i=0;
return expresie();
}
int main()
{
char s[1005];
fin.getline(s, 1005);
char s2[3005];
int j=0;
for(int k=0; s[k]; ++k){
if(s[k]=='(' || s[k]==')'){
s2[j++]=' ';
s2[j++]=s[k];
s2[j++]=' ';
} else {
s2[j++]=s[k];
}
}
s2[j]=0;
char* p=strtok(s2, " ");
while(p!=NULL){
tok[ntok++]=p;
p=strtok(NULL, " ");
}
int n;
fin>>n;
fin.get();
char modificari[105];
fin.getline(modificari, 105);
for(int k=0; k<n; ++k){
val[modificari[k]-'A']=1-val[modificari[k]-'A'];
fout<<evalueaza();
}
fout<<"\n";
return 0;
}