Pagini recente » Cod sursa (job #1370761) | Cod sursa (job #1266868) | Cod sursa (job #229084) | Cod sursa (job #240697) | Cod sursa (job #921830)
Cod sursa(job #921830)
#include <fstream>
#include <cstring>
#include <string>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
char ex[1024],*p=ex,ch[101];
bool val[27];
bool eval(),andex(),notex(),fact();
bool eval() {
bool rez=andex();
while(*p=='O'&&*(p+1)=='R') {
p+=2;
rez |= andex();
}
return rez;
}
bool andex() {
bool rez=notex();
while(*p=='A'&&*(p+1)=='N'&&*(p+2)=='D') {
p+=3;
rez &= notex();
}
return rez;
}
bool notex() {
bool rez=fact();
while(*p=='N'&&*(p+1)=='O'&&*(p+2)=='T') {
p+=3;
rez = fact();
rez = (rez)?0:1;
}
return rez;
}
bool fact() {
bool rez=0;
if(*p=='(') {
++p;
eval();
++p;
} else {
if(*p=='F'&&*(p+1)=='A'&&*(p+2)=='L'&&*(p+3)=='S'&&*(p+4)=='E')
rez=0,p+=5;
else if(*p=='T'&&*(p+1)=='R'&&*(p+2)=='U'&&*(p+3)=='E')
rez=1,p+=4;
else
rez=val[*p];
}
return rez;
}
int main() {
int n,i,t;
char *c;
f.getline(ex, 1024);
f>>n>>ch;
t=0;
for(c=ex;c[0]!='\0';c++)
if(isspace(c[0]))
t++;
else
c[0-t]=c[0];
c[-t]='\0';
for(i=0;i<26;i++)
val[i]=0;
for(i=0;i<n;i++) {
val[ch[i]]=(val[ch[i]]?0:1);
g<<eval();
}
}