Pagini recente » Cod sursa (job #2072745) | Cod sursa (job #1476066) | Cod sursa (job #2457168) | Cod sursa (job #714087) | Cod sursa (job #2950280)
#include <iostream>
#include <fstream>
using namespace std;
#define NMAX 1004
char a[NMAX];
bool t[30];
bool calc_or();
bool calc_and();
bool factor();
int p = 0;
bool calc_or() {
bool rez = calc_and();
while(a[p] == '|') {
p++;
rez = (calc_and() || rez);
}
return rez;
}
bool calc_and() {
bool rez = factor();
while(a[p] == '&') {
p++;
rez = (factor() && rez);
}
return rez;
}
bool factor() {
bool semn = true;
bool val;
while(a[p] == '!') {
semn = (!semn);
p++;
}
if(a[p] == '(') {
p++;
val = calc_or();
p++;
if(semn == false) {
val = (!val);
}
return val;
}
val = t[a[p] - 'A'];
if(semn == false) {
val = (!val);
}
p++;
return val;
}
int main() {
ifstream fin("bool.in");
ofstream fout("bool.out");
int nc = 0;
char ch;
char ant;
fin.get(ch);
a[nc++] = ch;
ant = ch;
fin.get(ch);
while(ch != '\n') {
if(ch != ' ') {
if('A' <= ch && ch <= 'Z') {
if(ch == 'D') {
if(ant == 'N') { //suntem intr-o structura de tip &
a[nc - 2] = '&';
nc = nc - 1;
} else {
a[nc++] = ch;
}
} else if(ch == 'R') {
if(ant == 'O') {
a[nc - 1] = '|';
nc = nc;
} else {
a[nc++] = ch;
}
} else if(ch == 'T') {
if(ant == 'O') {
a[nc - 2] = '!';
nc = nc - 1;
} else {
a[nc++] = ch;
}
} else if(ch == 'E') {
if(ant == 'U') {
a[nc - 3] = '1';
nc = nc - 2;
} else if(ant == 'S') {
a[nc - 3] = '0';
nc = nc - 2;
} else {
a[nc++] = ch;
}
} else {
a[nc++] = ch;
}
} else {
a[nc++] = ch;
}
}
ant = ch;
fin.get(ch);
}
for(int i = 0; i < nc; i++) {
fout << a[i];
}
int n;
fin >> n;
fin.get(ch);//am citit \n
for(int i = 0; i < n; i++) {
fin.get(ch);
t[ch - 'A'] = !t[ch - 'A'];
p = 0;
fout << calc_or();
}
fin.close();
fout.close();
return 0;
}