Pagini recente » Cod sursa (job #705562) | Cod sursa (job #147140) | Cod sursa (job #2790647) | Cod sursa (job #2058607) | Cod sursa (job #1898104)
#include <fstream>
#include <string.h>
#include <ctype.h>
using namespace std;
char v[1000];
char val[28];
ifstream fin( "bool.in" );
ofstream fout( "bool.out" );
void citire_sir(){
int poz;
char ch;
fin >> v;
ch = fin.get();
poz = 0;
val[26] = 1;///codificam true ca z+1 si false ca z+2
while( ch!='\n'){
while( v[poz]=='(' || v[poz]==')' )
poz++;
if( strcmp( v+poz, "TRUE")==0 ){
v[poz] = 'Z'+1;
v[poz+1] = 0;
}
else if( strcmp( v+poz, "FALSE") == 0 ){
v[poz] = 'Z'+2;
v[poz+1] = 0;
}
else if( strcmp( v+poz, "NOT" ) == 0 ){
v[poz] = '!';
v[poz+1] = 0;
}
else if( strcmp( v+poz, "OR" ) == 0 ){
v[poz] = '|';
v[poz+1] = 0;
}
else if( strcmp( v+poz, "AND" ) == 0 ){
v[poz] = '&';
v[poz+1] = 0;
}
poz = strlen( v );
fin >> v+poz;
ch = fin.get();
}
}
int poz;
int eval();
int exp_sau();
int exp_si();
int eval(){
int exp = exp_sau();
while( v[poz]=='|' ){
poz++;
exp = exp | exp_sau();
}
return exp;
}
int exp_sau(){
int exp = exp_si();
while( v[poz]=='&' ){
poz++;
exp = exp & exp_si();
}
return exp;
}
int exp_si(){
int exp;
if( v[poz]=='!' ){
poz++;
return !exp_si();
}
else if( v[poz]=='(' ){
poz++;
exp = eval();
poz++;
}
else{
exp = val[ v[poz] - 'A' ];
poz++;
}
return exp;
}
int main(){
int n, i;
char ch;
citire_sir();
fin >> n;
fin.get();
for( i=0; i<n; i++ ){
ch = fin.get();
val[ ch - 'A' ] = 1 - val[ ch - 'A' ];
poz = 0;
fout << eval();
}
fout << "\n";
fin.close();
fout.close();
return 0;
}