Cod sursa(job #148318)

Utilizator c_sebiSebastian Crisan c_sebi Data 4 martie 2008 09:40:04
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream.h>

char e[1005], *p;
int n, val[26];


int OR(char *s);
int AND(char *s);
int evalFact(char *s);

int OR(char e[]){
	int t=AND(e);
	while(*p=='O' && *(p+1)=='R'){
		p++; p++; if(*p==' ') p++;
		t = t | AND(e);
		if(*p==' ') p++;
	}
	return t;
}

int AND (char e[]){
	int t=evalFact(e);
	while(*p=='A' && *(p+1)=='N'){
		p++; p++; p++; if(*p==' ') p++;
		t = t & evalFact(e);
		if(*p==' ') p++;
	}
	return t;
}

int evalFact(char e[]){
	int t, neg=0;
	if(*p=='N' && *(p+1)=='O') {p++; p++; p++; if(*p==' ') p++; neg=1; t=evalFact(e); }
	else if(*p=='('){
		p++; if(*p==' ') p++;
		t = OR(e);
		if(*p==' ') p++; p++; if(*p==' ') p++;
	}
	else{
		if(*p=='T' && *(p+1) == 'R') {p++; p++; p++; p++; if(*p==' ') p++; t=1;}
		else if(*p=='F' && *(p+1)=='A') {p++; p++; p++; p++; p++; if(*p==' ') p++; t=0;}
		else{t = val[*p-'A'];
			p++;
		}
		if(*p==' ') p++;
	}
	if(neg) return 1-t;
	return t;
}



int main(){
	int ok, i;
	char c;
	ifstream f("bool.in"); ofstream g("bool.out");
	f.getline(e, 1001);
//	f.get();
	f>>n;
   f.get();
	while(n--){
		 f.get(c);
		 val[c-'A']=1-val[c-'A'];
		 p=e;
		 g<<OR(e);
	}
	g<<"\n";
	f.close();
	g.close();
	return 0;
}