Pagini recente » Cod sursa (job #2099648) | Cod sursa (job #1540318) | Cod sursa (job #110766) | Cod sursa (job #1103531) | Cod sursa (job #2190714)
#include <fstream>
#include <string.h>
using namespace std;
#define Dim 1005
int N,Val,i,j,Nrschimb,Vf,Vfcalc,Vfop;
char Sir[Dim],Oper[Dim],Stiva[Dim],X,Op;
bool Calcul[Dim],Valoare[260];
short int Prioritate[260];
void evaluare()
{
if(Stiva[j]=='&') Calcul[Vfcalc-1]=Calcul[Vfcalc]&Calcul[Vfcalc-1];
else
if(Stiva[j]=='|') Calcul[Vfcalc-1]=Calcul[Vfcalc]|Calcul[Vfcalc-1];
--Vfcalc;
}
int main()
{
ifstream fin("bool.in"); ofstream fout("bool.out");
fin.get(Sir,1003,'\n'); N=strlen(Sir);
Prioritate['(']=0; Prioritate['|']=1; Prioritate['&']=2; Prioritate['!']=3;
Valoare['t']=1; Valoare['f']=0;
for(i=0;i<=N-1;++i)
{
if(Sir[i]>='A' and Sir[i]<='Z' and Sir[i+1]>='A' and Sir[i+1]<='Z')
{
Op=0;
if(Sir[i]=='A') {Op='&'; i+=2;}
else
if(Sir[i]=='O') {Op='|'; ++i;}
else
if(Sir[i]=='N') {Op='!'; i+=2;}
else
if(Sir[i]=='T') {Val='t'; i+=3;}
else {Val='f'; i+=4;}
if(Op==0) Stiva[++Vf]=Val;
else
if(Op=='!') Stiva[++Vf]=Op;
else
{
while(Vfop>=1 and Prioritate[Op]<=Prioritate[Oper[Vfop]]) Stiva[++Vf]=Oper[Vfop--];
Oper[++Vfop]=Op;
}
}
else
if(Sir[i]>='A' and Sir[i]<='Z') Stiva[++Vf]=Sir[i];
else
if(Sir[i]=='(') Oper[++Vfop]=Sir[i];
else
if(Sir[i]==')')
{
while(Oper[Vfop]!='(') Stiva[++Vf]=Oper[Vfop--];
--Vfop;
}
}
while(Vfop>=1) Stiva[++Vf]=Oper[Vfop--];
fin>>Nrschimb;
for(i=1;i<=Nrschimb;++i)
{
fin>>X;
Valoare[X]=!Valoare[X]; Vfcalc=0;
for(j=1;j<=Vf;++j)
{
if(Stiva[j]>='A' and Stiva[j]<='Z') Calcul[++Vfcalc]=Valoare[Stiva[j]];
else
if(Stiva[j]=='!') Calcul[Vfcalc]=!Calcul[Vfcalc];
else
evaluare();
}
fout<<Calcul[1];
}
fin.close (); fout.close();
return 0;
}