Nu aveti permisiuni pentru a descarca fisierul grader_test71.ok
Cod sursa(job #2643257)
| Utilizator | 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;
}
