Pagini recente » Cod sursa (job #1140179) | Cod sursa (job #726158) | Cod sursa (job #437085) | Cod sursa (job #3207532) | Cod sursa (job #1572892)
#include <iostream>
#include <fstream>
using namespace std;
const int N = 1001;
char s[N], aux[N], variabile[101];
bool vr[26];
int p, t;
bool expresie();
bool termen();
bool factor();
void transforma(char *aux, char *s)
{
int i, n=0;
for(i = 0; aux[i]; i++)
if(aux[i] == 'A' && aux[i+1]=='N')
{
s[n++] = '&';
i+=2;
}
else if (aux[i] == 'F' && aux[i+1] == 'A')
{
s[n++]='0';
i+=4;
}
else if (aux[i] == 'N' && aux[i+1] == 'O')
{
s[n++]='!';
i+=2;
}
else if (aux[i] == 'O' && aux[i+1] == 'R')
{
s[n++]='|';
i++;
}
else if (aux[i] == 'T' && aux[i+1] == 'R')
{
s[n++]='1';
i+=3;
}
else if (aux[i] != ' ' && aux[i] != '/')
s[n++]=aux[i];
s[n]=0;
}
bool expresie()
{
bool rez = termen();
while(s[p] == '|')
{
p++;
rez = (rez || termen());
}
return rez;
}
bool termen()
{
bool rf = factor();
while(s[p] == '&')
{
p++;
rf = (rf && factor());
}
return rf;
}
bool factor()
{
bool val, semn = true;
while (s[p] == '!')
{
semn = (!semn);
p++;
}
if (s[p] == '(')
{
p++;
val=expresie();
p++;
if (!semn)
val = (!val);
return val;
}
if (s[p] == '0')
val = false;
else if (s[p] == '1')
val = true;
else
val = vr[s[p] - 'A'];
if (!semn)
return (!val);
return val;
}
int main()
{
ifstream in("bool.in");
ofstream out("bool.out");
in.getline(aux, N);
transforma(aux, s);
//out<<s;
in >> t >> ws;
in.getline(variabile, t + 1);
for (int i = 0; i < t; i++)
{
vr[variabile[i] - 'A'] = (!vr[variabile[i] - 'A']);
out << expresie();
}
return 0;
}