Pagini recente » Cod sursa (job #1520525) | Cod sursa (job #1762091) | Cod sursa (job #2626677) | Cod sursa (job #965745) | Cod sursa (job #1832564)
#include <iostream>
#include <fstream>
#include <stack>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
stack <int>S;
string s;
bool negare(bool x);
bool islit(char x);
bool eval()
{
bool termen,termen2;
if(!S.empty())
{
if(S.top()==-5)
{
S.pop();
termen=eval();
}
else
{
termen=S.top();
S.pop();
}
}
if(!S.empty())
if(S.top()==2)
{
termen=negare(termen);
S.pop();
}
cout<<"Am intrat in eval "<<termen<<'\n';
while(!S.empty() && S.top()!=5)
{
cout<<"Am intrat in eval "<<termen<<'\n';
if(S.top()==-5)
{
S.pop();
termen2=eval();
}
else
{
int op;
if(!S.empty() && S.top()!=5)
{
op=S.top();S.pop();
if(S.top()==-5)
{
S.pop();
termen2=eval();
}
else
{
termen2=S.top();S.pop();
}
if(!S.empty())
if(S.top()==2)
termen2=negare(termen2);
if(op==3){
if(termen==1 && termen2==1)termen=1; else termen =0;}
if(op==4){
if(termen==1 || termen2==1)termen=1; else termen=0;}
}
}
}
if(!S.empty())S.pop();
return termen;
}
bool negare(bool x)
{
return x==0;
}
bool islit(char x)
{
return x<=90 && x>=65;
}
bool lit[90+3];
int n;
int main()
{
getline(fin,s);
fin>>n;
for(int r=1;r<=n;++r)
{
char l;
fin>>l;
if(lit[l]==1)lit[l]=0;
else lit[l]=1;
for(int i=0;i<s.size();++i)
{
if(islit(s[i]) && (s[i+1]==' ' or s[i+1]==')') && (i==0 or s[i-1]==' ' or s[i-1]=='('))S.push(lit[s[i]]);
else
{
if(s[i]=='N' && s[i+1]=='O')S.push(2);
else if(s[i]=='A' && s[i+1]=='N')S.push(3);
else if(s[i]=='O' && s[i+1]=='R')S.push(4);
else if(s[i]=='T' && s[i+1]=='R')S.push(1);
else if(s[i]=='F' && s[i+1]=='A')S.push(0);
else if(s[i]=='(')S.push(5);
else if (s[i]==')')S.push(-5);
}
}
fout<<eval();
}
return 0;
}