Pagini recente » Cod sursa (job #2485267) | Cod sursa (job #2568616) | Cod sursa (job #2973867) | Cod sursa (job #658702) | Cod sursa (job #2209784)
#include <fstream>
#include <cstring>
using namespace std;
char s[1005],*exp;
int V[200];
int getexp();
int getterm();
int getfact();
int getfact()
{
int nr=0;
if(*exp==' ')
exp++;
if(*exp=='(')
{
exp++;
nr=getexp();
exp++;
return nr;
}
if(*exp>='A' and *exp<='Z' and (*(exp+1)==' ' or *(exp+1)==')'))
{
nr=V[*exp];
exp++;
return nr;
}
if(*exp=='N' and *(exp+1)=='O')
{
exp=exp+3;
nr=1-getfact();
return nr;
}
if(*exp=='T' and *(exp+1)=='R')
{
nr=1;
exp=exp+4;
return nr;
}
if(*exp=='F' and *(exp+1)=='A')
{
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|getterm();
if(*exp==' ')
exp++;
}
return nr;
}
int main()
{
ifstream f("bool.in");
ofstream g("bool.out");
f.get(s,1005);
strcat(s," ");
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;
}