Pagini recente » Cod sursa (job #2832025) | Cod sursa (job #1507252) | Cod sursa (job #2464904) | Cod sursa (job #1217428) | Cod sursa (job #1835608)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("bool.in");
ofstream out ("bool.out");
char line[1002];
int vp ,v[1002] ,vcalcul[100] ,pointer = 0;
char currentChar;
void chartoinfix(){
int i = 0;
while(line[i] != 0){
if(line[i]=='T' && line[i+1]=='R' && line[i+2]=='U' && line[i+3]=='E'){
v[vp] = 1;
vp++;
i+=4;
} else if(line[i]=='F' && line[i+1]=='A' && line[i+2]=='L' && line[i+3]=='S' && line[i+4]=='E'){
v[vp] = 0;
vp++;
i+=5;
} else if(line[i] == 'N' && line[i+1] == 'O' && line[i+2] == 'T'){
v[vp] = 4;
vp++;
i+=3;
} else if(line[i] == 'A' && line[i+1] == 'N' && line[i+2] == 'D'){
v[vp] = 3;
vp++;
i+=3;
} else if(line[i] == 'O' && line[i+1] == 'R'){
v[vp] = 2;
vp++;
i+=2;
} else if(line[i]>='A' && line[i]<='Z'){
v[vp] = int(line[i]);
vp++;
i++;
} else if (line[i]=='('){
v[vp] = -1;
vp++;
i++;
} else if (line[i]==')'){
v[vp] = -2;
vp++;
i++;
} else
i++;
}
}
void readNextChar() {
currentChar = v[pointer];
pointer++;
}
bool integer(int result = 0) {
if(1 == currentChar || currentChar == 0){
int digit = currentChar;
readNextChar();
return integer(result * 10 + digit);
} else if('A' <= currentChar && currentChar <= 'Z'){
result = vcalcul[currentChar - 'A'];
}
return result;
}
int nu();
int sau(int result = 0, char op = 2);
//Factor = (Suma) sau Integer
int factor(){
int result = 0;
if(currentChar == -1) {
readNextChar();
result = sau();
readNextChar();
} else if(currentChar == 4){
return nu();
}else{
result = integer();
}
return result;
}
int si(int result = 1, char op = 3);
int sau(int result, char op ) {
if(op == 2){
result = result || si();
} if(currentChar == 2){
op = currentChar;
readNextChar();
result = sau(result, op);
}
return result;
}
//Prod = Factor * Factor * Factor * .. * Factor
int si(int result, char op) { //1OP{prod}
if(op == 3)
result = result && factor();
if(currentChar == 3){
op = currentChar;
readNextChar();
result = si(result, op);
}
return result;
}
int nu(){
if(currentChar == 4){
readNextChar();
return !nu();
} else
return sau();
}
int main()
{
int n ,i ,j ,k;
char c;
in.getline(line ,2000, '\n');
chartoinfix();
in>>n;
for(i = 0 ;i < n ;i++){
in>>c;
vcalcul[c - 'A'] = !vcalcul[c - 'A'];
pointer = 0;
readNextChar();
out<<sau();
}
return 0;
}