Pagini recente » Cod sursa (job #201400) | Cod sursa (job #45600) | Cod sursa (job #2283151) | Cod sursa (job #3344992) | Cod sursa (job #3337620)
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
using namespace std;
ifstream fin ("bool.in");
ofstream fout ("bool.out");
string line0;
char line[1001];
int f[30][1001];
int p;
bool expresie();
bool factor();
bool AndFunction();
bool NotFunction();
bool expresie(){
bool sum;
sum = AndFunction();
while(line[p] == '|'){
if(line[p] == '|'){
p++;
sum=sum|AndFunction();
}
}
return sum;
}
bool AndFunction(){
bool sum;
sum = factor();
while(line[p] == '&'){
if(line[p] == '&'){
p++;
sum=sum&factor();
}
}
return sum;
}
bool factor(){
bool val = 0, sign = 0;
while(line[p] == '!'){
sign = 1-sign;
p++;
}
if(line[p] == '('){
p++;
val = expresie();
p++;
return val;
}
if(line[p] == '1'){
val = 1;
p++;
}
else if(line[p] == '0'){
val = 0;
p++;
}
if(sign == 0)
return val;
return 1-val;
}
int main()
{
getline(fin, line0);
int i, n;
i = 0;
p = 0;
n = line0.size();
while(i<n){
if (line0[i] == 'A' && line0[i+1] == 'N' && line0[i+2] == 'D') {
line[p++] = '&';
i += 2;
}
else if (line0[i] == 'O' && line0[i+1] == 'R') {
line[p++] = '|';
i += 1;
}
else if (line0[i] == 'N' && line0[i+1] == 'O' && line0[i+2] == 'T') {
line[p++] = '!';
i += 2;
}
else if (line0[i] == 'T' && line0[i+1] == 'R' &&
line0[i+2] == 'U' && line0[i+3] == 'E') {
line[p++] = '1';
i += 3;
}
else if (line0[i] == 'F' && line0[i+1] == 'A' &&
line0[i+2] == 'L' && line0[i+3] == 'S' &&
line0[i+4] == 'E') {
line[p++] = '0';
i += 4;
}
else if (line0[i] >= 'A' && line0[i] <= 'Z') {
f[line0[i] - 'A'][0] ++;
f[line0[i] - 'A'][f[line0[i] - 'A'][0]] = p;
line[p++] = '0';
}
else if (line0[i] == '(' || line0[i] == ')') {
line[p++] = line0[i];
}
i++;
}
int k;
fin>>k;
int ch;
ch = fin.get();
for(int i=1;i<=k;i++){
ch = fin.get();
for(int j = 1; j <=f[ch-'A'][0];j++){
if(line[f[ch-'A'][j]] == '0')
line[f[ch-'A'][j]] = '1';
else{
line[f[ch-'A'][j]] = '0';
}
}
p = 0;
fout<<expresie();
}
return 0;
}