Pagini recente » Cod sursa (job #2183792) | Cod sursa (job #489078) | Cod sursa (job #138539) | Cod sursa (job #2036544) | Cod sursa (job #2305587)
#include <iostream>
#include <fstream>
#include <cstring>
#include <cassert>
#define OR 'o'
#define AND 'a'
#define NOT 'n'
#define TRUE 't'
#define FALSE 'f'
using namespace std;
bool var[27];
char s[1003],*p;
char op[]={OR,AND};
int k,n;
char rez[101];
void creare(char s[],char S[])
{
int i=0;
while(S[i])
{
if(S[i]==' ')
{
i++;continue;
}
if(strchr("()",S[i]))
s[k++]=S[i++];
else
if(isalpha(S[i+1]))
switch(S[i])
{
case 'A':s[k++]=AND,i+=3;break;
case 'O':s[k++]=OR,i+=2;break;
case 'N':s[k++]=NOT,i+=3;break;
case 'T':s[k++]=TRUE,i+=4;break;
case 'F':s[k++]=FALSE,i+=5;
}
else
s[k++]=S[i++];
}
s[k]=NULL;
}
bool si();
bool negare();
bool expr()
{
bool r=si();
while(*p==OR)
{
p++;
bool s=si();
r= r || s;
}
return r;
}
bool si()
{
bool r=negare();
while(*p==AND)
{
p++;
bool s=negare();
r=(r && s);
}
return r;
}
bool negare()
{
bool r;
if(*p=='(')
p++,r=expr(),p++;
else
if(*p==NOT)
p++,r=!negare();
else
if(*p==TRUE || *p==FALSE)
r=(*p==TRUE),p++;
else
r=var[*p-'A'],p++;
return r;
}
int main()
{
char S[1003];
ifstream f("bool.in");
ofstream g("bool.out");
f.getline(S,1002);
creare(s,S);
f>>n>>rez;
f.close();
for(int i=0;i<n;i++)
{
var[rez[i]-'A']=!var[rez[i]-'A'];
p=s;
g<<expr();
}
g.close();
return 0;
}