Pagini recente » Cod sursa (job #2834958) | Cod sursa (job #2968512) | Cod sursa (job #151513) | Cod sursa (job #612038) | Cod sursa (job #2208536)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("bool.in");
ofstream fout ("bool.out");
int f[28], n;
string s;
char ch;
bool Expresie(char* &s);
void skip_spaces(char* &s){
while (*s == ' ') s ++;
}
bool Termen(char* &s){
if (*s == 'F' && *(s + 1) == 'A'){
if (*(s + 2) == 'L' && *(s + 3) == 'S'){
if (*(s + 4) == 'E'){
s += 5;
return 0;
}
}
}
else if (*s == 'T' && *(s + 1) == 'R'){
if (*(s + 2) == 'U' && *(s + 3) == 'E'){
s += 4;
return 1;
}
}
else if (*s == '('){
s ++;
Expresie (s);
s ++;
}
else if (isalpha (*s)) return f [*s - 'A'];
}
bool Not (char* &s){
bool nu = 0;
skip_spaces (s);
while (*s == 'N' && *(s + 1) == 'O' && *(s + 2) == 'T'){
s += 3;
nu = 1 - nu;
skip_spaces (s);
}
if (nu == 0) return Termen (s);
return 1 - Termen (s);
}
bool ands (char* &s){
bool val = Not(s);
skip_spaces(s);
while (*s == 'A' && *(s + 1) == 'N'){
if (*(s + 2) == 'D'){
s += 3;
skip_spaces (s);
val &= Not (s);
skip_spaces (s);
}
}
return val;
}
bool Expresie (char* &s){
bool val = ands (s);
skip_spaces (s);
while (*s == 'O' && *(s + 1) == 'R'){
s += 2;
skip_spaces (s);
val |= ands (s);
skip_spaces (s);
}
return val;
}
int main (void){
while (fin.get (ch)){
if (ch == '\n')
break;
s += ch;
}
s += '\0';
fin >> n;
for (int i = 1; i <= n; i ++){
fin >> ch;
f [ch - 'A'] = 1 - f [ch - 'A'];
char *sir = &s[0];
fout << Expresie(sir);
}
return (0);
}