Pagini recente » Cod sursa (job #3218902) | Cod sursa (job #1463512) | Cod sursa (job #1894605) | Cod sursa (job #2830024) | Cod sursa (job #2209755)
#include <fstream>
using namespace std;
char s[1005],*exp;
int V[200];
int getexp();
int getterm();
int getfact();
int getfact()
{
int nr=0;
bool ok=1;
if(*exp==' ')
exp++;
if(*exp=='(')
{
ok=0;
exp++;
nr=getexp();
exp++;
}
if(ok and *exp>='A' and *exp<='Z' and (*(exp+1)==' ' or *(exp+1)==')'))
{
ok=0;
nr=V[*exp];
exp++;
}
if(ok and *exp=='N' and *(exp+1)=='O')
{
ok=0;
exp=exp+3;
nr=1-getfact();
}
if(ok and *exp=='T' and *(exp+1)=='R')
{
ok=0;
nr=1;
exp=exp+4;
}
if(ok and*exp=='F' and *(exp+1)=='A')
{
ok=0;
nr=0;
exp=exp+5;
}
return nr;
}
int getterm()
{
int nr=getfact();
if(*exp==' ')
exp++;
while(*exp=='A' and *(exp+1)=='N')
{
exp+=3;
nr=nr&getfact();
if(*exp==' ')
exp++;
}
return nr;
}
int getexp()
{
int nr=getterm();
if(*exp==' ')
exp++;
while(*exp=='O' and *(exp+1)=='R')
{
exp+=2;
nr=nr|getfact();
if(*exp==' ')
exp++;
}
return nr;
}
int main()
{
ifstream f("bool.in");
ofstream g("bool.out");
f.get(s,1005);
int n;
f>>n;
for(int i=1;i<=n;i++)
{
exp=s;
char c;
f>>c;
V[c]=1-V[c];
g<<getexp();
}
return 0;
}