Cod sursa(job #312958)

Utilizator irene_mFMI Irina Iancu irene_m Data 7 mai 2009 16:47:55
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <fstream.h>
#include <string.h>
#include <stdlib.h>
#define MaxN 109
#define MaxS 1009
#define MaxC 300

char S[MaxS],sch[MaxN],str[MaxN];
int N,k;

int termen();
int factor();

void cit()
{
	ifstream fin("bool.in");
	fin.get(S,MaxS,'\n'); fin.get();
	fin>>N; fin.get();
	fin.get(sch,MaxN,'\n');
	fin.close();
}

int eval()
{
	int r=termen();
	while(S[k]=='O' && S[k+1]=='R')
	{
		k+=2;
		r|=termen();
	}
	return r;
}

int termen()
{
	int r=factor();
	while(S[k]=='A' && S[k+1]=='N' && S[k+2]=='D')
	{
		k+=3;
		r=r and factor();
	}
	return r;
}
	
int factor()
{
	int r;
	if(S[k]=='(')
	{
		k++;
		r=eval();
		k++;
	}
	else
		if(S[k]=='N' && S[k+1]=='O' && S[k+2]=='T')
		{
			k+=3;
			r=!factor();
		} else
			if(S[k]=='T' && S[k+1]=='R' && S[k+2]=='U' && S[k+3]=='E')
			{
				k+=4;
				r=1;
			} else
				if(S[k]=='F' && S[k+1]=='A' && S[k+2]=='L' && S[k+3]=='S' && S[k+4]=='E')
				{
					k+=5;
					r=0;
				} else
				{
					r=var[S[k]-'A'];
					k+=3;
				}
	return r;
}

int main()
{
	cit();
	int i=-1,n=strlen(S),m=-1;
	while(i<n)
	{  
        i++;  
        str[++m] = S[i];  
        while(S[i] == S[i + 1] && S[i + 1] == ' ' && i < n) 
			i++;  
    }  
    str[++m]=0;  
    strcpy(S,str);
	ofstream fout("bool.out");
	for(int i=0;i<N;i++)
	{
		var[sch[i]-'A']=1-var[sch[i]-'A'];
		k=0;
		fout<<eval();
	}
	fout.close();
}