Cod sursa(job #411430)

Utilizator chibicitiberiuChibici Tiberiu chibicitiberiu Data 4 martie 2010 21:39:32
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
#include<fstream>
using namespace std;
//const char pre[] = {"AND", "OR", "NOT", "TRUE", "FALSE"};

char str[1001], *var;
bool alpha[30];
int n, len, i;

bool scan()
{
	bool not=false;
	bool a=false, b=false;
	int op=0;

	while (i<len && str[i]!=')')
	{
		if (str[i] == ' ') i++;

		not = false;
		if (str[i] == 'N' &&  str[i+1] == 'O') {
				not = true; i+=4;
		}
		
		if (str[i] == '(') {++i; a = scan();}
		else if (str[i] == 'T' && str[i+1] == 'R') {
			a = true; i+=4;
		}
		else if (str[i] == 'F' && str[i+1] == 'A') {
			a = false; i+=5;
		}
		else a = alpha[str[i]-'A']; 
		if (not) a = !a;

		i++;
		if (str[i] == ' ') i++;
		if (str[i] == ')') break;
		
		if (str[i] == 'A' && str[i+1] == 'N') {
			op = 1; i+=4; }
		else if (str[i] == 'O' && str[i+1] == 'R') {
			op = 2; i+=3; }


		not = false;
		if (str[i] == 'N' &&  str[i+1] == 'O') {
				not = true; i+=4;
		}
		
		if (str[i] == '(') {++i; b = scan();}
		else if (str[i] == 'T' && str[i+1] == 'R') {
			b = true; i+=4;}
		else if (str[i] == 'F' && str[i+1] == 'A') {
			b = false; i+=5; }
		else b = alpha[str[i]-'A']; 
		if (not) b = !b;

		i++; if (str[i] == ' ') i++;
	}

	if (op == 1) return a&b;
	else return a|b;
}


int main()
{
	char temp[10];
	ifstream in ("bool.in");
	ofstream out ("bool.out");
	
	in.getline(str, 1000, '\n');
	in.getline(temp, 10, '\n');
	n = atoi(temp);

	var = new char[n+1];
	len = strlen(str);

	in.getline(var, n+1, '\n');

	for (int ii = 0; ii < n; ii++) {
		alpha[var[ii] - 'A'] = !alpha[var[ii] - 'A'];
		i = 0; out<<scan();
	}

	out.close();
	in.close();
	delete[] var;
	return 0;

}