Pagini recente » Cod sursa (job #461094) | Cod sursa (job #737093) | Cod sursa (job #2267073) | Cod sursa (job #2523241) | Cod sursa (job #2305539)
#include <iostream>
#include <fstream>
#include <cstring>
#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 eval(bool a,char o,bool b)
{
switch(o)
{
case AND: return a&&b;
case OR: return a||b;
}
return true;
}
bool expr(int lev=0)
{
bool x;
if(lev==2)
if(*p==NOT)
p++,x=!expr(lev);
else
x=expr(lev+1);
else
if(lev==3)
{
if(*p=='(')
p++,x=expr(0),p++;
else
if(*p==TRUE)
x=true;
else
if(*p==FALSE)
x=false;
else
x=var[*p-'A'],p++;
}
else
for(x=expr(lev+1);op[lev]==*p && *p!=NULL;)
{
char s=*p++;
x=eval(x,s,expr(lev+1));
}
return x;
}
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;
}