Pagini recente » Cod sursa (job #150228) | Cod sursa (job #335782) | Cod sursa (job #1312739) | Cod sursa (job #2606620) | Cod sursa (job #2529963)
#include <iostream>
#include <fstream>
std::ifstream in("bool.in");
std::ofstream out("bool.out");
char s[1001],a;
std::string aux,a2;
bool val[155];
int n,k;
int factor(),suma(),expresie();
int factor(){
if(s[k]=='!'){
k++;
return !factor();
}
if(isalpha(s[k])){
int valx=val[s[k++]];
return valx;
}
if(s[k]=='1'){
k++;
return 1;
}
if(s[k]=='0'){
k++;
return 0;
}
k++;
bool val=suma();
k++;
return val;
}
int suma(){
bool val=factor();
while(s[k]=='|'){
k++;
val|=expresie();
}
return val;
}
int expresie(){
bool val=factor();
while(s[k]=='&'){
k++;
val&=factor();
}
return val;
}
int main(){
std::getline(in,aux);
for(int i=0;i<aux.size();i++)
if(aux[i]=='A' && aux[i+1]=='N')
a2+='&',i+=2;
else
if(aux[i]=='O' && aux[i+1]=='R')
a2+='|',i++;
else
if(aux[i]=='N' && aux[i+1]=='O')
a2+='!',i+=2;
else
if(aux[i]=='T' && aux[i+1]=='R' && aux[i+2]=='U' && aux[i+3]=='E')
a2+='1',i+=3;
else
if(aux[i]=='F' && aux[i+1]=='A' && aux[i+2]=='L' && aux[i+3]=='S' && aux[i+4]=='S')
a2+='0',i+=4;
else
if(aux[i]!=' ')
a2+=aux[i];
sprintf(s,"%s",a2.c_str());
in>>n>>std::ws;
for(int i=0;i<155;i++)
val[i]=0;
for(int i=1;i<=n;i++){
in>>a;
k=0;
val[a]=!val[a];
out<<suma();
}
return 0;
}