Cod sursa(job #153917)

Utilizator andr33aradu ioana andr33a Data 10 martie 2008 20:07:22
Problema Bool Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.92 kb
#include<fstream.h>
#include<string.h>
ifstream f("bool.in");
ofstream g("bool.out");
char e[1001],fp[1001],st[1001],mod[101];
int s[1001],n,i,j,k,p[256],l,val[101],m;

void evalueaza()
{int i=0;
for(i=0;i<strlen(fp);i++)
	if(fp[i]=='&')
		s[i-2]=s[i-2]&&s[i-1];
	else
		if(fp[i]=='|')
			s[i-2]=s[i-2]||s[i-1];
		else
			if(fp[i]=='!')
				s[i-1]=!s[i];
			else
				s[i]=val[fp[i]-0];
g<<s[0];
}

int main()
{
p['!']=3;
p['&']=2;
p['|']=1;
f.getline(e,1000);
f>>n;f.get();
f.getline(mod,100);
m=strlen(e);
k=0;
while(k<m)
	if(e[k]=='N'&&e[k+1]=='O'&&e[k+2]=='T')
		{if(p[st[j-1]]>=p['!'])
			{fp[i]=st[j-1];
			i=i+1;
			st[j-1]='!';
			}
		else
			{st[j]='!';
			j=j+1;
			}
		k=k+3;
		}
	else
		if(e[k]=='A'&&e[k+1]=='N'&&e[k+2]=='D')
			{if(p[st[j-1]]>=p['&'])
				{fp[i]=st[j-1];
				i=i+1;
				st[j-1]='&';
				}
			else
				{st[j]='&';
				j=j+1;
				}
			k=k+3;
			}
		else
			if(e[k]=='O'&&e[k+1]=='R')
				{if(p[st[j-1]]>=p['|'])
					{fp[i]=st[j-1];
					i=i+1;
					st[j-1]='|';
					}
				else
					{st[j]='|';
					j=j+1;
					}
				k=k+2;
				}
			else
				if(e[k]==' ')
					k=k+1;
				else
					if(e[k]=='(')
						{st[j]='(';
						j=j+1;
						k=k+1;
						}
					else
						if(e[k]==')')
							{j=j-1;
							while(st[j]!='(')
								{fp[i]=st[j];
								i=i+1;
								j=j-1;
								}
							k=k+1;
							}
						else
							if(e[k]=='F'&&e[k+1]=='A'&&e[k+2]=='L'&&e[k+3]=='S'&&e[k+4]=='E')
								{fp[i]='0';
								i=i+1;
								k=k+5;
								}
							else
								if(e[k]=='T'&&e[k+1]=='R'&&e[k+2]=='U'&&e[k+3]=='E')
									{fp[i]='1';
									i=i+1;
									k=k+4;
									}
								else
									{fp[i]=e[k];
									i=i+1;
									k=k+1;
									}
for(l=j-1;l>=0;l--)
	{fp[i]=st[l];
	i=i+1;
	}
for(i=0;i<n;i++)
	{val[mod[i]-0]=!val[mod[i]-0];
	evalueaza();
	}
f.close();
g.close();
return 0;
}