Pagini recente » Cod sursa (job #461135) | Cod sursa (job #1333890) | Cod sursa (job #1749361) | Cod sursa (job #967192) | Cod sursa (job #2020241)
#include <cstdio>
#include <map>
#include <string>
using namespace std;
FILE *in,*out;
const int nmax = 1000;
const int tmax = 100;
map <char,bool> m;
char c[1+nmax+3],k[tmax+3];
char curchar;
int pointer;
bool OR();
bool NOT()
{
bool answer = 0;
if(c[pointer] == '(')
{
pointer ++;
answer = OR();
pointer ++;
}
else if(c[pointer] == 'T' && c[pointer + 1] == 'R')
{
pointer += 4;
answer = 1;
}
else if(c[pointer] == 'F' && c[pointer + 1] == 'A' && c[pointer + 2] == 'L')
{
pointer += 5;
answer = 0;
}
else if(c[pointer] == 'N' && c[pointer + 1] == 'O')
{
pointer += 3;
answer = 1 - NOT();
}
else
{
answer = m[c[pointer]];
pointer ++;
}
return answer;
}
bool AND()
{
bool answer = NOT();
if(c[pointer] == 'A' && c[pointer+1] == 'N' && c[pointer+2] == 'D')
{
pointer += 3;
answer = (answer && AND());
}
return answer;
}
bool OR()
{
bool answer = AND();
if(c[pointer] == 'O' && c[pointer+1] == 'R') {
pointer += 2;
answer = (answer || OR());
}
return answer;
}
int main()
{
in = fopen("bool.in","r");
out = fopen("bool.out","w");
fgets(c,nmax+3,in);
for(char i = 'A';i <= 'Z';i ++)
m[i] = 0;
int t;
fscanf(in,"%d\n",&t);
fgets(k,tmax+3,in);
for(int i = 0;i < t;i ++)
{
m[k[i]] = 1 - m[k[i]];
pointer = 0;
fprintf(out,"%d",OR());
}
return 0;
}