Pagini recente » Cod sursa (job #1143524) | Cod sursa (job #3040542) | Cod sursa (job #597937) | Cod sursa (job #1509070) | Cod sursa (job #603536)
Cod sursa(job #603536)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
char a[1000];
int n;
bool v[110];
char c[10];
void cuvint(int& x)
{
int i;
for(;a[x] == ' ';++x);
for(i=x;a[i] != ' ' && a[i] != '\0' && a[i] != ')';++i)
c[i-x] = a[i];
c[i-x] = '\0';
x = i;
}
bool eq(char c1[])
{
for(int i=0;i<(int)strlen(c1);++i)
if(c1[i] != c[i]) return false;
return true;
}
bool eval(int& x);
bool eval1(int& x);
bool factor(int& x)
{
for(;a[x] == ' ';++x);
if(a[x] == '(')
{
++x;
bool p = eval(x);
++x;
return p;
}
else
{
cuvint(x);
if(eq("TRUE"))
return true;
if(eq("FALSE"))
return false;
if(eq("NOT"))
return !factor(++x);
return v[c[0]];
}
return false;
}
bool eval1(int& x)
{
bool f1=factor(x);
cuvint(x);
if(eq("AND"))
return f1 && factor(x);
return f1;
}
bool eval(int& x)
{
bool f1 = eval1(x);
cuvint(x);
if(eq("OR"))
return f1 || eval1(x);
return f1;
}
int main()
{
ifstream in("bool.in");
in >> noskipws;
for(int i=0;in && !in.eof() && (in >> a[i]) && a[i]!= '\n';++i);
a[strlen(a)-1] = '\0';
ofstream out("bool.out");
in >>skipws >> n;
char c;
for(;n;--n)
{
in >> c;
v[c] = !v[c];
int i=0;
out << eval(i);
}
return 0;
}