Pagini recente » Cod sursa (job #2130856) | Cod sursa (job #1820125) | Cod sursa (job #1133698) | Cod sursa (job #2363048) | Cod sursa (job #2529540)
#include <iostream>
#include <fstream>
#include <string>
std::ifstream f("bool.in");
std::ofstream g("bool.out");
const int NMAX = 256;
int i,t,map[NMAX];
char variable;
std::string s;
void parseString(std::string& s){
std::string sol;
for(int i = 0;i < s.size();++i){
if(s[i] == ' ')
continue;
if(s[i] == 'A' && s[i + 1] == 'N' && s[i + 2] == 'D'){
sol += "&";
i += 2;
continue;
}
if(s[i] == 'O' && s[i + 1] == 'R'){
sol += "|";
i += 1;
continue;
}
if(s[i] == 'N' && s[i + 1] == 'O' && s[i + 2] == 'T'){
sol += "1^";
i += 2;
continue;
}
if(s[i] == 'T' && s[i + 1] == 'R' && s[i + 2] == 'U' && s[i + 3] == 'E'){
sol += "1";
i += 3;
continue;
}
if(s[i] == 'F' && s[i + 1] == 'A' && s[i + 2] == 'L' && s[i + 3] == 'E'){
sol += "0";
i += 3;
continue;
}
sol += s[i];
}
s = sol;
}
bool expresieOr();
bool expresieAnd();
bool expresieNot();
bool factor();
bool expresieOr(){
bool r = expresieAnd();
while(s[i] == '|'){
i++;
r = (r | expresieAnd());
}
return r;
}
bool expresieAnd(){
bool r = expresieNot();
while(s[i] == '&'){
i++;
r = (r & expresieNot());
}
return r;
}
bool expresieNot(){
bool r = factor();
while(s[i] == '^'){
i++;
r = (r ^factor());
}
return r;
}
bool factor(){
bool r = 0;
if(s[i] == '('){
i++;
r = expresieOr();
i++;
}else{
if(s[i] == '1'){
i++;
return 1;
}
if(s[i] == '0'){
i++;
return 0;
}
if( s[i] >= 'A' && s[i] <= 'Z'){
r = map[s[i]];
i++;
return r;
}
}
return r;
}
int main(){
std::getline(f,s);
parseString(s);// aduc expresia la o forma mai simpla decat cea initiala
f >> t;
while(t--){
f >> variable;
map[variable] = 1 - map[variable];
i = 0;
g << expresieOr();
}
return 0;
}