Pagini recente » Cod sursa (job #357990) | Cod sursa (job #3134092) | Cod sursa (job #2583111) | Cod sursa (job #412101) | Cod sursa (job #2271654)
/// de continuat
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
char s[3010],z[3010],aux[3010],modif[200];
int expresie(), termen(), factor(), i,k,x,v[1000],N,j;
ifstream fin ("bool.in");
ofstream fout("bool.out");
void rescriere(){
for(i=0;i<strlen(s);i++){
if(s[i]>=65 && s[i]<=90){
if(s[i]=='A' && s[i+1]=='N'){
z[k++]='&';
i+=2;
}
else
if(s[i]=='O' && s[i+1]=='R'){
z[k++]='|';
i++;
}
else
if(s[i]=='F' && s[i+1]=='A'){
z[k++]='0';
i+=4;
}
else
if(s[i]=='T' && s[i+1]=='R'){
z[k++]='1';
i+=3;
}
else
if(s[i]=='N' && s[i+1]=='O'){
z[k++]='!';
i+=2;
}
else
z[k++]=s[i];
}
else
if(s[i]=='(' || s[i]==')')
z[k++]=s[i];
}
}
int expresie(){
int r;
r = termen();
while (z[i] == '|') {
i++;
r |= termen();
}
return r;
}
int termen(){
int r;
r = factor();
while (z[i] == '&') {
i++;
r &= factor();
}
return r;
}
int factor(){
int r;
if(z[i]=='!'){
i++;
return !factor();
}
else{
if(z[i]=='('){
i++;
r=expresie();
i++;
}
else{
r=v[z[i]];
i++;
}
return r;
}
}
int main () {
fin.get(s,3000);
rescriere();
fin>>N;
fin>>modif;
for(j=0;j<N;j++){
v[modif[i]]=!v[modif[i]];
i=1;
fout<<expresie();
}
return 0;
}