Pagini recente » Cod sursa (job #3361986) | Cod sursa (job #3361983) | Cod sursa (job #3360671) | Cod sursa (job #3361933) | Cod sursa (job #3362013)
#include <fstream>
using namespace std;
ifstream fin ("bool.in");
ofstream fout ("bool.out");
int val[26];
void spatiu(const string& s, int p) {
while (p<s.size() && s[p]==' ') {
p++;
}
}
int expresie(const string& s, int& p);
int termen(const string& s, int& p);
int factor(const string& s, int& p);
int factor (const string& s, int& p) {
spatiu(s, p);
if (p<s.size() && s[p]=='N' && p+2<s.size() && s[p+1]=='O' && s[p+2]=='T') {
p+=3;
return !factor(s, p);
}
if (s[p]=='(') {
p++;
int sol=expresie(s, p);
spatiu(s, p);
if (p<s.size() && s[p]==')') {
p++;
}
return sol;
}
if (p+3<=s.size() && s.substr(p, 4)=="TRUE") {
p+=4;
return 1;
}
if (p+4<=s.size() && s.substr(p, 5)=="FALSE") {
p+=5;
return 0;
}
if (s[p]>='A' && s[p]<='Z') {
int idx=s[p]-'A';
p++;
return val[idx];
}
return 0;
}
int termen(const string& s, int& p) {
spatiu(s, p);
int sol=factor(s, p);
spatiu(s, p);
while (p<s.size() && s[p]=='A' && p+2<s.size() && s[p+1]=='N' && s[p+2]=='D') {
p+=3;
int dr=factor(s, p);
sol=sol && dr;
spatiu(s, p);
}
return sol;
}
int expresie (const string& s, int& p) {
spatiu(s,p);
int sol=termen(s, p);
spatiu(s, p);
while (p<s.size() && s[p]=='O' && p+1<s.size() && s[p+1]=='R') {
p+=2;
int dr=termen(s, p);
sol=sol || dr;
spatiu(s, p);
}
return sol;
}
int main() {
int n,i,p;
string s;
char ch;
getline(fin, s);
fin>>n;
for (i=0; i<n; i++) {
fin>>ch;
val[ch-'A']=!val[ch-'A'];
p=0;
fout<<expresie(s,p);
}
fout<<endl;
return 0;
}