Pagini recente » Cod sursa (job #1421851) | Cod sursa (job #1187840) | Cod sursa (job #1057389) | Cod sursa (job #1857925) | Cod sursa (job #2256100)
#include <fstream>
#include <cstring>
#include <iostream>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int expresie();
int sau();
int si();
int i,fv[30],lg;
char c,s[1100],S[1100];
int expresie()
{
int val,ok=0;
if(S[i]=='(')
{
i++;
val=sau();
i++;
}
else if(S[i]=='!')
{
i++;
if(ok==1)ok=0;
else ok=1;
val=expresie();
}
else if('A'<=S[i]&&S[i]<='Z')
{
val=fv[S[i]-'A'+1];
i++;
}
else if(S[i]=='0'||S[i]=='1')
{
i++;
val=S[i]-'0';
}
if(ok==1)
{
if(val==1)val=0;
else val=1;
}
return val;
}
int si()
{
int val;
val=expresie();
while(i<lg && (S[i]=='&'))
{
i++;
val=(val&expresie());
}
return val;
}
int sau()
{
int val;
val=si();
while(i<=lg && (S[i]=='^'))
{
i++;
val=(val|si());
}
return val;
}
int n,j;
int main()
{
f.getline(s,1100);
lg=-1;
i=0;
while(i<strlen(s))
{
if(s[i]=='('||s[i]==')')
{
lg++;
S[lg]=s[i];
i++;
}
else if(s[i]=='A'&&s[i+1]=='N')
{
i=i+3;
lg++;
S[lg]='&';
}
else if(s[i]=='O'&&s[i+1]=='R')
{
i=i+2;
lg++;
S[lg]='^';
}
else if(s[i]=='N'&&s[i+1]=='O')
{
i=i+3;
lg++;
S[lg]='!';
}
else if(s[i]=='F'&&s[i+1]=='A')
{
i=i+5;
lg++;
S[lg]='0';
}
else if(s[i]=='T'&&s[i+1]=='R')
{
i=i+4;
lg++;
S[lg]='1';
}
else if(s[i]==' '){i++;}
else
{
lg++;
S[lg]=s[i];
i++;
}
}
S[lg+1]='\0';
f>>n;
for(j=1;j<=n;j++)
{
f>>c;
if(fv[c-'A'+1]==0)fv[c-'A'+1]=1;
else fv[c-'A'+1]=0;
i=0;
g<<sau();
}
return 0;
}