Pagini recente » Cod sursa (job #1000347) | Cod sursa (job #975863) | Cod sursa (job #2825078) | Cod sursa (job #3149112) | Cod sursa (job #682475)
Cod sursa(job #682475)
#include <cstdio>
#include <cstring>
#define MAX 1050
using namespace std;
char sir[MAX], cit[MAX], v[MAX], *p;
int val[40], trans;
void citire()
{
freopen("bool.in", "r", stdin);
gets(cit);
scanf("%d\n", &trans);
gets(v);
fclose(stdin);
}
bool AND(int i)
{
return cit[i] == 'A' && cit[i + 1] == 'N' && cit[i + 2] =='D';
}
bool OR(int i)
{
return cit[i] == 'O' && cit[i + 1] == 'R';
}
bool NOT(int i)
{
return cit[i] == 'N' && cit[i + 1] == 'O' && cit[i + 2] == 'T';
}
bool TRUE(int i)
{
return cit[i] == 'T' && cit[i + 1] == 'R' && cit[i + 2] == 'U' && cit[i + 3] == 'E';
}
bool FALSE(int i)
{
return cit[i] == 'F' && cit[i + 1] == 'A' && cit[i + 2] == 'L' && cit[i + 3] == 'S' && cit[i + 4] == 'E';
}
bool litera(int i)
{
return cit[i] >= 'A' && cit[i] <= 'Z';
}
void formSir()
{
int i, poz = 0;
for(i = 0; i < strlen(cit); i++)
{
if(AND(i))
{
sir[poz++] = '&';
i += 2;
}
else if(OR(i))
{
sir[poz++] = '|';
i++;
}
else if(NOT(i))
{
sir[poz++] = '~';
i += 2;
}
else if(TRUE(i))
{
sir[poz++] = '1';
i += 3;
}
else if(FALSE(i))
{
sir[poz++] = '0';
i += 4;
}
else if(cit[i] != ' ')
{
sir[poz++] = cit[i];
}
}
sir[poz] = '\n';
}
int factor();
int termen();
int evaluare()
{
int f = factor();
while(*p == '|')
{
p++;
f |= factor();
}
return f;
}
int factor()
{
int t = termen();
while(*p == '&')
{
p++;
t &= termen();
}
return t;
}
int termen()
{
int t = 0;
switch(*p)
{
case '(':
p++;
t = evaluare();
p++;
break;
case '1':
p++;
t = 1;
break;
case '0':
p++;
t = 0;
break;
case '~':
p++;
t = !termen();
break;
default:
t = val[*p - 'A'];
p++;
break;
}
return t;
}
void afisare()
{
freopen("bool.out", "w", stdout);
int i;
for(i = 0; i < trans; i++)
{
p = sir;
val[v[i] - 'A'] ^= 1;
printf("%d", evaluare());
}
fclose(stdout);
}
int main()
{
citire();
formSir();
afisare();
return 0;
}