Pagini recente » Cod sursa (job #1816576) | Cod sursa (job #2475606) | Cod sursa (job #1600708) | Cod sursa (job #841445) | Cod sursa (job #362701)
Cod sursa(job #362701)
#include <fstream>
#include <string>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
#define Lmax 1001
bool val[27];
int nr;
char s[Lmax],*p;
bool eval();
bool factor();
bool termen();
void read()
{
char *a;
f.getline(s,Lmax);
while((a=strstr(s,"AND")))
{
strcpy(a,a+2);
a[0]='a';
}
while((a=strstr(s,"OR")))
{
strcpy(a,a+1);
a[0]='o';
}
while((a=strstr(s,"NOT")))
{
strcpy(a,a+2);
a[0]='!';
}
while((a=strstr(s," ")))
{
strcpy(a,a+1);
}
}
bool eval()
{
bool ok=factor();
while(*p=='a')
{
p++;
ok=ok&factor();
}
return ok;
}
bool factor()
{
bool ok=termen();
while(*p=='o')
{
p++;
ok=ok|termen();
}
return ok;
}
bool termen()
{
bool ok=false,nott=false;
if(*p=='!')
{
p++;
nott=true;
}
if(*p=='(')
{
p++;
ok=eval();
p++;
}
else
{
ok=val[*p-'A'];
p++;
}
if(nott)
ok=!ok;
return ok;
}
int main()
{
char c;
read();
f>>nr;
while(nr--)
{
f>>c;
if(val[c-'A'])
val[c-'A']=false;
else
val[c-'A']=true;
p=s;
g<<eval();
}
return 0;
}