Pagini recente » Cod sursa (job #103386) | Cod sursa (job #1158484) | Cod sursa (job #944340) | Cod sursa (job #1010272) | Cod sursa (job #1759849)
#include<iostream>
#include<fstream>
#include<string>
#include<stack>
#include<cctype>
using namespace std;
fstream fin("bool.in",ios::in),fout("bool.out",ios::out);
int val[200],put[200],n;
string s,str,aux;
stack<int> nr;
stack<char> op;
char c;
char caracter(int& i);
void evaluare();
void rezolvare();
void trans();
int main()
{
char i;
val['!']=3;val['&']=2;val['|']=1;val['t']=1;val['f']=0;
for(i='A';i<='Z';i++) val[i]=0;
getline(fin,s);
trans();
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>c;
val[c]=!val[c];
rezolvare();
}
}
char caracter(int& i)
{
aux="";
for(;i<s.size() && isalpha(s[i]);i++) aux+=s[i]; i--;
if(aux=="FALSE") str+='f';
if(aux=="TRUE") str+='t';
if(aux=="NOT") str+='!';
if(aux=="OR") str+='|';
if(aux=="AND") str+='&';
if(aux.size()==1) str+=aux[0];
}
void rezolvare()
{
for(int i=0;i<str.size();i++)
{
if(isalpha(str[i]))
{
nr.push(val[str[i]]);
}
if(str[i]=='!' || str[i]=='|' || str[i]=='&')
{
while(op.empty()==0 && val[op.top()]>val[str[i]])
{
evaluare();
}
op.push(str[i]);
}
if(str[i]=='(')
{
op.push(str[i]);
}
if(str[i]==')')
{
while(op.empty()==0 && op.top()!='(')
{
evaluare();
}
op.pop();
}
}
while(op.empty()==0)
{
evaluare();
}
fout<<nr.top();nr.pop();
}
void evaluare()
{
int a,b;
b=nr.top(); nr.pop();
c=op.top(); op.pop();
if(c=='!'){
nr.push((!b));return ;
}
a=nr.top(); nr.pop();
if(c=='|') nr.push((a||b));
if(c=='&') nr.push((a&&b));
}
void trans()
{
int i;
for(i=0;i<s.size();i++)
{
if(isalpha(s[i])) caracter(i);
if(s[i]=='(' || s[i]==')') str+=s[i];
}
}