Pagini recente » Cod sursa (job #382105) | Cod sursa (job #566906) | Cod sursa (job #1097850) | Cod sursa (job #1997739) | Cod sursa (job #2842184)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
char s[1001];
int p;
bool valoare[27];
bool expresie();
bool termen();
bool factor();
bool expresie()
{
bool sau;
sau=termen();
while(s[p]=='|')
{
p++;
sau=(termen()||sau);
}
return sau;
}
bool termen()
{
bool shi;
shi=factor();
while(s[p]=='&')
{
p++;
shi=(factor()&&shi);
}
return shi;
}
bool factor()
{
bool val,semn=true;
while(s[p]=='!')
{
p++;
semn=(!semn);
}
if(s[p]=='(')
{
p++;
val=expresie();
p++;
if(semn==false)
return !val;
return val;
}
return valoare[s[p]-'A'];
}
int main()
{
f.getline(s,1001);
int i,n,k;
char c;
n=strlen(s)-1;
for(i=0;i<=n;i++)
if(s[i]=='A'&&s[i+1]=='N'&&s[i+2]=='D')
{
s[i]='&';
strcpy(s+i+1,s+i+3);
}
else
if(s[i]=='O'&&s[i+1]=='R')
{
s[i]='|';
strcpy(s+i+1,s+i+2);
}
else
if(s[i]=='N'&&s[i+1]=='O'&&s[i+2]=='T')
{
s[i]='!';
strcpy(s+i+1,s+i+3);
}
f>>k;
for(i=1;i<=k;i++)
{
f>>c;
valoare[c-'A']=(!valoare[c-'A']);
g<<expresie();
}
return 0;
}