Pagini recente » Cod sursa (job #213086) | Cod sursa (job #2710132) | Cod sursa (job #2868279) | Cod sursa (job #1254342) | Cod sursa (job #2272212)
#include <fstream>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int k,f[150],j,i=0,n;
char s[1005],sir[1005],ch;
int expresie_or(),expresie_and(),expresie_not(),termen();
int expresie_or() {
int r;
r=expresie_and();
while (sir[i]=='|') {
i++;
r=(r | expresie_and());
}
return r;
}
int expresie_and() {
int r;
r=expresie_not();
while (sir[i]=='&') {
i++;
r=(r & expresie_not());
}
return r;
}
int expresie_not() {
int r;
r=termen();
while (sir[i]=='!') {
i++;
r=(r ^ termen());
}
return r;
}
int termen() {
int r;
if (sir[i]=='('){
i++;
r=expresie_or();
i++;
}
else {
if (sir[i]=='0'){
i++;
return 0;
}
else if (sir[i]=='1'){
i++;
return 1;
}
return f[sir[i++]];
}
return r;
}
int main() {
fin.get(s,1005);
//transform sirul in unul fara spatii si care contine &,|,!
for (int i=0;s[i]!=0;i++) {
if (s[i]==' ')
continue;
if (s[i]=='O'&&s[i+1]=='R') {
sir[k++]='|';
i+=1;
continue;
}
if (s[i]=='A'&&s[i+1]=='N') {
sir[k++]='&';
i+=2;
continue;
}
if (s[i]=='N'&&s[i+1]=='O') {
sir[k++]='1';
sir[k++]='!';
i+=2;
continue;
}
if (s[i]=='T'&&s[i+1]=='R') {
sir[k++]='1';
i+=3;
continue;
}
if (s[i]=='F'&&s[i+1]=='A') {
sir[k++]='0';
i+=4;
continue;
}
if (s[i]=='('||s[i]==')') {
sir[k++]=s[i]; continue;
}
sir[k++]=s[i]; //daca nu intra in niciun if => caracterul e litera
}
fin>>n;
for (j=1;j<=n;j++) {
fin>>ch;
f[ch]=1-f[ch]; i=0;
fout<<expresie_or();
}
}