Pagini recente » Cod sursa (job #1219524) | Cod sursa (job #597532) | Cod sursa (job #1383997) | Cod sursa (job #1595307) | Cod sursa (job #2700955)
#include <fstream>
#include <cstring>
#include <iostream>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
const int N =102;
const int LE = 1002;
const int NL = 26;
char s[LE];
char op[N];
bool f[NL];
int p;
void transformm()
{
int nr=0, i=0;
while(s[i] != '\0')
{
if(s[i]== 'T' && s[i+1]=='R')
{
s[nr++]='1';
i+=4;
}else
if(s[i]== 'F' && s[i+1]=='A')
{
s[nr++]='0';
i+=5;
}else
if(s[i]== 'N' && s[i+1]=='O')
{
s[nr++]='!';
i+=3;
}else
if(s[i]== 'A' && s[i+1]=='N')
{
s[nr++]='&';
i+=3;
}else
if(s[i]== 'O' && s[i+1]=='R')
{
s[nr++]='|';
i+=2;
}else
if(s[i]== '(')
{
s[nr++]='(';
i+=1;
}else
if(s[i]!=' ')
{
s[nr++]=s[i++];
}else
{
i++;
}
}
s[nr]='\0';
}
bool expresie();
bool termen();
bool factor();
bool expresie()
{
bool sau = termen();
while(s[p]=='|')
{
p++;//trece peste |
sau = (sau || termen());
}
return sau;
}
bool termen()
{
bool andd = factor();
while(s[p]=='&')
{
p++;//trece peste &
andd = (andd && factor());
}
return andd;
}
bool factor()
{
bool nott =false, v;
while(s[p]=='!')
{
p++;//trece peste !
nott=(!nott);
}
if(s[p]=='(')
{
p++;//trece peste (
v=expresie();
p++;//trece peste )
if(nott)
{
return !v;
}
return v;
}
if(s[p]=='0')
{
p++;
v = false;
}
else if(s[p]=='1')
{
p++;
v = true;
}
else
{
v=f[s[p++]-'A'];
}
if(nott)
{
return !v;
}
return v;
}
int main()
{
fin.getline(s, LE);
transformm();
cout<<s;
int n;
fin>>n>>op;
for(int i=0; i<n; i++)
{
f[op[i] - 'A'] = (!f[op[i] - 'A']);
p=0;
fout<<expresie();
}
return 0;
}