Pagini recente » Cod sursa (job #2760315) | Cod sursa (job #1025328) | Cod sursa (job #2287609) | Cod sursa (job #1619854) | Cod sursa (job #135350)
Cod sursa(job #135350)
#include <stdio.h>
#include <string.h>
using namespace std;
char s[1100],a[110],l[30];
int n;
void citire()
{
freopen("bool.in","r",stdin);
fgets(s,1100,stdin);
scanf("%d\n", &n);
fgets(a,110,stdin);
if (a[strlen(a)-1]=='\n')
a[strlen(a)-1]=0;
if (s[strlen(s)-1]=='\n')
s[strlen(s)-1]=0;
fclose(stdin);
}
int deparantezare(char s[], int &inc, int &sf)
{
int p=1, o=0, l=strlen(s)-1;
if (s[inc]=='(' && s[l]==')')
{
for (int i=inc+1; i<l; i++)
{
if (s[i]=='(')
++p;
else
if (s[i]==')')
--p;
if (p==0)
{
o=1;
break;
}
}
if (!o)
{
inc++;
sf--;
s[l]=0;
return 0;
}
}
return 1;
}
int litera(char s[])
{
int w;
if (strlen(s)==5 && s[0]=='T' && s[1]=='R' && s[2]=='U' && s[3]=='E')
return 1;
else
if (strlen(s)==6 && s[0]=='F' && s[1]=='A' && s[2]=='L' && s[3]=='S' && s[4]=='E')
return 0;
else
{
char q;
q=s[strlen(s)-1];
w=l[q-65];
if (strlen(s)>2)
for (int i=strlen(s); i>=0; i--)
if (s[i]=='N' && s[i+1]=='O' && s[i+2]=='T')
w=!w;
}
return w;
}
int rezolvare(char s[])
{
while (s[strlen(s)-1]==' ')
s[strlen(s)-1]=0;
int paranteza=0,p=0,aa=0,oo=0;
//printf("%s\n",s);
int e=strlen(s)-1;
int inc=0,sf=e;
while (s[inc]=='(')
{
if (deparantezare(s,inc,sf))
break;
}
for (int i=sf; i>=inc; i--)
{
if (s[i]==')')
{
--p;
paranteza++;
}
else if (s[i]=='(')
++p;
else
if (p==0 && s[i]=='A' && s[i+1]=='N' && s[i+2]=='D' && aa==0)
aa=i;
else
if (p==0 && s[i]=='O' && s[i+1]=='R' && oo==0)
oo=i;
}
while (s[inc]=='(' && s[sf]==')' && paranteza==1)
{
inc++;
s[sf]=0;
sf--;
}
char *w;
int z,x;
if (aa)
{
s[aa]=0;
w=s+inc;
z=rezolvare(w);
w=s+aa+4;
x=rezolvare(w);
return z&x;
}
else
if (oo)
{
s[oo]=0;
w=s+inc;
z=rezolvare(w);
w=s+oo+3;
x=rezolvare(w);
return z|x;
}
else
return litera(s);
}
int main()
{
citire();
for (int i=0; i<n; i++)
{
l[a[i]-65]=!l[a[i]-65];
printf("%d",rezolvare(s));
}
return 0;
}