Pagini recente » Cod sursa (job #1142027) | Cod sursa (job #1987713) | Cod sursa (job #2089292) | Cod sursa (job #684719) | Cod sursa (job #2700956)
#include <fstream>
using namespace std;
ifstream cin("bool.in");
ofstream cout("bool.out");
const int NOP =101,LE=1001,NL=26;///nr operatii,lungime expresie, nr litere
char s[LE],op[NOP];
bool val[NL];
int index=0;
void transforma();
bool expresie();
bool termen();
bool factor();
void transforma()
{
int nr=0,i=0;
while(s[i]!='\0')
{
if(s[i]=='T' && s[i+1]=='R')
{
s[nr++]='1';
i+=4;
}
else if(s[i]=='F' && s[i+1]=='A')
{
s[nr++]='0';
i+=5;
}
else if(s[i]=='N' && s[i+1]=='O')
{
s[nr++]='!';
i+=3;
}
else if(s[i]=='O' && s[i+1]=='R')
{
s[nr++]='|';
i+=2;
}
else if(s[i]=='A' && s[i+1]=='N')
{
s[nr++]='&';
i+=3;
}
else if(s[i]!=' ')
{
s[nr++]=s[i++];
}
else ++i;
}
s[nr]='\0';
}
bool expresie()
{
bool sau = termen();
while(s[index]=='|')
{
++index;
sau = (termen() || sau);
}
return sau;
}
bool termen()
{
bool si = factor();
while(s[index]=='&')
{
++index;
si = (factor() && si);
}
return si;
}
bool factor()
{
bool nu = false,v;
while(s[index]=='!')
{
++index;
nu = (!nu);
}
if(s[index] == '(' )
{
++index;
v=expresie();
++index;
if(nu)
{
return !v;
}
return v;
}
if(s[index]=='0')
{
++index;
v=false;
}
else if(s[index]=='1')
{
++index;
v=true;
}
else
{
v = val[s[index++]-'A'];
}
if(nu) return !v;
return v;
}
int main()
{
cin.getline(s,LE);
transforma();
int n;
cin>>n>>op;
for(int i=0;i<n;++i)
{
val[op[i]-'A']=(!val[op[i]-'A']);
index=0;
cout<<expresie();
}
return 0;
}