Pagini recente » Cod sursa (job #2603724) | Istoria paginii runda/everest | Cod sursa (job #434681) | Cod sursa (job #1766325) | Cod sursa (job #1328132)
#include <stdio.h>
#include <string.h>
#define NMAX 1023
FILE *fin, *fout;
char s[NMAX], *p, ch;
bool o[30], eval(), termen(), factor();
int n;
int main()
{
fin = fopen("bool.in", "r");
fout = fopen("bool.out", "w");
fgets(s, NMAX, fin);
fscanf(fin, "%d", &n);
fscanf(fin, "%c", &ch);
//fprintf(fout, "n = %d\n", n);
for(int i = 0; i < n; i++)
{
fscanf(fin, "%c", &ch);
//fprintf(fout, "check %d\n", i);
//fprintf(fout, "%c\n", ch);
o[ch - 'A'] = !o[ch - 'A'];
p = s;
fprintf(fout, "%d", eval());
}
fclose(fin);
fclose(fout);
return 0;
}
bool eval()
{
bool r = termen();
while(*p == 'O' && *(p+1) == 'R')
{
p+=3;
r = r|termen();
}
return r;
}
bool termen()
{
bool r = factor();
while(*p == 'A' && *(p+1) == 'N')
{
p+=4;
r = r&factor();
}
return r;
}
bool factor()
{
bool r = 0;
if(*p == '(')
{
p++;
r = eval();
p++;
}
else if(*p == 'T' && *(p+1) == 'R')
{
p+=5;
r = 1;
}
else if(*p == 'F' && *(p+1) == 'A')
{
p+=6;
r = 0;
}
else if(*p == 'N' && *(p+1) == 'O')
{
p+= 4;
r = !factor();
}
else
{
r = o[*p - 'A'];
p+=2;
}
return r;
}