Pagini recente » Rating Condrovici Florin (Flor1nC23) | Cod sursa (job #402074) | Cod sursa (job #826775) | Cod sursa (job #1097766) | Cod sursa (job #2015626)
#include <fstream>
#include <stack>
#include <cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
char s[1005],x;
bool a[26];
bool exp[1005];
bool op[1005];
stack<int>S;
int n,ct,k;
bool Evaluare(int poz,int last)
{int i;
bool val=exp[poz];
if(poz==last)return exp[last];
else if(op[poz]==false)return ((exp[poz])||(Evaluare(poz+1,last)));
else {for(i=poz+1;i<=last;i++)
{if(op[i-1]==true)
val=((val)&&(exp[i]));
else {val=((val)||(Evaluare(i,last)));
exp[poz]=val;
break;
}
}
return val;
}
}
bool Litera(char q)
{if(q>='A'&&q<='Z')return 1;
else return 0;
}
int main()
{int i,j;
fin.getline(s,1001);
fin>>n;
for(j=1;j<=n;j++)
{fin>>x;
a[x-65]=!(a[x-65]);
//fout<<x<<" "<<a[x-65]<<" ";
ct=0;
for(i=0;i<strlen(s);i++)
{if(Litera(s[i])==1&&Litera(s[i+1])==0){ct++;if(exp[ct]==0){exp[ct]=a[s[i]-65];//fout<<"||";
}
else exp[ct]=!(a[s[i]-65]);
//fout<<exp[ct]<<" "<<ct<<" ";
}
else if(s[i]=='N'){exp[ct+1]=true;i+=2;}
else if(s[i]=='A'){op[ct]=true;i+=2;}
else if(s[i]=='O'){op[ct]=false;i++;}
else if(s[i]=='T'){ct++;if(exp[ct]==0)exp[ct]=1;
else exp[ct]=0;
//fout<<"||"<<exp[ct]<<" "<<ct<<" ";
i+=3;
}
else if(s[i]=='F'){ct++;if(exp[ct]==0)exp[ct]=0;
else exp[ct]=1;
//fout<<"||"<<exp[ct]<<" "<<ct<<" ";
i+=4;
}
else if(s[i]=='(')S.push(ct+1);
else if(s[i]==')'){exp[S.top()]=Evaluare(S.top(),ct);for(k=S.top()+1;k<=ct;k++)exp[k]=0;ct=S.top();S.pop();//fout<<"*"<<exp[ct]<<"*"<<ct<<" ";
}
}
fout<<Evaluare(1,ct);
for(i=1;i<=1001;i++)
{exp[i]=0;
op[i]=0;
}
while(!S.empty())
S.pop();
}
}