Cod sursa(job #633868)

Utilizator TodeaDariustodea darius TodeaDarius Data 14 noiembrie 2011 23:18:33
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<fstream>
#include<string.h>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
char v[1005],mod[105],expr[1000][5];
int n,i,s[1005],nr[1000];
int rezolvare(char mod[i],int rez)
{
	int i=0;
	if(s[mod[i]-'A'])==1) s[mod[i]-'A']=0;
	else
	{s[mod[i]-'A']=1;}
	while(i<b)
	{
		if(v[i]>='A' && v[i]<='Z' && v[i+1]==' ')
		{
			nr[++knr]=s[mod[i]-'A'];i++;
			while(knr>=2 && (expr[kexpr]=="NOT" || expr[kexpr]=="AND"))
			{
				if(expr[kexpr]=="NOT")
				{
					if(nr[knr]==0) nr[knr]=1;
					if(nr[knr]==1) nr[knr]=0;
					kexpr--;
				}
				if(expr[kexpr]=="AND")
				{
					nr[knr-1]=nr[knr] && nr[knr-1];
					knr--;kexpr--;
				}
		}
		if(v[i]>='A' && v[i]<='Z' && v[i+1]!=' ')
		{
			if(v[i]=='A' || v[i]=='N')
			{
				i=i+3;
				if(v[i]=='A') strcpy(expr[++kexpr],"AND");
				if(v[i]=='N') strcpy(expr[++kexpr],"NOT");
			}
			if(v[i]=='T') {nr[++knr]=1;i=i+4;}
			if(v[i]=='F') {nr[++knr]=0;i=i+5;}
			if(v[i]=='O') {strcpy(expr[++kexpr],"OR");i=i+2;}
		}
		if(v[i]=='(') {expr[++kexpr]='(';}
		
int main()
{
	for(i=0
	f.getline(v,1005,'\n');
	f>>n;f.getline(mod,105,'\n');
	a=strlen(mod);b=strlen(v);
	for(i=0;i<a;i++)
	{
		rezolvare(mod[i],rez);
		g<<rez;
	}
	return 0;
}