Pagini recente » Cod sursa (job #1648681) | Cod sursa (job #2320975) | Cod sursa (job #3131709) | Cod sursa (job #2268059) | Cod sursa (job #2703607)
#include <fstream>
using namespace std;
#define NMAX 1000
int p, n1;
bool val[256];
string x, s;
bool and1();
bool termen1();
bool or1();
bool or1() {
bool rez = and1(), a;
while ( x[p] == '|' ) {
p++;
a = and1();
rez |= a;
}
return rez;
}
bool and1() {
bool rez = termen1(), a;
while ( x[p] == '&' ) {
p++;
a = termen1();
rez &= a;
}
return rez;
}
bool termen1() {
bool rez, rez1;
rez = 0;
while ( x[p] == '!' ) {
p++;
rez = !rez;
}
/// daca e paranteza sau litera
if ( x[p] == '(' ){
p++;
rez1 = or1();
}
else if ( p != n1 )
rez1 = val[x[p]];
p++;
if ( rez )
rez1 = !rez;
return rez1;
}
ifstream cin ( "bool.in" );
ofstream cout ( "bool.out" );
int main() {
int n, i;
char ch;
getline( cin, s );
for ( i = 0; i < s.size(); i++ ) {
if ( s.substr(i, 2) == "OR" )
x += '|', ++i;
else if ( s.substr(i, 3) == "NOT" )
x += '!', i += 2;
else if ( s.substr(i, 3) == "AND" )
x += '&', i += 2;
else if ( s.substr(i, 4) == "TRUE" )
x += '1', i += 3;
else if ( s.substr(i, 5) == "FALSE" )
x += '0', i += 4;
else if ( s[i] != ' ' )
x += s[i];
}
val['1'] = 1;
n1 = x.size();
cin >> n;
for ( i = 1; i <= n; i++ ) {
cin >> ch;
val[ch] = !val[ch];
p = 0;
cout << or1();
}
return 0;
}