Pagini recente » Cod sursa (job #844726) | Cod sursa (job #1167991) | Cod sursa (job #3252290) | Cod sursa (job #1520719) | Cod sursa (job #907162)
Cod sursa(job #907162)
#include<fstream>
#include<string.h>
using namespace std;
#define max_n 1010
#define max_l 50
ifstream f("bool.in");
ofstream g("bool.out");
char *p ;
char a[max_n] , expr[max_n] , V[max_l] ;
int k = -1 , lungime , n;
bool Val[max_l];
void read(){
f.get(a , max_n);
lungime = strlen(a);
for( int i = 0 ; i < lungime ; i++ ){
if( a[i] == ' ' )
continue;
if( a[i] == '(' || a[i] == ')' ){
expr[++k] = a[i];
continue;
}
if( a[i] == 'A' && a[i+1] == 'N' && a[i+2] == 'D' ){
expr[++k] = '&'; i += 2;
continue;
}
if( a[i] == 'N' && a[i+1] == 'O' && a[i+2] == 'T' ){
expr[++k] = '!'; i += 2;
continue;
}
if( a[i] == 'O' && a[i+1] == 'R' ){
expr[++k] = '|'; i++;
continue;
}
if( a[i] == 'T' && a[i+1] == 'R' && a[i+2] == 'U' && a[i+3] == 'E' ){
expr[++k] = '1'; i += 3;
continue;
}
if( a[i] == 'F' && a[i+1] == 'A' && a[i+2] == 'L' && a[i+3] == 'S' && a[i+4] == 'E' ){
expr[++k] = '0'; i += 4;
continue;
}
expr[++k] = a[i];
}
f>>n;
f>>V;
}
int expresie();
int factor();
int termen();
void solve(){
int i ;
for( i = 0 ; i < n ; i++ ){
Val[ V[i] - 'A' ] ^= 1;
p = expr;
g<<expresie();
}
}
int main(){
read();
solve();
return 0;
}
int expresie(){
int rez = factor();
while( (*p) == '|' ){
p++;
rez |= factor();
}
return rez;
}
int factor(){
int rez = termen();
while( (*p) == '&' ){
p++;
rez &= termen();
}
return rez;
}
int termen(){
int rez;
if( (*p) == '(' ){
p++;
rez = expresie();
p++;
}
else{
if( (*p) == '!' ){
p++;
rez = termen();
rez ^= 1;
}
else{
if( (*p) == '1' ){
rez = 1;
p++;
}
else{
if( (*p) == '0' ){
rez = 0;
p++;
}
else{
rez = Val[ (*p) - 'A' ];
p++;
}
}
}
}
return rez;
}