Pagini recente » Cod sursa (job #1548837) | Cod sursa (job #2754492) | Cod sursa (job #162624) | Cod sursa (job #1570474) | Cod sursa (job #2115643)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
char a[10000];
int n, b[30], m;
int cautasemn1(int st, int dr)
{
int nr=0;
for (int i=dr; i>=st+1; i--)
{
if (nr==0 && a[i]=='R' && a[i-1]=='O')
return i-1;
if (a[i]==')')
nr++;
else
if (a[i]=='(')
nr--;
}
return -1;
}
int cautasemn2(int st, int dr)
{
int nr=0;
for (int i=dr; i>=st+2; i--)
{
if (nr==0 && a[i]=='D' && a[i-1]=='N' && a[i-2]=='A')
return i-2;
if (a[i]==')')
nr++;
else
if (a[i]=='(')
nr--;
}
return -1;
}
int cautasemn3(int st, int dr)
{
int nr=0;
for (int i=dr; i>=st+2; i--)
{
if (nr==0 && a[i]=='T' && a[i-1]=='O' && a[i-2]=='N')
return i-2;
if (a[i]==')')
nr++;
else
if (a[i]=='(')
nr--;
}
return -1;
}
int valoare(int x)
{
return b[a[x]-65];
}
int expresie(int st, int dr)
{
int semn;
semn=cautasemn1(st, dr);
if (semn!=-1)
{
int e1, e2;
e1=expresie(st, semn-2);
e2=expresie(semn+3, dr);
return e1 || e2;
}
semn=cautasemn2(st, dr);
if (semn!=-1)
{
int e1, e2;
e1=expresie(st, semn-3);
e2=expresie(semn+4, dr);
return e1 && e2;
}
semn=cautasemn3(st, dr);
if (semn!=-1)
{
int e1;
e1=expresie(semn+4, dr);
return !e1;
}
if (a[st]=='(' && a[dr]==')')
return expresie(st+1, dr-1);
if (a[st]=='T' && a[dr]=='E')
return 1;
if (a[st]=='F' && a[dr]=='E')
return 0;
return valoare(st);
}
int main()
{
ifstream fin("bool.in");
ofstream fout("bool.out");
fin.getline(a, 10000);
n=strlen(a);
fin >> m;
for (int i=0; i<m; i++)
{
char c;
fin >> c;
b[c-65]=!b[c-65];
fout << expresie(0, n-1);
}
return 0;
}