Pagini recente » Cod sursa (job #2164103) | Cod sursa (job #2165610) | Cod sursa (job #2165530) | Cod sursa (job #2878816) | Cod sursa (job #1076493)
#include <iostream>
#include <string.h>
#include <fstream>
#include <cstdio>
const static int NMAX = 1001;
using namespace std;
int index;
char expression[NMAX];
bool litere[100];
bool termen();
bool factor();
bool eval()
{
bool rezultat = termen();
while (expression[index] == 'O')
{
char op[4] = { 0 , 0 , 0 , 0};
for (int i = 0; expression[index] != ' '; index++,i++)
op[i] = expression[index];
++index;
rezultat |= termen();
}
return rezultat;
}
bool termen()
{
bool rezultat = factor();
while (expression[index] == 'A')
{
char op[4] = { 0 , 0 , 0 , 0};
for (int i = 0; expression[index] != ' '; index++,i++)
op[i] = expression[index];
++index;
rezultat &= factor();
}
return rezultat;
}
bool factor()
{
bool rezultat = 0;
if (expression[index] == '(')
{
index++;
rezultat = eval();
index++;
}
else
{
// verificam sa nu fie un NOT in fata
char op[4] = { 0 , 0 , 0 , 0};
for(int i = 0; expression[index] >= 'A' && expression[index] <= 'Z'; index++ , i++)
{
op[i] = expression[index];
}
if (strcmp(op,"NOT") == 0)
{
index++;
rezultat = !factor();
}
else if (strcmp(op,"TRUE") == 0)
{
index++;
rezultat = true;
}
else if (strcmp(op,"FALSE") == 0)
{
index++;
rezultat = false;
}
else
{
char litera = op[0];
index++;
rezultat = litere[litera - 'A'];
}
}
return rezultat;
}
int main()
{
FILE * input = fopen("bool.in","r");
ofstream output("bool.out");
fgets(expression,sizeof(char) * NMAX,input);
expression[strlen(expression) - 1] = 0;
int N;
fscanf(input,"%d\n",&N);
for (int i = 0; i < N ; i++)
{
char litera = fgetc(input);
litere[litera - 'A'] = !litere[litera - 'A'];
index = 0;
output << eval();
}
return 0;
}