Pagini recente » Cod sursa (job #889837) | Cod sursa (job #2894267) | Cod sursa (job #1263382) | Cod sursa (job #2327510) | Cod sursa (job #3143794)
#include <fstream>
using namespace std;
ifstream cin ("bool.in");
ofstream cout ("bool.out");
char expresie[1001] , *pozitie = expresie;
bool valoare[26];
bool Expresie(int);
bool Constanta ()
{
if (*pozitie == 'T' && *(pozitie + 1) == 'R')
{ pozitie += 4; return true; }
if (*pozitie == 'F' && *(pozitie + 1) == 'A')
{ pozitie += 5; return false; }
pozitie++; return valoare[*(pozitie - 1) - 'A'];
}
bool Termen ()
{
while (*pozitie == ' ')
pozitie++;
bool termen;
if (*pozitie == '(')
{ pozitie++; termen = Expresie(0); pozitie++; }
else
if (*pozitie == 'N' && *(pozitie + 1) == 'O')
{
pozitie += 3;
while (*pozitie == ' ')
pozitie++;
termen = !Constanta();
}
else
termen = Constanta();
while (*pozitie == ' ')
pozitie++;
return termen;
}
bool Expresie (int adancime)
{
bool rezultat = (!adancime ? Expresie(1) : Termen());
while ((adancime == 1 && *pozitie == 'A' && *(pozitie + 1) == 'N') || (adancime == 0 && *pozitie == 'O' && *(pozitie + 1) == 'R'))
switch(adancime)
{
case 0: { bool termen = Termen(); rezultat = rezultat || termen; }
break;
case 1: { bool termen = Termen(); rezultat = rezultat & termen; }
break;
}
return rezultat;
}
int main ()
{
cin.getline(expresie , 1001);
int teste;
cin >> teste;
for (char litera ; teste ; teste-- , pozitie = expresie)
{ cin >> litera; valoare[litera - 'A'] = !valoare[litera - 'A']; cout << Expresie(0); }
cout.close(); cin.close();
return 0;
}