Pagini recente » Cod sursa (job #2829324) | Cod sursa (job #1092892) | Cod sursa (job #2586238) | Istoria paginii runda/31032008/clasament | Cod sursa (job #1235151)
#include <fstream>
using namespace std;
ofstream out("bool.out");
char e[1001];
int lit[28];
int expresie();
int termen();
int factor();
int p;
int expresie()
{
int val = termen();
if( e[p+2] == 'O' && e[p+3] == 'R' ){
p+=5;
if ( val == 1 ){
p+=2;
return 1;
}
else{
if ( termen() == 1 ){
p+=2;
return 1;
}
else{
p+=2;
return 0;
}
}
}
return val;
}
int termen()
{
int val=factor();
if( e[p+2] == 'A' && e[p+3] == 'N' ){
p+=6;
if ( val == factor() ){
p+=2;
return 1;
}
else{
p+=2;
return 0;
}
}
return val;
}
int factor()
{
int val=lit[e[p] -'A' + 1 ];
if ( e[p] == '(' ){
p++;
val = expresie();
p++;
}
if( e[p] == 'N' && e[p+1] == 'O' ){
p+=4;
if ( e[p] == '(' ){
p++;
val = expresie();
p++;
}
if ( lit[e[p] -'A' + 1 ]== 0 )
return 1;
else return 0;
}
if ( e[p] == 'T' && e[p+1] =='R' ){
p+=4;
return 1;
}
if ( e[p] == 'F' && e[p+1] == 'A' ){
p+=5;
return 0;
}
return val;
}
int main()
{
ifstream in("bool.in");
in.getline(e,1001,'\n');
int n;
char x;
in >> n;
for ( int i = 1; i <= n; i++ ){
in >> x;
if ( lit[x - 'A' + 1] == 0 )
lit[x - 'A' + 1] = 1;
else lit[x - 'A' + 1] = 0;
p = 0;
out << expresie();
}
return 0;
}