Pagini recente » Rating Calin Jilavu (optik88) | Cod sursa (job #301429) | Cod sursa (job #1563031) | Cod sursa (job #723692) | Cod sursa (job #907987)
Cod sursa(job #907987)
#include<fstream>
#define DIM 1010
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int t,i,n,v[DIM];
char s[DIM],S[DIM],*p=S,c;
bool exp(); bool orr(); bool an(); void cod();
int main ()
{
f.get(s,1001);
t=-1;
cod();
v['1']=1;
f>>n;
for(i=1;i<=n;++i)
{
*p=S[0];
f>>c;
v[c]=!v[c];
g<<exp();
}
}
bool exp()
{
bool r=orr();
while(*p=='|')
{
++p;
r=r|orr();
}
return r;
}
bool orr()
{
bool r=an();
while(*p=='&')
{
++p;
r=r&an();
}
return r;
}
bool an()
{
bool r=0;
bool no=0;
while(*p=='!'){
no=!no; ++p; }
if(*p=='(')
{
++p;
if(no)
r=!exp();
else
r=exp();
++p;
}
else
{
if(no)
r=!v[*p];
else
r=v[*p];
p++;
}
return r;
}
void cod()
{
for(i=0;s[i];++i)
{
if(s[i]==' ')
continue;
if(s[i]=='(')
S[++t]=s[i];
else
if((s[i]<='Z'&&s[i]>='A')&&(s[i+1]>'Z'||s[i+1]<'A'))
S[++t]=s[i];
else
if(s[i]==')')
S[++t]=s[i];
else
{
if(s[i]=='T')
{
S[++t]='1';
i+=3;
}
if(s[i]=='F')
{
S[++t]='0';
i+=4;
}
if(s[i]=='N')
{
S[++t]='!';
i+=2;
}
if(s[i]=='O')
{
S[++t]='|';
i++;
}
if(s[i]=='A')
{
S[++t]='&';
i+=2;
}
}
}
}