Pagini recente » Cod sursa (job #343391) | Cod sursa (job #2308549) | Cod sursa (job #2725932) | Cod sursa (job #1406474) | Cod sursa (job #2058876)
#include<fstream>
#include<string>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int m, n, k, nr, i, trans[100], b[1001], v[100], sol;
char a[1001], c, stiva[1001];
int evaluare()
{
trans['A']=-1;
trans['B']=-2;
trans[79]=-3;
for(i=0;a[i]!=0;i++)
m++;
k=0;
stiva[k]='(';
a[++m]=')';
for(i=0;i<m;i++)
{
while(a[i]==' ')
i++;
if(a[i]=='(')
stiva[++k]=a[i];
if(a[i]==')')
{
while(stiva[k]!='(')
b[++nr]=trans[stiva[k--]];
k--;
}
if(a[i]=='O' && a[i+1]=='R')
{
while(stiva[k]=='A' || stiva[k]=='N' || stiva[k]=='O')
b[++nr]=trans[stiva[k--]];
stiva[++k]=a[i];
i++;
}
if(a[i]=='A' && a[i+1]=='N' && a[i+2]=='D')
{
while(stiva[k]=='A' || stiva[k]=='N' || stiva[k]=='O')
b[++nr]=trans[stiva[k--]];
stiva[++k]=a[i];
i+=2;
}
if(a[i]=='N' && a[i+1]=='O' && a[i+2]=='T')
{
while(stiva[k]=='N')
b[++nr]=trans[stiva[k--]];
stiva[++k]=a[i];
i+=2;
}
if(a[i]=='T' && a[i+1]=='R')
{
b[++nr]=1;
i+=3;
}
else if(a[i]=='F' && a[i+1]=='A')
{
b[++nr]=0;
i+=4;
}
if(a[i]>='A' && a[i]<='Z' && (a[i+1]<'A' || a[i+1]>'Z'))
{
int numar=a[i]-'A';
b[++nr]=v[numar];
}
}
k=0;
for(i=1;i<=nr;i++)
{
if(b[i]>=0)
trans[++k]=b[i];
else
{
if(b[i]==-1)
{
if(trans[k-1]==0 || trans[k]==0)
sol=0;
else sol=1;
//sol=trans[k-1]+trans[k];
trans[k-1]=sol;
}
if(b[i]==-2)
{
if(sol==0)
sol=1;
else sol=0;
//sol=trans[k-1]*trans[k];
trans[k-1]=sol;
}
if(b[i]==-3)
{
if(trans[k]==1 || trans[k-1]==1)
sol=1;
else sol=0;
//sol=trans[k-1]/trans[k];
trans[k-1]=sol;
}
k--;
}
}
g<<sol;
return 0;
}
int main()
{
f.get(a,1003);
f>>n;
for(;n;n--)
{
f>>c;
int x=c-'A';
if(v[x]==1)
v[x]=0;
else v[x]=1;
evaluare();
}
return 0;
}