Pagini recente » Cod sursa (job #1540252) | Cod sursa (job #1038098) | Cod sursa (job #1614207) | Cod sursa (job #1065987) | Cod sursa (job #1912067)
#include <fstream>
#include <cstring>
#define CAR 105
#define VAL 1005
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int N, i, j;
int v[CAR];
char s[VAL], *P;
string chng;
int evaluare();
int termen();
int factor();
int comute(int x)
{
if (x==0)
return 1;
else
return 0;
}
int evaluare()
{
int nr=termen();
if (*P==' ')
P++;
while (*P=='O' && *(P+1)=='R')
{
P+=2;
nr=(nr | termen());
if (*P==' ')
P++;
}
return nr;
}
int termen()
{
int nr=factor();
if (*P==' ')
P++;
while (*P=='A' && *(P+1)=='N')
{
P+=3;
nr=(nr & factor());
if (*P==' ')
P++;
}
return nr;
}
int factor()
{
int nr=0;
if (*P==' ')
P++;
if (*P=='(')
{
P++;
nr=evaluare();
P++;
return nr;
}
if (*P>='A' && *P<='Z' && (*(P+1)==' ' || *(P+1)<=')'))
{
nr=v[*P];
P++;
return nr;
}
if (*P=='T' && *(P+1)=='R')
{
nr=1;
P+=4;
return nr;
}
if (*P=='F' && *(P+1)=='A')
{
nr=0;
P+=5;
return nr;
}
if (*P=='N' && *(P+1)=='O')
{
P+=3;
nr=comute(factor());
return nr;
}
}
int main()
{
fin.get(s, VAL, '\n');
fin.get();
strcat(s, " ");
fin >> N;
fin >> chng;
for (i=0; i<N; i++)
{
P=s;
v[chng[i]]=comute(v[chng[i]]);
fout << evaluare();
}
fin.close();
fout.close();
return 0;
}