Pagini recente » Istoria paginii utilizator/veverita927 | Cod sursa (job #962969) | Cod sursa (job #1360445) | Cod sursa (job #1992069) | Cod sursa (job #1335833)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
const int MAXN = 1000;
char s[MAXN+1], *p;
int N;
bool state[MAXN+1];
bool evalueaza();
bool termen();
bool factor();
void readData()
{
in.getline(s,MAXN);
in>>N;
for(int i = 0; i <= 27; i++)
state[ i ] = false;
for(int i = 1; i <= N; i++)
{
char x;
in>>x;
p = s;
state[ x - 'A' ] = !state[ x - 'A' ];
out<<evalueaza();
}
}
bool evalueaza()
{
bool r = termen();
if( *p == ' ' )
p++;
while( *p == 'O' && *(p + 1) == 'R' )
{
p+=2;
bool f = factor();
r = r || f;
}
return r;
}
bool termen()
{
bool r = factor();
if( *p == ' ' )
p++;
while( *p == 'A' && *(p + 1) == 'N' )
{
p+=3;
bool t = termen();
r = r && t;
}
return r;
}
bool factor()
{
bool r;
if( *p == ' ' )
{
p++;
}
if( *p == '(' )
{
p++;
r = evalueaza();
p++;
}
else
if( *p == 'N' && *( p + 1 ) == 'O' )
{
p +=3;
r = !evalueaza();
}
else
{
if( *p == 'T' && *(p + 1) == 'R' )
{
r = true;
p += 4;
}
else
if( *p == 'F' && *(p + 1) == 'A' )
{
r = false;
p += 5;
}
else
{
r = state[ *p - 'A' ];
p++;
}
}
return r;
}
int main()
{
readData();
//evalueaza();
return 0;
}