Pagini recente » Cod sursa (job #1228314) | Cod sursa (job #1539946) | Cod sursa (job #1750238) | Cod sursa (job #2704089) | Cod sursa (job #411430)
Cod sursa(job #411430)
#include<fstream>
using namespace std;
//const char pre[] = {"AND", "OR", "NOT", "TRUE", "FALSE"};
char str[1001], *var;
bool alpha[30];
int n, len, i;
bool scan()
{
bool not=false;
bool a=false, b=false;
int op=0;
while (i<len && str[i]!=')')
{
if (str[i] == ' ') i++;
not = false;
if (str[i] == 'N' && str[i+1] == 'O') {
not = true; i+=4;
}
if (str[i] == '(') {++i; a = scan();}
else if (str[i] == 'T' && str[i+1] == 'R') {
a = true; i+=4;
}
else if (str[i] == 'F' && str[i+1] == 'A') {
a = false; i+=5;
}
else a = alpha[str[i]-'A'];
if (not) a = !a;
i++;
if (str[i] == ' ') i++;
if (str[i] == ')') break;
if (str[i] == 'A' && str[i+1] == 'N') {
op = 1; i+=4; }
else if (str[i] == 'O' && str[i+1] == 'R') {
op = 2; i+=3; }
not = false;
if (str[i] == 'N' && str[i+1] == 'O') {
not = true; i+=4;
}
if (str[i] == '(') {++i; b = scan();}
else if (str[i] == 'T' && str[i+1] == 'R') {
b = true; i+=4;}
else if (str[i] == 'F' && str[i+1] == 'A') {
b = false; i+=5; }
else b = alpha[str[i]-'A'];
if (not) b = !b;
i++; if (str[i] == ' ') i++;
}
if (op == 1) return a&b;
else return a|b;
}
int main()
{
char temp[10];
ifstream in ("bool.in");
ofstream out ("bool.out");
in.getline(str, 1000, '\n');
in.getline(temp, 10, '\n');
n = atoi(temp);
var = new char[n+1];
len = strlen(str);
in.getline(var, n+1, '\n');
for (int ii = 0; ii < n; ii++) {
alpha[var[ii] - 'A'] = !alpha[var[ii] - 'A'];
i = 0; out<<scan();
}
out.close();
in.close();
delete[] var;
return 0;
}