Pagini recente » Cod sursa (job #222059) | Cod sursa (job #1007030) | Cod sursa (job #391669) | Cod sursa (job #793358) | Cod sursa (job #2642906)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("bool.in");
ofstream fout ("bool.out");
char x;
char s[1002];
int o[27];
int i, lg;
int EvaluareExpresie();
int EvaluareTermen();
int EvaluareFactor();
int main()
{
int n, y;
fin.get(x);
while(x!='\n')
{
if(x!=' ')
{
lg++;
s[lg-1]=x;
}
fin.get(x);
}
s[lg]='\0';
//cout<<s<<"\n";
fin>>n; fin.get();
for(y=1; y<=n; y++)
{
fin>>x;
o[x-'A'+1]=(o[x-'A'+1]==1?0:1);
i=0;
fout<<EvaluareExpresie();
}
}
int EvaluareExpresie()
{
int x=EvaluareTermen();
bool ok;
//cout<<"x= "<<x<<"\ni= "<<i<<"\n\n";
ok=1;
if(s[i]!='O' || s[i+1]!='R')
{
ok=0;
}
while(i<lg && ok)
{
x=(x || EvaluareTermen() );
//cout<<"x= "<<x<<"\n";
if(s[i]!='O' || s[i+1]!='R')
{
ok=0;
}
else i=i+2;
}
if(s[i]==')')
{
i++; //sar peste paranteza
}
return x;
}
int EvaluareTermen()
{
int x=EvaluareFactor();
bool ok;
ok=1;
if(s[i]!='A' || s[i+1]!='N' || s[i+2]!='D')
{
ok=0;
}
while(i<lg && ok )
{
x=(x && EvaluareFactor() );
if(s[i]!='A' || s[i+1]!='N' || s[i+2]!='D')
{
ok=0;
}
else i=i+3;
}
return x;
}
int EvaluareFactor()
{
bool neg=0;
int aux, ver;
while(s[i]=='N' && s[i+1]=='O' && s[i+2]=='T')
{
i=i+3; //sar peste "NOT"
neg=(neg==1?0:1);
}
if(s[i]=='(')
{
i++; //sar peste paranteza
aux=EvaluareExpresie();
if(neg==0)return aux;
//else
return (aux==1?0:1);
}
//else
//cout<<"i= "<<i+1<<"\n";
//verific daca este "TRUE" sau "FALSE"
ver=o[ s[i]-'A'+1 ]; //in cazul in care este doar o variabila
if(s[i]=='T' && s[i+1]=='R' && s[i+2]=='U' && s[i+3]=='E')
{
i=i+4;
ver=1;
}
else if(s[i]=='F' && s[i+1]=='A' && s[i+2] == 'L' && s[i+3]=='S' && s[i+4]=='E')
{
i=i+5;
ver=0;
}
else i++; //sar peste caracter
if(neg==0)
{
//cout<<ver<<"\n";
return ver;
}
//else
// cout<<(ver==1?0:1)<<"\n";
return (ver==1?0:1);
}