Cod sursa(job #281923)

Utilizator space.foldingAdrian Soucup space.folding Data 16 martie 2009 13:20:36
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <stdio.h>
#include <string.h>
#include <iostream.h>
char e[1000];
enum bool {false, true};
bool alf[26]={false};
int L, N, i;


bool EvaluareExpresie();
bool EvaluareOr();
bool EvaluareAnd();

char* extra(int k)
{
	char temp[100];
	int t=0;
	while(k<L && e[k]!=' ')
		temp[t++]=e[k++];
	temp[t]=0;
	return &temp[0];
}

bool EvaluareExpresie()
{
	bool rez;
	rez=EvaluareOr();
	while(i<L && !strcmp(extra(i), "OR"))
	{
		i+=3;
		rez = rez || EvaluareOr();
	}
	return rez;
}

bool EvaluareOr()
{
	bool rez;
	rez=EvaluareAnd();
	while(i<L && !strcmp(extra(i), "AND"))
	{
		i+=4;
		rez = rez && EvaluareAnd();
	}
	return rez;
}

bool EvaluareAnd()
{
	bool rez;
	if(e[i]=='(')
	{
		i++;
		rez=EvaluareExpresie();
		i++;
	}
	else
		if(!strcmp(extra(i), "NOT"))
		{
			i+=4;
			rez=!EvaluareExpresie();
		}
		else
			if(e[i]>='A'&&e[i]<='Z' && (e[i+1]==' ' || e[i+1]==')'))
			{
				rez=alf[e[i]-'A'];
				i+=2;
			}
			else
				if(!strcmp(extra(i), "FALSE"))
				{
					i+=6;
					return false;
				}
				else 
				{
					i+=5;
					return true;
				}
	return rez;
}



int main ()
{
	char c;
	freopen("bool.in", "r", stdin);
	freopen("bool.out", "w", stdout);
	cin.getline(e, 1000);
	cin>>N;
	
	L=strlen(e);
	for(int j=0; j<N; j++)
	{
		cin>>c;
		alf[c-'A']=!alf[c-'A'];
		i=0; 
		printf("%d", EvaluareExpresie());
	}
	return 0;
}