Pagini recente » Cod sursa (job #81289) | Cod sursa (job #2254964) | Cod sursa (job #164849) | Cod sursa (job #1066046) | Cod sursa (job #2836769)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
char s[1001];
char aux[1001];
int p=0;
bool EvalTermen();
bool EvalFactor();
bool EvalExpresie()
{
bool vala=EvalTermen();
while(s[p]=='|')
{
p++;
bool valb=EvalTermen();
vala|=valb;
}
return vala;
}
bool EvalTermen()
{
bool vala=EvalFactor();
while(s[p]=='&')
{
p++;
bool valb=EvalFactor();
vala&=valb;
}
return vala;
}
bool EvalFactor()
{
bool semn=0;
while(s[p]=='!')
{
semn=!semn;
p++;
}
if(s[p]=='(')
{
p++;
bool val=EvalExpresie();
p++;
if(semn==1)
return !val;
else
return val;
}
bool val=0;
if(s[p]=='0')
val=0;
if(s[p]=='1')
val=1;
p++;
if(semn==1)
return !val;
else
return val;
}
void modificare(char s1[],char s2[])
{
char *pp=strstr(s,s1);
while(pp!=NULL)
{
strcpy(aux,pp+strlen(s1));
strcpy(pp,s2);
strcat(s,aux);
pp=strstr(pp+strlen(s2),s1);
}
}
void modificaretotala()
{
modificare("AND","&");
modificare("OR","|");
modificare("NOT","!");
modificare("FALSE","0");
modificare("TRUE","1");
}
int main()
{
in.getline(s,1001);
int lungime=strlen(s);
int i=0;
while(i<lungime)
{
if(s[i]==' ')
{
for(int j=i+1;j<=lungime;j++)
s[j-1]=s[j];
lungime--;
}
else
i++;
}
modificaretotala();
int modif;
in>>modif;
int f[100];
for(int i=0;i<strlen(s);i++)
{
if(s[i]>='A' && s[i]<='Z')
{
f[s[i]-'A']=i;
s[i]='0';
}
//cout<<s[i];
}
for(int i=1;i<=modif;i++)
{
char ch;
in>>ch;
int indice=ch-'A';
if(s[f[indice]]=='0')
s[f[indice]]='1';
else
s[f[indice]]='0';
modificaretotala();
out<<EvalExpresie();
p=0;
}
return 0;
}