Pagini recente » Cod sursa (job #3250487) | Cod sursa (job #717643) | Cod sursa (job #722376) | Cod sursa (job #256578) | Cod sursa (job #980941)
Cod sursa(job #980941)
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stack>
#include<vector>
using namespace std;
stack <char> op;
char ln[1010];
vector <char> polo,exp;
bool var[300];
int priority (char ch) {
if(ch=='!') return 3;
if(ch=='*') return 2;
if(ch=='+') return 1;
}
void baga (char ch) {
if(isalnum(ch)){
polo.push_back(ch);
return ;
}
if(ch=='(') {
op.push(ch);
return ;
}
if(ch==')') {
while(op.top() != '(') {
polo.push_back(op.top());
op.pop();
}
op.pop();
return;
}
while(!op.empty() && op.top()!='(' && (priority(ch) <= priority(op.top()) && !(ch=='!' && op.top()=='!'))) {
polo.push_back(op.top());
op.pop();
}
op.push(ch);
}
bool solve() {
int i;
exp=polo;
for(i=0;i<exp.size();i++) {
if(exp[i]=='+') {
exp[i]=(var[exp[i-1]] || var[exp[i-2]]) + '0';
exp.erase(exp.begin()+i-2,exp.begin()+i);
i-=2;
}
if(exp[i]=='*') {
exp[i]=(var[exp[i-1]] && var[exp[i-2]]) + '0';
exp.erase(exp.begin()+i-2,exp.begin()+i);
i-=2;
}
if(exp[i]=='!') {
exp[i-1]=!var[exp[i-1]]+'0';
exp.erase(exp.begin()+i);
i-=2;
}
}
return exp[0]-'0';
}
int main() {
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
int n,ch,i,cnt=-1;
gets(ln);
n=strlen(ln);
for(i=0;i<n;i++) {
if(ln[i]==' ')
continue;
if( ln[i]=='(' || ln[i]==')' || ( isalpha(ln[i]) && !isalpha(ln[i+1]) ) ) {
baga(ln[i]);
continue;
}
if(ln[i]=='O') {
baga('+');
i++;
continue;
}
if(ln[i]=='T') {
baga('1');
i+=3;
continue;
}
if(ln[i]=='F') {
baga('0');
i+=4;
continue;
}
if(ln[i]=='A') {
baga('*');
i+=2;
continue;
}
if(ln[i]=='N') {
baga('!');
i+=2;
continue;
}
}
while(!op.empty()) {
polo.push_back(op.top());
op.pop();
}
var['1']=1;
scanf("%d\n",&n);
for(i=1;i<=n;i++) {
scanf("%c",&ch);
var[ch]=!var[ch];
printf("%d",solve());
}
printf("\n");
return 0;
}