Cod sursa(job #1339050)

Utilizator horiainfoTurcuman Horia horiainfo Data 10 februarie 2015 17:18:18
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <cstring>
#define NR 1005
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
char a[NR];
int n,poz,L[30],d;
bool eval();
bool termen()
{
	bool t;
	while(a[poz]==' ') poz++;
	if(a[poz]=='(')
	{
        poz++;
		t=eval();
		poz++;
	}
	else
	if(a[poz]=='N' && a[poz+1]=='O')
	{
		poz+=3;
		t=!termen();
	}
	else
	if(a[poz]=='T' && a[poz+1]=='R')
	{
		poz+=4;
		t=true;
	}
	else
	if(a[poz]=='F' && a[poz+1]=='A')
	{
		poz+=5;
		t=false;
	}
	else
		t=L[a[poz]-'A'],poz++;
	return t;
}
bool eval()
{
	bool t=termen();

	while(poz<d)
	{
		if(a[poz]==' ') poz++;
		else
		if(a[poz]=='A' && a[poz+1]=='N')
		{
			poz+=3;
			t=t&termen();
		}
		else
		if(a[poz]=='O' && a[poz+1]=='R')
		{
			poz+=2;
			t=t|eval();
		}
		else break;
	}
	return t;
}
int main()
{
	char ch;
    fin.getline(a,NR);
	d=strlen(a);
    fin>>n;
    fin.get();

	for(int i=1;i<=n;i++)
	{
		fin>>ch;
		L[ch-'A']=!L[ch-'A'];
		poz=0;
		fout<<eval();
	}
    return 0;
}