Pagini recente » Cod sursa (job #1432873) | Cod sursa (job #911526) | Cod sursa (job #572454) | Cod sursa (job #2685505) | Cod sursa (job #1066286)
#include <fstream>
#include <cstring>
using namespace std;
int i,n,k,t;
char s[1005];
char ch;
bool ok[200];
bool expresie();
bool termen();
bool factor();
bool expresie()
{
bool r=termen();
while(s[i]=='|')
{
i++;
if(r || termen())
r=1;
else
r=0;
}
return r;
}
bool termen()
{
bool r=factor();
while(s[i]=='&')
{
i++;
if(r && factor())
r=1;
else
r=0;
}
return r;
}
bool factor()
{
bool r;
if(s[i]=='!')
{
i++;
return(!(factor()));
}
else
if(s[i]=='(')
{
i++;
r=expresie();
i++;
return r;
}
else
if(s[i]=='1')
{
i++;
return 1;
}
else
if(s[i]=='0')
{
i++;
return 0;
}
else
if(s[i]>='A' && s[i]<='Z')
{
i++;
return ok[s[i-1]-'A'];
}
}
int main()
{
ifstream f("bool.in");
ofstream g("bool.out");
f.get(s,1005);
for(i=0;s[i]!=0;i++)
{
if(s[i]=='T' && s[i+1]=='R')
{
s[i]='1';
strcpy(s+i+1,s+i+4);
}
else
if(s[i]=='F' && s[i+1]=='A')
{
s[i]='0';
strcpy(s+i+1,s+i+5);
}
else
if(s[i]=='O' && s[i+1]=='R')
{
s[i]='|';
strcpy(s+i+1,s+i+2);
}
else
if(s[i]=='A' && s[i+1]=='N')
{
s[i]='&';
strcpy(s+i+1,s+i+3);
}
else
if(s[i]=='N' && s[i+1]=='O' && s[i+2]=='T')
{
s[i]='!';
strcpy(s+i+1,s+i+3);
}
}
for(i=0;s[i]!=0;i++)
if(s[i]==' ')
{
strcpy(s+i,s+i+1);
}
f.get();
f>>n;
f.get();
for(t=1;t<=n;t++)
{
f>>ch;
i=0;
if(ok[ch-'A'])
ok[ch-'A']=0;
else
ok[ch-'A']=1;
if(expresie())
g<<'1';
else
g<<'0';
}
f.close();g.close();
return 0;
}