Pagini recente » Cod sursa (job #411214) | Cod sursa (job #1687978) | Cod sursa (job #270007) | Cod sursa (job #261045) | Cod sursa (job #398766)
Cod sursa(job #398766)
#include<fstream>
#include<cstring>
using namespace std;
ifstream f1 ("bool.in");
ofstream f2 ("bool.out");
char cuv[1010],v[1010];
int logic[30],pozt;
int fact();
int term();
int exp()
{
int rez=fact();
while (v[pozt]=='|') {pozt++; rez|=fact();}
return rez;
}
int fact()
{
int rez=term();
while (v[pozt]=='&') {pozt++; rez&=term();}
return rez;
}
int term()
{
int rez=0;
if (v[pozt]=='(') {pozt++; rez=exp(); pozt++;}
if (v[pozt]=='!') {pozt++; rez=!term();}
else if (v[pozt]=='1') {pozt++; rez=1;}
else if (v[pozt]=='0') {pozt++; rez=0;}
else if (v[pozt]>='A'&&v[pozt]<='Z') {rez=logic[v[pozt]-'A']; pozt++;}
return rez;
}
int main()
{
int n,nr=0,i,poz=0,j;
char c;
while (f1.get(c) && int(c)!=10) cuv[++nr]=c;
for (i=1; i<=nr; i++)
{
j=i+1;
if (cuv[i]=='N' && cuv[j]=='O') {v[++poz]='!'; i+=2;}
else if (cuv[i]=='A' && cuv[j]=='N' ) {v[++poz]='&'; i+=2;}
else if (cuv[i]=='O' && cuv[j]=='R') {v[++poz]='|'; i++;}
else if (cuv[i]=='F' && cuv[j]=='A') {v[++poz]='0'; i+=4;}
else if (cuv[i]=='T' && cuv[j]=='R') {v[++poz]='1'; i+=3;}
else if (cuv[i]==' ') continue;
else v[++poz]=cuv[i];
}
f1>>n;
for (i=1; i<=n; i++)
{
f1>>c;
logic[c-'A']^=1;
pozt=1;
f2<<exp();
}
return 0;
}