Pagini recente » Cod sursa (job #1264916) | Cod sursa (job #2402200) | Cod sursa (job #1473102) | Cod sursa (job #1655651) | Cod sursa (job #907962)
Cod sursa(job #907962)
#include<fstream>
#include<cstring>
char s[2020];
char T[120];
int F[100];
int t, i, j;
using namespace std;
int expresie();
int termenssau();
int termenssi();
int termensnu();
void parsare(char *s) {
for (i=0;s[i]!=0;i++) {
if (s[i] == 'T' && s[i+1] == 'R' && s[i+2] == 'U' && s[i+3] == 'E') {
s[i] = '1';
strcpy(s+i+1, s+i+4);
} else
if (s[i] == 'F' && s[i+1] == 'A' && s[i+2] == 'L' && s[i+3] == 'S' && s[i+4] == 'E') {
s[i] = '0';
strcpy(s+i+1, s+i+5);
} else
if (s[i] == 'A' && s[i+1] == 'N' && s[i+2] == 'D') {
s[i] = '&';
strcpy(s+i+1, s+i+3);
} else
if (s[i] == 'O' && s[i+1] == 'R') {
s[i] = '|';
strcpy(s+i+1, s+i+2);
} else
if (s[i] == 'N' && s[i+1] == 'O' && s[i+2] == 'T') {
s[i] = '1';
s[i+1] = '^';
strcpy(s+i+2, s+i+3);
}
}
j = 0;
for (i=1;s[i]!=0;i++) {
if (s[i] != ' ')
s[++j] = s[i];
}
s[++j] = 0;
}
int expresie() {
int r = termenssau();
while (s[i] == '|') {
i++;
r = r || termenssau();
}
return r;
}
int termenssau() {
int r = termenssi();
while (s[i] == '&') {
i++;
r = r && termenssi();
}
return r;
}
int termenssi() {
int r = termensnu();
while (s[i] == '^') {
i++;
if (termensnu() == 1)
r = 0;
else
r = 1;
}
return r;
}
int termensnu() {
int r;
if (s[i] == '(') {
i++;
r = expresie();
i++;
return r;
}
if (s[i] == '1')
return 1;
if (s[i] == '0')
return 0;
return F[s[i]];
}
int main(){
ifstream fin("bool.in");
ofstream fout("bool.out");
fin.get(s, 2010);
fin>>t;
fin>>T;
parsare(s);
for (j=0;j<t;j++) {
F[T[j]] = 1-F[T[j]];
i = 0;
fout<<expresie();
}
fout<<"\n";
return 0;
}