Pagini recente » Cod sursa (job #2402495) | Cod sursa (job #678232) | Cod sursa (job #1961325) | Cod sursa (job #2299745) | Cod sursa (job #1209746)
#include <fstream>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
char c[1020], s[1020], m[110], *p;
int i,k,n,j;
int ok[100];
int expresie ();
int termen ();
int factor1 ();
int factor2 ();
int expresie () {
int r=termen ();
while (*p== '|' ) {
p++;
r |= termen();
}
return r;
}
int termen () {
int r=factor1 ();
while (*p=='&') {
p++;
r &= factor1();
}
return r;
}
int factor1 () {
int r=factor2();
if (*p=='!') {
p++;
if (r!=2)
r=(!factor2());
else
r=(!factor1());
}
return r;
}
int factor2 (){
int r;
if (*p=='(') {
p++;
r=expresie();
p++;
}else {
if (*p>='A' && *p<='Z' ) {
r=ok[*p-'A'];
p++;
}else {
r=*p-'0';
p++;
}
}
return r;
}
int main () {
f.get (s,1010);
f.get ();
k=-1;
i = 0;
for (;s[i]!=0;)
{
if (((s[i]>='A'&&s[i]<='Z'))&& !(s[i+1]>='A'&&s[i+1]<='Z'))
{
c[++k]=s[i];
i++;
}
else
if (s[i]=='N')
{
c[++k]='2';
c[++k]='!';
i+=3;
}
else
if (s[i]=='T')
{
c[++k]='1';
i+=4;
}
else
if (s[i]=='F')
{
c[++k]='0';
i+=5;
}
else
if (s[i]=='(')
{
c[++k]='(';
i++;
}
else
if (s[i]==')')
{
c[++k]=')';
i++;
}
else
if (s[i]=='O')
{
c[++k]='|';
i+=2;
}
else
{
if (s[i]=='A')
{
c[++k]='&';
i+=3;
}
else
i++;
}
}
f>>n;
f>>m;
for (j=0;j<n;j++) {
ok[m[j]-'A']=(ok[m[j]-'A']^1);
p=c;
g<<expresie();
}
return 0;
}