Pagini recente » Diferente pentru implica-te/arhiva-educationala intre reviziile 96 si 95 | Cod sursa (job #1514494) | Cod sursa (job #2856572) | Cod sursa (job #3124643) | Cod sursa (job #2690176)
#include <bits/stdc++.h>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
char s[1006], * p;
bool v[135];
bool termen();
bool or1();
bool and1();
bool or1()
{
while(*p == ' ')
p++;
bool rez = and1();
while(*p == 'O' && *(p + 1) == 'R')
p += 3, rez = rez | and1();
return rez;
}
bool and1()
{
while(*p == ' ')
p++;
bool rez = termen();
while(*p == 'A' && *(p + 1) == 'N' && *(p + 2) == 'D')
p += 4, rez = rez & termen();
return rez;
}
bool termen()
{
bool rez = 0;
if(*p == 'N' && *(p + 1) == 'O' && *(p + 2) == 'T')
p += 4, rez = !(or1());
else
{
if(*p == '(' || *p == ' ')
p++, rez = or1(), p += 2;
else
{
if(isalpha(*p))
{
if(!isalpha(*(p+1)))
{
rez = v[*p];
p += 2;
}
else if(*p == 'T')
rez = 1, p += 5;
else
rez = 0, p += 6;
}
}
}
return rez;
}
int main()
{
f.getline(s, 1005);
int n;
f >> n;
for(int i = 1; i <= n; i++)
{
char c;
f >> c;
v[c] = !v[c];
p = s;
g << or1();
}
return 0;
}