Pagini recente » Cod sursa (job #8702) | Cod sursa (job #2198447) | Cod sursa (job #2507693) | Cod sursa (job #1394925) | Cod sursa (job #3244115)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
char sir[1002],s[1002],ch,stiva_semne[1002];
int b,a,i,j,k,n,q;
bool fr[28],nr,stiva_nr[1001];
int f (bool a,bool b,char ch)
{
if (ch=='&')
return a&&b;
else
return a||b;
}
int val (int ch)
{
if (ch=='&')
return 1;
if (ch=='|')
return 2;
return 0;
}
bool expresie ()
{
a=b=0;
for (i=1; i<=n; i++)
{
if (sir[i]=='(')
stiva_semne[++b]='(';
else if (sir[i]==')')
{
while (stiva_semne[b]!='(')
{
stiva_nr[a-1]=f (stiva_nr[a-1],stiva_nr[a],stiva_semne[b]);
a--;
b--;
}
b--;
while (stiva_semne[b]=='!')
{
stiva_nr[a]=1-stiva_nr[a];
b--;
}
}
else if (sir[i]>='A'&&sir[i]<='Z')
{
nr=fr[sir[i]-'A'+1];
while (stiva_semne[b]=='!')
{
nr=1-nr;
b--;
}
stiva_nr[++a]=nr;
}
else if (sir[i]=='0'||sir[i]=='1')
{
nr=sir[i]-'0';
while (stiva_semne[b]=='!')
{
nr=1-nr;
b--;
}
stiva_nr[++a]=nr;
}
else if (sir[i]=='!')
stiva_semne[++b]='!';
else
{
while (val (stiva_semne[b])>=val (sir[i]))
{
stiva_nr[a-1]=f (stiva_nr[a-1],stiva_nr[a],stiva_semne[b]);
a--;
b--;
}
stiva_semne[++b]=sir[i];
}
}
while (b>0)
{
stiva_nr[a-1]=f (stiva_nr[a-1],stiva_nr[a],stiva_semne[b]);
b--;
a--;
}
return stiva_nr[1];
}
int main ()
{
fin.getline (s,1002);
fin>>q;
n=strlen (s);
for (i=0; i<n; i++)
{
if (s[i]=='A'&&s[i+1]=='N')
{
sir[++k]='&';
i+=2;
}
else if (s[i]=='O'&&s[i+1]=='R')
{
sir[++k]='|';
i++;
}
else if (s[i]=='N'&&s[i+1]=='O')
{
sir[++k]='!';
i+=2;
}
else if (s[i]=='T'&&s[i+1]=='R')
{
sir[++k]='1';
i+=3;
}
else if (s[i]=='F'&&s[i+1]=='A')
{
sir[++k]='0';
i+=4;
}
else if (s[i]=='('||s[i]==')')
sir[++k]=s[i];
else if (s[i]>='A'&&s[i]<='Z')
sir[++k]=s[i];
}
n=k;
for (j=1; j<=q; j++)
{
fin>>ch;
fr[ch-'A'+1]=1-fr[ch-'A'+1];
fout<<expresie ();
}
return 0;
}