Pagini recente » Cod sursa (job #2484778) | Cod sursa (job #1538327) | Cod sursa (job #68899) | Cod sursa (job #2576257) | Cod sursa (job #2643257)
Utilizator |
Adia R. adiaioana |
Data |
19 august 2020 12:33:41 |
Problema |
Bool |
Scor |
30 |
Compilator |
cpp-64 |
Status |
done |
Runda |
prbd1 |
Marime |
2.07 kb |
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("bool.in");
ofstream cout("bool.out");
char *p, str[1010],aux[1010],ch,val[100];
bool ans;
int N;
void cifru();
bool eval();
bool termen();
bool factor();
int main()
{
cin.getline(str,1001);
N=strlen(str);
cifru();
int nr;
cin>>nr;
while(nr--) {
cin>>ch;
val[ch-'A']=!val[ch-'A'];
p=str;
ans=eval();
cout<<ans;
}
cout<<'\n';//:(
return 0;
}
void cifru()
{
int k=0;
aux[0]='\0';
for(int i=0; i<N; ++i)
if(str[i]=='A' && str[i+1]=='N')
{
aux[k++]='&';
aux[k]='\0';
i+=2;
}
else if(str[i]=='O'&&str[i+1]=='R')
{
aux[k++]='|';
aux[k]='\0';
++i;
}
else if(str[i]=='N'&&str[i+1]=='O')
{
aux[k++]='!';
aux[k]='\0';
i+=2;
}
else if(str[i]=='T' && str[i+1]=='R')
{
aux[k++]='1';
aux[k]='\0';
i+=3;
}
else if(str[i]=='F'&&str[i+1]=='A')
{
aux[k++]='0';
aux[k]='\0';
i+=4;
}
else if(str[i]!=' ')
{
aux[k++]=str[i];
aux[k]='\0';
}
str[0]='\0';
strcpy(str,aux);
N=strlen(str);
}
bool factor()
{
bool r=0;
if(*p=='(')
{
p++;
r=eval();
p++;
}
else if(*p=='!')
{
p++;
r=!factor();
}
else if(*p=='1')
{
p++;
r=1;
}
else if(*p=='0')
{
p++;
r=0;
}
else if(isalpha(*p)){
r=val[*p-'A'];
++p;
}
return r;
}
bool termen()
{
bool r=factor();
if(*p=='&')
{
p++;
r=r&termen();
}
return r;
}
bool eval()
{
bool r=termen();
if(*p=='|')
{
p++;
r=r|termen();
}
return r;
}