Pagini recente » Cod sursa (job #2567875) | Cod sursa (job #523570) | Cod sursa (job #38314) | Cod sursa (job #356815) | Cod sursa (job #1832610)
#include <iostream>
#include <fstream>
#include <stack>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
stack <int>S;
int i,k,j,x2,semn;
string str[1001];
bool islit(char x);
void rez()
{
if(str[j] != ")" || str[j+1] !="OR")
{
x2=S.top();
S.pop();
while(!S.empty() && S.top()<0 && S.top()!=-4)
{
semn=S.top();
S.pop();
if(semn==-3)S.push(1-x2);
else if(semn==-1)S.top()=(S.top()&x2);
else S.top()=(S.top()|x2);
x2=S.top();
S.pop();
}
S.push(x2);
}
else
{
if(str[j]==")"){
x2=S.top();
S.pop();
S.pop();
S.push(x2);
str[j]="$";
rez();
str[j]=")";
}
}
}
bool islit(char x)
{
return x<=90 && x>=65;
}
bool lit[90+3];
int n;
int main()
{
string s,x="";
getline(fin,s);
for(i=0;i<s.size();i++)
{
if(isalpha(s[i]))x.push_back(s[i]);
else
{
if(x!="")str[++k]=x;
x="";
if(s[i]=='(' || s[i]==')')x.push_back(s[i]);
if(x!="")str[++k]=x;
x="";
}
}
if(x!="")str[++k]=x;
fin>>n;
for(int r=1;r<=n;++r)
{
char l;
fin>>l;
lit[l]=1-lit[l];
for(j=1;j<=k;j++)
{
if(str[j]=="FALSE")
{
S.push(0);
rez();
}
else if(str[j]=="TRUE")
{
S.push(1);
rez();
}
else if(str[j].size()==1 && isalpha(str[j][0]))
{
S.push(lit[str[j][0]]);
rez();
}
else if(str[j]==")")rez();
else if(str[j]=="AND")S.push(-1);
else if(str[j]=="OR")S.push(-2);
else if(str[j]=="NOT")S.push(-3);
else if(str[j]=="(")S.push(-4);
}
fout<<S.top();
S.pop();
}
return 0;
}