Pagini recente » Cod sursa (job #1108985) | Cod sursa (job #412064) | Cod sursa (job #2632837) | Cod sursa (job #1259168) | Cod sursa (job #1717567)
#include <cstring>
#include <fstream>
#define isOR(i) a[i] == 'O' && a[i+1] == 'R'
#define isAND(i) a[i] == 'A' && a[i+1] == 'N' && a[i+2] == 'D'
#define isNOT(i) a[i] == 'N' && a[i+1] == 'O' && a[i+2] == 'T'
#define isTRUE(i) a[i] == 'T' && a[i+1] == 'R' && a[i+2] == 'U' && a[i+3] == 'E'
#define isFALSE(i) a[i] == 'F' && a[i+1] == 'A' && a[i+2] == 'L' && a[i+3] == 'S' && a[i+4] == 'E'
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
char a[1005], b[1005];
bool val[40];
int l, n, i, j, k;
bool And();
bool Or();
bool eval();
bool And(){
bool intors = 0, K = 0;
while (a[k] == ' ')
k++;
if (isNOT(k)){
intors = 1;
k += 4;
}
if (a[k] == '('){
k++;
K = eval();
k++;
}
else if (a[k] >= 'A' && a[k] <= 'Z' && !(a[k+1] >= 'A' && a[k+1] <= 'Z'))
K = val[ a[k] - 'A' + 1], k++;
else if (isTRUE(k) || isFALSE(k)){
if (isTRUE(k))
K = 1, k+=4;
else if (isFALSE(k))
K = 0, k+=5;
}
while (a[k] == ' ')k++;
if (intors == 1)
K = !K;
return K;
}
bool Or(){
bool K = And();
while (a[k] == ' ') k++;
while (isAND(k))
k+=4, K &= Or();
return K;
}
bool eval(){
bool K = Or();
while (a[k] == ' ') k++;
while (isOR(k))
k +=3, K |= Or();
return K;
}
int main(){
f.getline(a, sizeof(a));
l = strlen(a);
f >> n; f.get();
f.getline(b, sizeof(b));
//g << b;
for (i = 0; i < n; i++){
k = 0;
val[ b[i] - 'A' + 1 ] = !val[ b[i] - 'A' + 1 ];
g << eval();
}
return 0;
}