Pagini recente » Cod sursa (job #1271834) | Cod sursa (job #1272216) | Cod sursa (job #3120464) | Cod sursa (job #2292158) | Cod sursa (job #3237683)
#include <iostream>
#include <string>
using namespace std;
string newS,com,s,dummy;
bool frecv[27];
const int chardif=65;
int i,n;
bool AND(),NOT(),elem();
bool OR()
{
bool or_op = AND();
while(s[i]=='O')
{
i++;
or_op=or_op || AND();
}
}
bool AND()
{
bool and_op = NOT();
while(s[i]=='A')
{
i++;
and_op=and_op && NOT();
}
}
bool NOT()
{
bool not_op = elem();
while(s[i]=='N')
{
i++;
not_op=not_op && elem();
}
}
bool elem()
{
if(s[i]=='(')
{
i++;
bool val=OR();
return val;
}
return frecv[s[i]-chardif];
}
int main()
{
cin>>s;
cout<<s;
cin>>dummy;
cin>>n;
cin>>dummy;
cin>>com;
int lastptr=0;
for(i=0; i<s.size(); i++)
{
if(s[i]==' '||s[i]=='('||s[i]==')'&&s[lastptr]!=' ')
{
string subs = s.substr(lastptr,i-lastptr);
if(subs=="TRUE")
newS.push_back('1');
else if(subs=="FALSE")
newS.push_back('0');
else if(subs=="NOT")
newS.push_back('N');
else if(subs=="AND")
newS.push_back('A');
else if(subs=="OR")
newS.push_back('O');
else
newS.push_back(subs[0]);
lastptr=i+1;
}
while(s[i]=='('||s[i]==')')
newS.push_back(s[i]);
}
cout<<newS;
s=newS;
for(int j=0; j<com.size(); j++)
{
frecv[com[j]-chardif]= !frecv[com[j]-chardif];
cout<<OR();
}
return 0;
}