Pagini recente » Cod sursa (job #1919401) | Cod sursa (job #82551) | Cod sursa (job #725749) | Cod sursa (job #1373690) | Cod sursa (job #1501174)
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;
bool var[30];
char s[1006];
void app(bool& val, bool& neg, char op, bool newval)
{
if(neg){newval = !newval; neg = false;}
switch(op)
{
case 'o':
val = val||newval;
break;
case 'a':
val = val&&newval;
break;
}
}
bool evaluate(char str[], int& pos)
{
bool val = false;
bool neg = false;
char op = 'o';
while(true)
switch(str[pos])
{
case ' ':
pos++;
break;
case 'T':
if(str[pos+1]=='R'){pos+=4; app(val,neg,op,true);}
else{pos++; app(val,neg,op,var['T'-'A']);}
break;
case 'F':
if(str[pos+1]=='A'){pos+=5; app(val,neg,op,false);}
else{pos++; app(val,neg,op,var['F'-'A']);}
break;
case 'N':
if(str[pos+1]=='O'){pos+=3; neg=!neg;}
else{pos++; app(val,neg,op,var['N'-'A']);}
break;
case 'A':
if(str[pos+1]=='N'){pos+=3; op='a';}
else{pos++; app(val,neg,op,var['A'-'A']);}
break;
case 'O':
if(str[pos+1]=='R'){pos+=2; op='o';}
else{pos++; app(val,neg,op,var['O'-'A']);}
break;
case '(':
pos++;
app(val,neg,op,evaluate(str,pos));
break;
case ')':
pos++;
return val;
break;
default:
app(val,neg,op,var[str[pos]-'A']);
pos++;
break;
}
}
int main()
{
ifstream fin ("bool.in");
ofstream fout("bool.out");
s[0]='(';
char *p=s+1;
fin.getline(p,1000);
s[strlen(s)+1]=s[strlen(s)];
s[strlen(s)]=')';
int n;
char x;
fin>>n;
for(int i=0;i<n;i++)
{
fin>>x;
var[x-'A']=!var[x-'A'];
int pos = 0;
fout<<(int)evaluate(s,pos);
}
fout<<endl;
return 0;
}