Pagini recente » Cod sursa (job #1739794) | Cod sursa (job #729835) | Cod sursa (job #2424393) | Cod sursa (job #2710211) | Cod sursa (job #1692163)
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
char s[1008],a[1008];
bool v[30];
int expresie();
int termen();
int factor();
int poz=1;
int main()
{ int n;
in.getline(s+1,1008);
in>>n;
in.get();
in.getline(a+1,1008);
int ok=0;
for(int i=1;s[i];i++)
{
if(s[i]=='T'&&s[i+1]=='R'){s[++ok]='1';i=i+3;}
else if(s[i]=='F'&&s[i+1]=='A'){s[++ok]='0';i=i+4;}
else if(s[i]=='O'&&s[i+1]=='R'){s[++ok]='|';i=i+1;}
else if(s[i]=='A'&&s[i+1]=='N'){s[++ok]='&';i=i+2;}
else if(s[i]=='N'&&s[i+1]=='O'){s[++ok]='!';i=i+2;}
else if(s[i]!=' ')s[++ok]=s[i];
}
s[++ok]='\0';
for(int i=1;a[i];i++)
{
v[a[i]-'A']=!v[a[i]-'A'];
poz=1;
out<<expresie();
}
return 0;
}
int expresie()
{
bool ans=termen();
while(s[poz]=='|')
{
++poz;
bool act=termen();
ans=ans||act;
}
return ans;
}
int termen()
{
bool ans=factor();
while(s[poz]=='&')
{
++poz;
bool act=factor();
ans=ans&&act;
}
return ans;
}
int factor ()
{ int ans;
if(s[poz]=='!')
{
++poz;
ans=factor();
return !ans;
}
if(s[poz]=='(')
{
++poz;
ans=expresie();
++poz;
return ans;
}
if(s[poz]=='1'){
++poz;
return 1;
}
if(s[poz]=='0'){
++poz;
return 0;
}
ans=v[s[poz]-'A'];
++poz;
return ans;
}