Pagini recente » Cod sursa (job #2911189) | Cod sursa (job #1168916) | Cod sursa (job #884930) | Cod sursa (job #677745) | Cod sursa (job #2699413)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("bool.in");
ofstream g ("bool.out");
///or 10 and 100 ( 1000
char s[10005];
int nr[30];
stack <int> op;
stack <int> val;
int m,n;
void rezolvare()
{
if(!op.empty() && op.top()==1000)
{
op.pop();
return;
}
while(!op.empty() && op.top()!=1000)
{
int a=val.top();
val.pop();
int b=val.top();
val.pop();
int x=op.top();
op.pop();
if(x==10)
{
if(a==1 || b==1)
val.push(1);
else
val.push(0);
}
if(x==100)
{
if(a==1 && b==1)
val.push(1);
else
val.push(0);
}
}
if(!op.empty() && op.top()==1000)
op.pop();
}
int evaluare()
{
for(int i=0; i<n; ++i)
{
if(s[i]=='T' && s[i+1]=='R' && s[i+2]=='U' && s[i+3]=='E')
{
val.push(1);
i+=3;
}
else if(s[i]=='F' && s[i+1]=='A' && s[i+2]=='L' && s[i+3]=='S' && s[i+4]=='E')
{
val.push(0);
i+=4;
}
else if(s[i]=='N' && s[i+1]=='O' && s[i+2]=='T')
{
val.push(1-nr[s[i+4]-'A']);
i+=4;
}
else if(s[i]=='O' && s[i+1]=='R')
{
op.push(10);
i+=2;
}
else if(s[i]=='A' && s[i+1]=='N' && s[i+2]=='D')
{
op.push(100);
i+=3;
}
else if(s[i]=='(')
op.push(1000);
else if(s[i]>='A' && s[i]<='Z')
val.push(nr[s[i]-'A']);
else if(s[i]==')')
rezolvare();
}
rezolvare();
return val.top();
}
int main()
{
f.getline(s,1005);
n=strlen(s);
f>>m;
for(int i=1; i<=m; ++i)
{
while(!op.empty())
op.pop();
while(!val.empty())
val.pop();
char c;
f>>c;
nr[c-'A']=1-nr[c-'A'];
g<<evaluare();
}
return 0;
}